Android 9 හි Expo යෙදුම HTTP සමඟ අසාර්ථක වේ: හේතුව cleartext, VPN නොවේ
සාමාන්ය HTTP API එකක් අමතන Expo build එකක් Android 9 සහ ඉන් පසු අසාර්ථක වේ. ටනලය නිර්දෝෂීය: cleartext ධජය build වින්යාසයේ තිබිය යුතුය.
ඔබ නව build එකක් නිකුත් කර, VPN වෙත ගොස්, එම තිරයම පූරණය නොවී නැවතුණි. Android 9 සහ ඉන් පසු වඩාත් සුලභ පැහැදිලි කිරීම වඩාත් අරුචිකරය: API 28 හෝ ඊට වැඩි ඉලක්ක කරන යෙදුම් සඳහා වේදිකාව සාමාන්ය HTTP ප්රතික්ෂේප කරයි, VPN එය හෙළිදරව් කිරීමට තරම් පසුබිමක් පමණක් වෙනස් කළේය. ඔබ දකින දෝෂය HTTP සේවාලාභියා මත රඳා පවතී, එබැවින් එය cleartext ලෙස කියන්නේ කලාතුරකිනි.
මෙම අසාර්ථකත්වය ඇත්ත වශයෙන්ම කුමක්ද
Android 9 සිට යෙදුමක් API මට්ටම 28 හෝ ඊට වැඩි ඉලක්ක කළ පසු වේදිකාව පෙරනිමියෙන් cleartext අවහිර කරයි. සාමාන්ය HTTP ලිපිනයකට යන ඉල්ලීම එකම පැකට්ටුවක් උපාංගයෙන් පිටවීමට පෙර වේදිකාව විසින් ප්රතික්ෂේප කරයි. ඔබ දකින දෝෂය HTTP පුස්තකාලය මත රඳා පවතී: සමහර විට සාමාන්ය ජාල දෝෂයක්, සමහර විට කාලය ඉකුත්වීමක්, සමහර විට cleartext නිරුපද්රිතව නම් කරන පණිවිඩයක්. එය කිසිදා නොකරන දෙය ඔබේ සේවාදායකයට ළඟා වීමයි. Android පෙරනිමිය සහ වසමින් සීමා වූ විකල්පය එහි ආරක්ෂක වින්යාස මාර්ගෝපදේශයේ ලේඛනගත කරයි.
එකම උපාංගයේ බ්රවුසරයකට තවමත් පිටුව පූරණය කළ හැකි අතර, බොහෝ දෙනාට මගහැරෙන සලකුණ එයයි. බ්රවුසර ඔබේ යෙදුමේ ජාල ආරක්ෂක ප්රතිපත්තියට යටත් නොවේ.
VPN හට දෝෂාරෝපණය වන්නේ ඇයි
සාමාන්යයෙන් කරුණු තුනක් එකවර වෙනස් වේ. VPN සම්බන්ධ වූ පසු යෙදුම වෙනත් සත්කාරක නාමයක් විසඳිය හැක, උපාංගය නව එකක් විය හැක, නැතහොත් build එකම පෙරනිමිය සක්රීය කරන ඉලක්ක API මට්ටමකට ගොස් තිබිය හැක. VPN පෙනෙන අතර ඉලක්ක SDK නොපෙනේ, එබැවින් ටිකට්පත VPN හට ලැබේ.
ජාල වින්යාසයට අත තැබීමට පෙර පැරණි සහ නව build වල ඉලක්ක මට්ටම් සසඳන්න. 27 හෝ ඊට අඩු ඉලක්ක කරන යෙදුම නිදහස් වන අතර, «මගේ පැරණි දුරකථනයේ එය වැඩ කරයි» වැනි සෑම වාර්තාවක්ම එයින් පැහැදිලි වේ.
Expo ධජය ඇත්ත වශයෙන්ම වැටෙන්නේ කොහේද
කළමනාකරණය කරන Expo ව්යාපෘතියක app.json වෙත සැකසුමක් එකතු කිරීම Android මැනිෆෙස්ට් එක සංස්කරණය නොකරයි, මන්ද මැනිෆෙස්ට් එක නිපදවන්නේ prebuild සහ සංවර්ධන build ය. එම අවස්ථාවේ සැකසුම ලියන්නේ වින්යාස ප්ලගිනයයි. ආධාරක මාර්ගය expo-build-properties වන අතර, එය යෙදුම් වින්යාසයේ android යටතේ cleartext විකල්පය සමඟ වින්යාස කරයි.
{
"plugins": [
["expo-build-properties", {
"android": { "usesCleartextTraffic": true }
}]
]
}ස්නිපට් එක සැකසන්නේ ප්ලගින් විකල්පය පමණි; මැනිෆෙස්ට් එක පසුව නිපදවේ. prebuild එකක් හෝ නව සංවර්ධන-සේවාලාභී build එකක් ධාවනය කර, පසුව නැවත පරීක්ෂා කිරීමට පෙර නිපදවන ලද 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 මත පිළිතුරු දීමට පටන් ගත් පසු අවසරය ඉවත් කර, නැවත build කර, එම සැසියේම VPN මත සහ සාමාන්ය Wi-Fi මත පරීක්ෂා කරන්න. නාම විභේදනය මෙම මාර්ග දෙක අතර වෙනස් විය හැකි අතර, කවරක් සත්ය කියන්නේද යන්න පවසන්නේ එම යුගලය පමණි.