Yeni buraxılış çıxardınız, VPN-ə keçdiniz və eyni ekran yüklənməz oldu. Android 9 və sonrakı versiyalarda daha çox rast gəlinən izahat daha darıxdırıcıdır: platform API 28 və ya daha yüksək səviyyəni hədəfləyən tətbiqlər üçün adi HTTP-ni rədd edir, VPN isə yalnız bunu üzə çıxarmağa çatan konteksti dəyişdi. Aldığınız xəta HTTP müştərisindən asılıdır, buna görə də o, cleartext sözünü bu qədər nadir hallarda deyir.

Bu nasazlıq əslində nədir

Android 9-dan başlayaraq platform, tətbiq API səviyyəsi 28 və ya daha yüksəyi hədəflədikdən sonra cleartext-i susmaya görə bloklayır. Adi HTTP ünvanına sorğu cihazdan bir dənə də paket çıxmamış platform tərəfindən rədd edilir. Hansı xətanı gördüyünüz HTTP kitabxanasından asılıdır: bəzən ümumi şəbəkə nasazlığı, bəzən taym-aut, bəzən cleartext-i açıq şəkildə adlandıran mesaj. Heç vaxt etmədiyi şey serverinizə çatmaqdır. Android susmaya görə davranışı və domenlə məhdud alternativi təhlükəsizlik konfiqurasiyası təlimatında sənədləşdirir.

Eyni cihazdakı brauzer səhifəni hələ də yükləyə bilir və çoxlarının buraxdığı ipucu elə budur. Brauzerlər tətbiqinizin şəbəkə təhlükəsizliyi siyasətinə tabe deyil.

Niyə günah VPN-in üstünə düşür

Adətən üç şey eyni anda dəyişir. Tətbiq VPN qoşulduqdan sonra başqa host adını həll edə bilər, cihaz daha yeni buraxılışı olan təzə cihaz ola bilər, ya da build özü susmaya görə davranışı işə salan hədəf API səviyyəsinə keçmiş ola bilər. VPN görünür, hədəf SDK isə görünmür, ona görə bilet VPN-ə düşür.

Şəbəkə konfiqurasiyasına toxunmazdan əvvəl köhnə və yeni build-in hədəf səviyyələrini müqayisə edin. 27 və ya daha aşağı səviyyəni hədəfləyən tətbiq istisnadır və bu, «mənim köhnə telefonumda işləyir» tipli bütün hesabatları izah edir.

Expo bayrağı əslində harada yerləşir

İdarə olunan Expo layihəsində app.json-a parametr əlavə etmək Android manifestini redaktə etmir, çünki manifesti prebuild və development build-lər yaradır. Parametri həmin mərhələdə yazan şey konfiqurasiya plaginidir. Dəstəklənən yol expo-build-properties-dir; o, tətbiq konfiqurasiyasında android altında cleartext seçimi ilə qurulur.

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

Fraqment yalnız plagin seçimini qurur; manifest sonra yaradılır. Prebuild və ya təzə development-client build işə salın, sonra yenidən test etməzdən əvvəl yaradılmış AndroidManifest.xml-də android:usesCleartextTraffic-i yoxlayın, çünki yalnız JS ilə yenidən yükləmə köhnə manifesti saxlayır. Plagin versiyasını layihənin işlədiyi Expo SDK ilə uyğunlaşdırın. Plagin seçimləri buraxılışlar arasında dəyişir və başqa SDK-dan kopyalanmış fraqment səssiz heç-nə-etməyən əməliyyatların etibarlı mənbəyidir.

Bare iş axını və daha dar seçim

Bare React Native üçün ekvivalent application elementində android:usesCleartextTraffic, ya da cleartext-ə yalnız adlandırılmış domenlər üçün icazə verən şəbəkə təhlükəsizliyi konfiqurasiyasıdır. Üstünlük verilməli variant domenlə məhdud formadır, çünki o, daxili API-yə icazə verir, qalan hər şeyi HTTPS-də saxlayır. O, həmçinin öz istisna siyahısını sənədləşdirir və rəyçinin soruşacağı hissə elə budur.

Nə birinci, nə ikinci yanaşma adlandırmadığınız heç nə üçün platformanın susmaya görə davranışını dəyişmir.

Əvvəlcə cihaz jurnalından sübut edin

Konfiqurasiyanı redaktə etməzdən əvvəl dəqiq nasazlığı əldə edin. Qoşulmuş cihazda adb logcat platformanın cleartext rəddini göstərir və onu qaldıran komponenti adlandırır. Rədd edilmiş soket, həll olunmayan ad və ya uğursuz TLS əl sıxma tamam başqa yerə işarə edir və cleartext-i aktivləşdirmək tətbiqi heç bir şey əvəzində zəiflətməkdən başqa iş görməz.

Sonra istehsalı dürüst saxlayın. TLS təklif edə bilməyən laboratoriya endpoint-i üçün cleartext məqbuldur və yalnız planlaşdıra bildiyiniz ən qısa müddət üçün. Əgər API TLS-i şəxsi şəbəkə daxilində sonlandıra bilirsə, sertifikatı cihazın etibarlı sertifikat anbarına qoyun və cleartext-i deaktiv edin, çünki tunel çıxışına qədər olan yolu şifrələyir, ondan sonrasını yox.

Endpoint HTTPS ilə cavab verdikdən sonra icazəni silin, yenidən build edin və həmin sessiyada həm VPN-də, həm adi Wi-Fi-da test edin. Ad həlli bu iki yol arasında fərqlənə bilər və yalnız cütlük hansının doğru dediyini göstərir.

Əlaqəli məqalələr