Siz yangi build chiqardingiz, VPN ga o‘tdingiz va o‘sha ekran yuklanmay qo‘ydi. Android 9 va undan keyingi versiyalarda keng tarqalgan tushuntirish zerikarliroq: platforma API 28 yoki undan yuqori darajani nishonga olgan ilovalar uchun oddiy HTTP ni rad etadi, VPN esa buni ochib berishga yetadigan kontekstni o‘zgartirdi xolos. Ko‘rayotgan xatoligingiz HTTP mijozi ga bog‘liq, shuning uchun u cleartext deb juda kam aytadi.

Bu muvaffaqiyatsizlik aslida nima

Android 9 dan boshlab platforma ilova API 28 yoki undan yuqori darajani nishonga olgan zahoti cleartext ni sukut bo‘yicha bloklaydi. Oddiy HTTP manziliga yuborilgan so‘rov qurilmadan bitta ham paket chiqmasdan oldin platforma tomonidan rad etiladi. Qaysi xatoni ko‘rishingiz HTTP kutubxonasiga bog‘liq: ba’zan umumiy tarmoq nosozligi, ba’zan vaqt tugashi, ba’zan cleartext ni ochiq nomlaydigan xabar. U hech qachon qilmaydigan narsa — serveringizga yetib borish. Android sukut va domen bilan cheklangan muqobilni o‘zining xavfsizlik konfiguratsiyasi qo‘llanmasida hujjatlashtiradi.

O‘sha qurilmadagi brauzer hali ham sahifani yuklashi mumkin, va ko‘pchilik o‘tkazib yuboradigan ishora shu. Brauzerlar ilovangizning tarmoq xavfsizligi siyosatiga bo‘ysunmaydi.

Nega VPN ayblanadi

Odatda uch narsa bir vaqtda o‘zgaradi. VPN ulangandan keyin ilova boshqa xost nomini hal qilishi mumkin, qurilma yangi va yangiroq build bilan bo‘lishi mumkin, yoki build o‘zi sukutni ishga tushiruvchi maqsadli API darajasiga o‘tgan bo‘lishi mumkin. VPN ko‘rinadi, maqsadli SDK ko‘rinmaydi, shuning uchun chiptani VPN oladi.

Tarmoq konfiguratsiyasiga tegishdan oldin eski va yangi build ning maqsad darajalarini solishtiring. 27 yoki undan past darajani nishonga olgan ilova ozod qilinadi, va bu «mening eski telefonimda ishlaydi» tipidagi har bir xabarni izohlaydi.

Expo bayrog‘i aslida qayerga tushadi

Boshqariladigan Expo loyihasida app.json ga sozlama qo‘shish Android manifestini tahrirlamaydi, chunki manifestni prebuild va rivojlanish build lari ishlab chiqaradi. Aynan konfiguratsiya plagin i o‘sha bosqichda sozlamani yozadi. Qo‘llab-quvvatlanadigan yo‘l — expo-build-properties, u ilova konfiguratsiyasida android ostida cleartext opsiyasi bilan sozlanadi.

{
  "plugins": [
    ["expo-build-properties", {
      "android": { "usesCleartextTraffic": true }
    }]
  ]
}

Parcha faqat plagin opsiyasini o‘rnatadi; manifest keyinroq ishlab chiqariladi. prebuild yoki yangi rivojlanish-mijozi build ini ishga tushiring, so‘ng qayta sinashdan oldin yaratilgan AndroidManifest.xml faylida android:usesCleartextTraffic bor-yo‘qligini tekshiring, chunki faqat JS bilan qayta yuklash eski manifestni saqlaydi. Plagin versiyasini loyiha ishlaydigan Expo SDK bilan moslashtiring. Plagin opsiyalari nashrlar orasida o‘zgaradi, va boshqa SDK dan ko‘chirilgan parcha jim harakatsizlikning ishonchli manbai.

Bare oqim va torroq variant

Bare React Native uchun muqobil — application elementidagi android:usesCleartextTraffic, yoki cleartext ga faqat nomlangan domenlar uchun ruxsat beruvchi tarmoq xavfsizligi konfiguratsiyasi. Domen bilan cheklangan shaklni tanlash kerak, chunki u ichki API ga ruxsat beradi va qolgan hammasini HTTPS da qoldiradi. U o‘zining istisnolar ro‘yxatini ham hujjatlashtiradi, va sharhlovchi aynan shu qism haqida so‘raydi.

Ikki yondashuvning hech biri siz nomlamagan narsa uchun platforma sukutini o‘zgartirmaydi.

Avval qurilma jurnalidan isbotlang

Konfiguratsiyani tahrirlashdan oldin aniq nosozlikni oling. Ulangan qurilmada adb logcat platformaning cleartext ni rad etishini ko‘rsatadi va uni keltirib chiqargan komponentni nomlaydi. Rad etilgan soket, hal qilinmaydigan nom yoki muvaffaqiyatsiz TLS qo‘l berish butunlay boshqa joyga ishora qiladi, va cleartext ni yoqish ilovani behuda zaiflashtiradi.

So‘ng ishlab chiqarishni halol tuting. TLS taklif qila olmaydigan laboratoriya oxirgi nuqtasi uchun cleartext maqbul, va faqat rejalashtira oladigan eng qisqa vaqt uchun. Agar API TLS ni xususiy tarmoq ichida tugata olsa, sertifikatni qurilmaning ishonch omboriga qo‘ying va cleartext ni o‘chirilgan holda qoldiring, chunki tunnel o‘z chiqishigacha bo‘lgan yo‘lni shifrlaydi, undan keyin hech narsani emas.

Oxirgi nuqta HTTPS da javob bera boshlagach, ruxsatni olib tashlang, qayta build qiling va o‘sha sessiyada VPN da hamda oddiy Wi-Fi da sinang. Nomlarni hal qilish bu ikki yo‘lda farq qilishi mumkin, va qaysi biri haqiqatni aytayotganini faqat juftlik ko‘rsatadi.

O'xshash maqolalar