(Un) ресми Habr қолданбасы - HabrApp 2.0: қол жеткізу

Бір тынымсыз және онсыз да қызықсыз кеш, мен парақтап жатырмын ресми Habr қолданбасы, мен саусақтарымды тағы бір рет бүгдім, әрбір жұмыс істемейтін функция үшін бір. Бұл жерде, мысалы, сіз түсініктеме бере алмайсыз, бұл жерде сізге дауыс беру құқығыңыз жоқ, жалпы, формулалар экранда неге көрінбейді?

(Un) ресми Habr қолданбасы - HabrApp 2.0: қол жеткізу
Шешім болды: бізге ыңғайлы, жағымды, өзімізге тән нәрсе керек. Хабрға арналған жеке өтінішіңіз туралы не деуге болады?
Жағдайды түсіну үшін сізге бірнеше скриншот берейін.

(Un) ресми Habr қолданбасы - HabrApp 2.0: қол жеткізуМынадай нәрсе көрінеді ол -дан. habr.com қолданбасы

«Ыңғайсыздықтар» тізімі

  • Бағасы 0-ден басқа жарияланымға баға бере алмайсыз
  • Пікір жазу әрқашан мүмкін емес
  • Сауалнамалар жұмыс істемейді
  • Формулалар қараңғы тақырыпта көрінбейді (қарадан қара)
  • Барлық бетбелгілер қол жетімді емес

Иә, қолданба өткен жылдың тамыз айынан бері жаңартылмады, бірақ ол әлі де нашар. Жалпы, оны түзету керек.

Бірінші бөлім. Кіру ізделуде.

Жылдам Google сұрауы "habrahabr API" ол әлдеқашан ескіргенін айтады репозиторий Github-да, содан бері жаңартылмаған Қараша 21 2016, және бұл, бір сәтке, екі жарым жыл.

Бұл PHP екенін елемей, төмен айналдырып, оқыңыз:

Қолданба идентификаторын алу

Пайдалану бұл пішін Habrahabr сайтында сіз жаңа қолданбаның мәнін және оған API қажет мақсатын қысқаша сипаттауыңыз керек.

Ешқандай сұрақ жоқ, егер сізге қол жеткізу қажет болса, ол сізге қажет. Біз хат жазамыз (қысқартылған):

Жазу

PWA негізінде Habr қолданбасын жасағысы келеді. Мұның бірнеше себептері бар. 

Бірінші және ең айқын: Android қолданбасы менің жеке талаптарыма сәйкес келмейді.

Екіншіден: әдетте электрондық пошта арқылы келетін барлық нәрселер туралы жергілікті хабарландырулар жеткіліксіз (мысалы, түсініктемелер).

Үшінші: қызығушылықтарымды ескере отырып, мені қызықтыратын адамдар/хабтар туралы жеке дайджесттер (перспективада).

Жауап, әрине, өте жағымды емес, бірақ кем дегенде адал болды:

Өкінішке орай, қазіргі уақытта API-ге қол жеткізу мүмкін емес. Біз API интерфейсін аяқтағаннан кейін рұқсат беруді жалғастыруды жоспарлап отырмыз, бірақ бізде әлі нақты күндер жоқ, себебі Біз қазір басқа да басым міндеттерді шешумен айналысып жатырмыз.

«Жарайды, проблема жоқ! Біз бірдеңе ойлап табамыз!" – дедім өзіме-өзім қарай бастадым.

Екінші бөлім. Терең қазбалар.

Логика негізінде, егер қолданба жұмыс істеп тұрса, онда ол API интерфейсіне қол жеткізе алады және ол қолданбаға жалғанған. Талдап көрейік.

Біз трафикпен айналысатындықтан, Wireshark - біздің таңдауымыз. Телефонды жұмыс үстелі компьютері арқылы Интернетке қосқаннан кейін біз қосымшаны ашып, сұраныстарды қараймыз:

(Un) ресми Habr қолданбасы - HabrApp 2.0: қол жеткізу
Түсінікті ештеңе жоқ екені анық

Иә, бәрі шифрланған, бірақ мен криптографиямен араласқым келмейді. Содан кейін қолданбаның ішіне қарау керек.

Декомпиляцияланған .apk, іздеуді бастайық. Кез келген API не қажет? Дұрыс, соңғы нүкте, барлық сұраулар жіберілетін орын. Бұл http(лар) болуы мүмкін, «https://» тауып көрейік:

Файлда AuthLinkManager.smali табу

.field OAUTH:Ljava/lang/String; = "https://habrahabr.ru/auth/o/%s/"
.field OAUTH_PARAMS:Ljava/lang/String; = "?client_id=%s&response_type=token&redirect_uri=%s"
.field OAUTH_REDIRECT_URL:Ljava/lang/String; = "http://cleverpumpkin.ru"

Бұл Android виртуалды машинасының коды (Дальвик В.М.), адамдар үшін өте түсінікті емес, бірақ бәрібір ақпараттандырады. Бұл үш тұрақты мән олардың мазмұны мен атауына, сондай-ақ GitHub репозиторийіне қарап, әдісті пайдаланып кіру таңбалауышын сұрау үшін пайдаланылады. GET.

Әрі қарай қарастырайық. Іздеуде келесі файл пайда болады NetworkModule.smali:

const-string v0, "https://habr.com/api/v1/"

Міне, сіздің өтініштеріңізбен баратын орын!

Өзін-өзі жазған клиент дұрыс жұмыс істеуі үшін бір ғана нәрсені анықтау керек - client_id, бұл қолданба үшін бірегей идентификатор болуы мүмкін.

Дегенмен, бұл мәтінді бастапқы кодтан іздеу тиісті ақпаратты табуға әкелмеді...

Бірақ кенеттен файлдардың бірінде менің көзіме қызықты жолдар түсті:

const-string p8, "log-tag"
invoke-static {p8, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

Бұл, сіз түсінесіз, журнал жазбасы. Бірақ не жазу?

Үшінші бөлім. Бұл журналдар!

Біз қолданамыз adb logcat қолданба журналдарын көру үшін.

(Un) ресми Habr қолданбасы - HabrApp 2.0: қол жеткізу

Күтпеген жерден журналдар күткеннен де егжей-тегжейлі болып шықты.

Бұл жерде бізге керек нәрсе ғана емес client_idбірақ белгісі пайдаланушы/қолданба және кіру и пароль анық мәтінде!

Кейбір қастандық теорияларыЖурналдарда логин мен парольдің болуы ештеңеге зиян тигізбейді, өйткені бұл журналдарды тек түбірлік құқықтармен немесе қосылым арқылы оқуға болады. adb. Бірақ Habr оқитын адамдар арасында отладка қосулы болуы мүмкін Android әзірлеушілері бар болғандықтан, бұл мәселеге айналады.

Бұл жағдайда әуежайда «тегін зарядтау» шоттың ұрлануына әкелуі мүмкін, бірақ бұл кімге керек?
Бұл журналдардан біз мыналарды шығара аламыз:

  • client_id и apikeyқол жеткізу үшін қажет API;
  • Пайдаланушы авторизациясының URL мекенжайы (біртүрлі, бірақ бұл әдіс туралы репозиторийде ештеңе жоқ, мүмкін ол қамтамасыз етілмеген шығар?)

Міне осылай болды. Осы шағын зерттеуге сүйене отырып, қазірдің өзінде шағын жоба бойынша жұмыс жүргізілуде - мобильді қосымшаны өзіміз енгізу. Көмектесемін деушілерге хабарлама жазуды сұраймын, ал қалғандарының барлығына дауыс берулерін сұраймын (өйткені бұл біреуге керек пе екенін түсінгім келеді).

Назарларыңызға рахмет!

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сіз Habr мобильді қосымшасын пайдаланасыз ба?

  • Иә, мен оны қолданамын, мен оған ризамын

  • Иә, мен оны қолданамын, қолданба қолайсыздықты тудырады

  • Жоқ, мен телефонда веб-нұсқасын қолданамын

  • Жоқ, мен Хабрды компьютерден қолданамын

357 пайдаланушы дауыс берді. 30 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру