Објавивте нов build, преминавте на VPN и истиот екран престана да се вчитува. На Android 9 и поново почестото објаснување е подосадно: платформата одбива обичен HTTP за апликации што целат на API 28 или повисоко, а VPN-от смени само доволно контекст за тоа да се покаже. Грешката што ја гледате зависи од HTTP клиентот, затоа тој толку ретко вели cleartext.

Што е всушност овој неуспех

Од Android 9 натаму платформата стандардно го блокира cleartext штом апликацијата ќе се насочи кон ниво на API 28 или повисоко. Барањето до обична HTTP адреса платформата го одбива пред воопшто еден пакет да го напушти уредот. Која грешка ќе ја видите зависи од HTTP библиотеката: понекогаш општ мрежен неуспех, понекогаш истек на време, понекогаш порака што cleartext го именува директно. Она што никогаш не го прави е да стигне до вашиот сервер. Android го документира стандардот и алтернативата ограничена на домен во упатството за безбедносна конфигурација.

Прелистувач на истиот уред сепак може да ја вчита страницата и тоа е трагата што повеќето луѓе ја пропуштаат. Прелистувачите не подлежат на мрежната безбедносна политика на вашата апликација.

Зошто се обвинува VPN-от

Обично три работи се менуваат истовремено. Апликацијата може да резолвира друго име на домаќин откако VPN-от ќе се поврзе, уредот може да е нов со понов build, или самиот build да е преместен на целно ниво на API што го активира стандардот. VPN-от е видлив, а целниот SDK не е, па VPN-от го добива тикетот.

Споредете ги целните нивоа на стариот и новиот build пред да ја допрете мрежната конфигурација. Апликација што цели на 27 или пониско е изземена и тоа го објаснува секој извештај од типот «кај мене работи на стариот телефон».

Каде всушност слетува знамето на Expo

Во управуван Expo проект, додавањето поставка во app.json не уредува Android манифест, бидејќи манифестот го создаваат prebuild и development build-овите. Токму конфигурацискиот приклучок ја запишува поставката во таа фаза. Поддржаниот пат е expo-build-properties, конфигуриран во конфигурацијата на апликацијата со опцијата cleartext под android.

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

Исечокот ја поставува само опцијата на приклучокот; манифестот се создава подоцна. Стартувајте prebuild или свеж development-client build, па пред повторно тестирање проверете го генерираниот AndroidManifest.xml за android:usesCleartextTraffic, бидејќи повторно вчитување само со JS го задржува стариот манифест. Усогласете ја верзијата на приклучокот со Expo SDK на кој работи проектот. Опциите на приклучокот се менуваат меѓу изданијата, а исечок копиран од друг SDK е сигурен извор на тивко ништо-правење.

Bare текот и потесната опција

За bare React Native еквивалентот е android:usesCleartextTraffic на елементот application, или мрежна безбедносна конфигурација што дозволува cleartext само за именувани домени. Формата ограничена на домен е онаа што треба да се претпочита, бидејќи го дозволува внатрешниот API и сето останато го остава на HTTPS. Таа ја документира и сопствената листа на исклучоци, а токму за тој дел ќе праша рецензентот.

Ниту еден од двата пристапа не го менува стандардот на платформата за нешто што не сте го именувале.

Прво докажете го од дневникот на уредот

Пред да ја уредувате конфигурацијата, земете го точниот неуспех. adb logcat на поврзан уред го покажува одбивањето на cleartext од платформата и ја именува компонентата што го предизвикала. Одбиен сокет, име што не се резолвира или неуспешно TLS ракување укажуваат на сосема друго место, а вклучувањето cleartext само бесцелно би ја ослабнало апликацијата.

Потоа држете ја продукцијата чесна. Cleartext е прифатлив за лабораториска крајна точка што не може да понуди TLS, и тоа само за најкраткото време што можете да го испланирате. Ако API-то може да го заврши TLS во приватната мрежа, ставете го сертификатот во складиштето за доверба на уредот и оставете cleartext исклучен, бидејќи тунелот го шифрира патот до својот излез и ништо потоа.

Штом крајната точка одговори преку HTTPS, отстранете ја дозволата, изградете повторно и тестирајте на VPN-от и на обичен Wi-Fi во истата сесија. Резолвирањето имиња може да се разликува меѓу тие два пата и само парот ви кажува кој ја кажува вистината.

Поврзани статии