Izdali ste novo gradnjo, prešli na VPN in isti zaslon se ni več naložil. V Androidu 9 in novejših je pogostejša razlaga bolj dolgočasna: platforma zavrne običajen HTTP aplikacijam, ki ciljajo na API 28 ali višje, VPN pa je spremenil le toliko konteksta, da se je to razkrilo. Napaka, ki jo vidite, je odvisna od odjemalca HTTP, zato tako redko reče cleartext.

Kaj ta spodrsljaj pravzaprav je

Od Androida 9 platforma privzeto blokira cleartext, takoj ko aplikacija cilja na raven API 28 ali višjo. Zahtevo na običajen naslov HTTP platforma zavrne, preden napravo zapusti en sam paket. Katero napako boste videli, je odvisno od knjižnice HTTP: včasih splošna omrežna napaka, včasih potek časa, včasih sporočilo, ki cleartext izrecno imenuje. Česar nikoli ne naredi, je, da doseže vaš strežnik. Android dokumentira privzeto vedenje in alternativo, omejeno na domene, v vodniku za konfiguracijo varnosti.

Brskalnik na isti napravi lahko stran še vedno naloži, in to je namig, ki ga večina spregleda. Brskalniki niso podrejeni omrežni varnostni politiki vaše aplikacije.

Zakaj je obtožen VPN

Običajno se hkrati spremenijo tri stvari. Aplikacija lahko po povezavi VPN razreši drugo ime gostitelja, naprava je lahko nova z novejšo gradnjo, ali pa se je sama gradnja premaknila na ciljno raven API, ki sproži privzeto vedenje. VPN je viden, ciljni SDK pa ne, zato vozovnico dobi VPN.

Primerjajte ciljni ravni stare in nove gradnje, preden se dotaknete omrežne konfiguracije. Aplikacija, ki cilja na 27 ali nižje, je izvzeta, in to pojasni vsako poročilo »pri meni dela na starem telefonu«.

Kam zastavica Expo v resnici pade

V upravljanem projektu Expo dodajanje nastavitve v app.json ne ureja manifesta Android, ker manifest ustvarita prebuild in razvojne gradnje. Prav konfiguracijski vtičnik nastavitev zapiše v tej fazi. Podprta pot je expo-build-properties, konfiguriran v konfiguraciji aplikacije z možnostjo cleartext pod android.

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

Izsek nastavi samo možnost vtičnika; manifest nastane pozneje. Zaženite prebuild ali svežo gradnjo razvojnega odjemalca in nato pred ponovnim testiranjem preglejte ustvarjeni AndroidManifest.xml glede android:usesCleartextTraffic, ker ponovno nalaganje samo z JS obdrži stari manifest. Uskladite različico vtičnika z Expo SDK, na katerem teče projekt. Možnosti vtičnika se med izdajami premikajo, izsek, kopiran iz drugega SDK, pa je zanesljiv vir tihih no-opov.

Bare potek in ožja možnost

Za bare React Native je ustreznica android:usesCleartextTraffic na elementu application ali omrežna varnostna konfiguracija, ki dovoli cleartext le za imenovane domene. Omejena na domene je oblika, ki ji je treba dati prednost, ker dovoli notranji API in vse ostalo pusti na HTTPS. Dokumentira tudi svoj seznam izjem, in prav o tem delu bo vprašal recenzent.

Noben od obeh pristopov ne spremeni privzetega vedenja platforme za kar koli, česar niste imenovali.

Najprej to dokažite iz dnevnika naprave

Pred urejanjem konfiguracije pridobite natančno napako. adb logcat na priključeni napravi pokaže zavrnitev cleartexta s strani platforme in imenuje komponento, ki jo je sprožila. Zavrnjen vtič, ime, ki se ne razreši, ali neuspešno rokovanje TLS kažejo povsem drugam, in vklop cleartexta bi aplikacijo le brezveze oslabil.

Nato ohranite produkcijo pošteno. Cleartext je sprejemljiv za laboratorijsko končno točko, ki ne more ponuditi TLS, in le za najkrajši čas, ki ga lahko načrtujete. Če lahko API zaključi TLS znotraj zasebnega omrežja, dajte potrdilo v shrambo zaupanja naprave in pustite cleartext izklopljen, ker tunel šifrira pot do svojega izhoda in nič za njim.

Ko končna točka odgovori po HTTPS, odstranite dovoljenje, znova zgradite in preizkusite na VPN ter na običajnem Wi-Fi v isti seji. Razreševanje imen se lahko med tema dvema potema razlikuje in le par pove, katera govori resnico.

Sorodni članki