Jūs izlaidāt jaunu būvējumu, pārgājāt uz VPN, un tas pats ekrāns pārstāja ielādēties. Operētājsistēmā Android 9 un jaunākās biežākais skaidrojums ir garlaicīgāks: platforma atsakās no vienkārša HTTP lietotnēm, kas mērķē uz API 28 vai augstāku, un VPN mainīja tikai tik daudz konteksta, lai to atklātu. Kļūda, ko redzat, ir atkarīga no HTTP klienta, tāpēc tas tik reti saka cleartext.

Kas šī neizdošanās patiesībā ir

No Android 9 platforma pēc noklusējuma bloķē cleartext, tiklīdz lietotne mērķē uz API 28. līmeni vai augstāku. Platforma noraida pieprasījumu uz vienkāršu HTTP adresi, pirms ierīci atstāj pat viens pakets. To, kādu kļūdu redzēsiet, nosaka HTTP bibliotēka: dažreiz vispārīga tīkla kļūda, dažreiz taimauts, dažreiz ziņojums, kas cleartext nosauc tieši. Tas, ko tā nekad nedara, ir sasniedz jūsu serveri. Android dokumentē noklusējumu un domēnam ierobežoto alternatīvu savā drošības konfigurācijas rokasgrāmatā.

Pārlūks tajā pašā ierīcē joprojām var ielādēt lapu, un tas ir pavediens, ko vairums palaiž garām. Pārlūkiem jūsu lietotnes tīkla drošības politika neattiecas.

Kāpēc tiek vainots VPN

Parasti vienlaikus mainās trīs lietas. Lietotne pēc VPN pieslēgšanas var atrisināt citu resursdatora nosaukumu, ierīce var būt jauna ar jaunāku būvējumu, vai arī pats būvējums var būt pārgājis uz mērķa API līmeni, kas aktivizē noklusējumu. VPN ir redzams, bet mērķa SDK nav, tāpēc biļeti saņem VPN.

Pirms aiztikt tīkla konfigurāciju, salīdziniet vecā un jaunā būvējuma mērķa līmeņus. Lietotne, kas mērķē uz 27 vai zemāku, ir atbrīvota, un tas izskaidro katru ziņojumu «man tas strādā vecajā telefonā».

Kur Expo karodziņš patiešām nonāk

Pārvaldītā Expo projektā iestatījuma pievienošana app.json failam nerediģē Android manifestu, jo manifestu veido prebuild un izstrādes būvējumi. Tieši konfigurācijas spraudnis tajā posmā ieraksta iestatījumu. Atbalstītais ceļš ir expo-build-properties, kas konfigurēts lietotnes konfigurācijā ar cleartext opciju zem android.

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

Izvilkums tikai iestata spraudņa opciju; manifests tiek veidots vēlāk. Palaidiet prebuild vai svaigu izstrādes klienta būvējumu, pēc tam pirms atkārtotas testēšanas pārbaudiet ģenerēto AndroidManifest.xml attiecībā uz android:usesCleartextTraffic, jo atkārtota ielāde tikai ar JS saglabā veco manifestu. Saskaņojiet spraudņa versiju ar Expo SDK, uz kura darbojas projekts. Spraudņa opcijas mainās starp laidieniem, un no cita SDK nokopēts izvilkums ir uzticams klusas nedarbošanās avots.

Bare plūsma un šaurākā iespēja

Bare React Native atbilde ir android:usesCleartextTraffic uz application elementa vai tīkla drošības konfigurācija, kas atļauj cleartext tikai nosauktiem domēniem. Izvēlēties vajadzētu domēnam ierobežoto formu, jo tā atļauj iekšējo API un visu pārējo atstāj uz HTTPS. Tā arī dokumentē savu izņēmumu sarakstu, un tieši par šo daļu jautās recenzents.

Neviens no abiem paņēmieniem nemaina platformas noklusējumu tam, ko jūs nenosaucāt.

Vispirms pierādiet to no ierīces žurnāla

Pirms rediģēt konfigurāciju, iegūstiet precīzu kļūdu. Pievienotā ierīcē adb logcat parāda platformas cleartext atteikumu un nosauc komponentu, kas to izraisīja. Noraidīts ligzdsavienojums, neatrisināms nosaukums vai neizdevies TLS rokasspiediens norāda pavisam citur, un cleartext ieslēgšana tikai bez iemesla vājinātu lietotni.

Pēc tam turiet produkciju godīgu. Cleartext ir pieņemams laboratorijas galapunktam, kas nevar piedāvāt TLS, un tikai uz īsāko laiku, ko varat ieplānot. Ja API var pabeigt TLS privātajā tīklā, ievietojiet sertifikātu ierīces uzticēšanās krātuvē un atstājiet cleartext izslēgtu, jo tunelis šifrē ceļu līdz savai izejai un neko aiz tās.

Tiklīdz galapunkts atbild pa HTTPS, noņemiet atļauju, pārbūvējiet un testējiet VPN un parastajā Wi-Fi tajā pašā sesijā. Nosaukumu atrisināšana šajos divos ceļos var atšķirties, un tikai pāris parāda, kurš saka patiesību.

Saistītie raksti