તમે નવું બિલ્ડ રિલીઝ કર્યું, VPN પર ગયા, અને એ જ સ્ક્રીન લોડ થવાનું બંધ થઈ ગયું. Android 9 અને તે પછીના વર્ઝન પર વધુ સામાન્ય સમજૂતી વધુ નીરસ છે: પ્લેટફોર્મ API 28 કે તેથી ઊંચું લક્ષ્ય રાખતી એપ્સ માટે સાદી HTTP નકારે છે, અને VPN એ ફક્ત એટલો સંદર્ભ બદલ્યો કે તે જાહેર થઈ જાય. તમે જે ભૂલ જુઓ છો તે HTTP ક્લાયન્ટ પર આધાર રાખે છે, તેથી જ તે આટલા ઓછા કિસ્સામાં cleartext કહે છે.

આ નિષ્ફળતા ખરેખર શું છે

Android 9 થી પ્લેટફોર્મ ડિફૉલ્ટ રૂપે cleartext બ્લૉક કરે છે, જેમ કે એપ API સ્તર 28 કે તેથી ઊંચું લક્ષ્ય બનાવે છે. પ્લેટફોર્મ ડિવાઇસમાંથી એક પણ પૅકેટ નીકળે તે પહેલાં સાદા HTTP સરનામે કરેલી વિનંતી નકારી કાઢે છે. તમે કઈ ભૂલ જુઓ છો તે HTTP લાઇબ્રેરી પર આધાર રાખે છે: ક્યારેક સામાન્ય નેટવર્ક નિષ્ફળતા, ક્યારેક સમય પૂરો થવો, ક્યારેક એવો સંદેશ જે cleartext ને સીધું નામ આપે છે. જે તે ક્યારેય કરતું નથી તે તમારા સર્વર સુધી પહોંચવું. Android ડિફૉલ્ટ અને ડોમેન-મર્યાદિત વિકલ્પને તેની સિક્યોરિટી કન્ફિગરેશન માર્ગદર્શિકામાં દસ્તાવેજ કરે છે.

એ જ ડિવાઇસ પરનો બ્રાઉઝર હજી પણ પૃષ્ઠ લોડ કરી શકે છે, અને એ જ સંકેત છે જે મોટા ભાગના લોકો ચૂકી જાય છે. બ્રાઉઝર તમારી એપની નેટવર્ક સિક્યોરિટી નીતિને આધીન નથી.

VPN ને દોષ કેમ મળે છે

સામાન્ય રીતે ત્રણ વસ્તુઓ એકસાથે બદલાય છે. VPN જોડાયા પછી એપ બીજું હોસ્ટનામ રિઝોલ્વ કરી શકે, ડિવાઇસ નવું અને નવા બિલ્ડ સાથે હોઈ શકે, અથવા બિલ્ડ પોતે એવા લક્ષ્ય API સ્તર પર ગયું હોઈ શકે જે ડિફૉલ્ટ સક્રિય કરે. VPN દેખાય છે અને લક્ષ્ય SDK નહીં, તેથી ટિકિટ VPN ને મળે છે.

નેટવર્ક કન્ફિગને અડકતા પહેલાં જૂના અને નવા બિલ્ડના લક્ષ્ય સ્તરો સરખાવો. 27 કે તેથી નીચું લક્ષ્ય રાખતી એપ મુક્ત છે, અને એ જ «મારા જૂના ફોન પર કામ કરે છે» પ્રકારના દરેક અહેવાલને સમજાવે છે.

Expo ફ્લેગ ખરેખર ક્યાં પડે છે

મેનેજ્ડ Expo પ્રોજેક્ટમાં app.json માં સેટિંગ ઉમેરવાથી Android મેનિફેસ્ટ સંપાદિત થતું નથી, કારણ કે મેનિફેસ્ટ prebuild અને ડેવલપમેન્ટ બિલ્ડ બનાવે છે. તે તબક્કે સેટિંગ લખે છે કન્ફિગ પ્લગઇન. સમર્થિત માર્ગ expo-build-properties છે, જે એપ કન્ફિગમાં android હેઠળ cleartext વિકલ્પ સાથે ગોઠવાય છે.

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

સ્નિપેટ ફક્ત પ્લગઇન વિકલ્પ સેટ કરે છે; મેનિફેસ્ટ પછી બને છે. prebuild કે તાજું ડેવલપમેન્ટ-ક્લાયન્ટ બિલ્ડ ચલાવો, પછી ફરી પરીક્ષણ કરતા પહેલાં બનેલા AndroidManifest.xml માં android:usesCleartextTraffic તપાસો, કારણ કે ફક્ત JS રીલોડ જૂનું મેનિફેસ્ટ રાખે છે. પ્લગઇન આવૃત્તિ પ્રોજેક્ટ જે Expo SDK પર ચાલે છે તેની સાથે મેળવો. પ્લગઇન વિકલ્પો આવૃત્તિઓ વચ્ચે ખસે છે, અને બીજા SDK માંથી કૉપિ કરેલો સ્નિપેટ શાંત નિષ્ક્રિયતાનો ભરોસાપાત્ર સ્રોત છે.

Bare વર્કફ્લો અને વધુ સાંકડો વિકલ્પ

bare React Native માટે સમાન છે application એલિમેન્ટ પર android:usesCleartextTraffic, અથવા એવું નેટવર્ક સિક્યોરિટી કન્ફિગ જે ફક્ત નામ આપેલા ડોમેન માટે cleartext મંજૂર કરે. ડોમેન-મર્યાદિત સ્વરૂપ પસંદ કરવા યોગ્ય છે, કારણ કે તે આંતરિક API મંજૂર કરે છે અને બાકીનું બધું HTTPS પર રાખે છે. તે પોતાની અપવાદ યાદી પણ દસ્તાવેજ કરે છે, અને સમીક્ષક એ જ ભાગ વિશે પૂછશે.

બંનેમાંથી કોઈ અભિગમ તમે નામ ન આપ્યું હોય તેવી કોઈપણ વસ્તુ માટે પ્લેટફોર્મનો ડિફૉલ્ટ બદલતો નથી.

પહેલાં ડિવાઇસ લોગમાંથી સાબિત કરો

કન્ફિગ સંપાદિત કરતા પહેલાં ચોક્કસ નિષ્ફળતા મેળવો. જોડાયેલા ડિવાઇસ પર adb logcat પ્લેટફોર્મનું cleartext અસ્વીકાર દર્શાવે છે અને જે ઘટકે તે ઊભું કર્યું તેનું નામ આપે છે. નકારાયેલું સૉકેટ, રિઝોલ્વ ન થતું નામ કે નિષ્ફળ TLS હેન્ડશેક સાવ બીજી જગ્યા તરફ ઈશારો કરે છે, અને cleartext સક્રિય કરવાથી એપ વ્યર્થ રીતે નબળી જ બનશે.

પછી પ્રોડક્શનને પ્રામાણિક રાખો. TLS આપી ન શકતા લેબ એન્ડપૉઇન્ટ માટે cleartext સ્વીકાર્ય છે, અને ફક્ત તમે આયોજન કરી શકો તેટલા ટૂંકા સમય માટે. જો API ખાનગી નેટવર્કની અંદર TLS સમાપ્ત કરી શકે, તો સર્ટિફિકેટ ડિવાઇસના ટ્રસ્ટ સ્ટોરમાં મૂકો અને cleartext નિષ્ક્રિય રાખો, કારણ કે ટનલ તેના આઉટલેટ સુધીનો માર્ગ એન્ક્રિપ્ટ કરે છે અને તેની આગળ કંઈ નહીં.

એન્ડપૉઇન્ટ HTTPS પર જવાબ આપે કે તરત જ પરવાનગી દૂર કરો, ફરી બિલ્ડ કરો અને એ જ સેશનમાં VPN પર અને સામાન્ય Wi-Fi પર પરીક્ષણ કરો. નામ રિઝોલ્યુશન આ બે માર્ગો વચ્ચે અલગ હોઈ શકે છે, અને ફક્ત જોડી જ તમને કહે છે કે કયો સાચું કહે છે.

સંબંધિત લેખો