Android اپلیکیشن له VPN بهر نومونه حلوي: د تړلو چک لیست
د VPN د فعالېدو پر مهال هم Android کولی شي نومونه د ډیفالټ شبکې له لارې حل کړي. پروسه له VPN شبکې سره وتړئ او وګورئ چې اپلیکیشن په رښتیا کوم resolver کارولی.
یو Android اپلیکیشن نشي کولی یو داخلي نوم حل کړي، په داسې حال کې چې د VPN کلاینټ خپل براوزر ورته رسیږي، او هماغه بیلډ په بل تلیفون کې کار کوي. URL د بدلون وړ نه دی. بدلون دا دی چې د اپلیکیشن پروسې ته د حل لپاره کومه شبکه د کارولو اجازه ده، او Android تضمین نه کوي چې فعال VPN هماغه شبکه ده چې ستاسو ساکټونه یې کاروي. دا څیړنې په ترتیب سره وکړئ او کله چې د resolver انځور ستاسو له انګیرنې سره سمون نه وخوري، ودروئ.
ګام 1: ثابته کړئ چې اپلیکیشن په کومه شبکه کې دی
د حالت بار پرځای د اپلیکیشن خپل لید ولولئ. له ConnectivityManager څخه فعاله شبکه، د هغې LinkProperties، د DNS سرورونو لیست او د شخصي DNS ترتیب ترلاسه کړئ. که لیست کې د VPN resolver وي، اپلیکیشن ورته لاره لري؛ که پکې د Wi-Fi resolver وي، تونل د هغې پروسې لپاره ډیفالټ شبکه نه ده.
د VPN آیکون یوازې وایي چې تونل شته. دا نه وایي چې د اپلیکیشن پروسه ورسره تړل شوې وه، او Android تل د نومونو حل له هغې شبکې نه نه تېروي چې فعاله ښکاري. هغه سیمه ییزې VPN اپلیکیشنونه چې بل وسیله ته لیږدوي، بې انټرنیټ Wi-Fi شبکې او د جوړونکي بیلډونه کولی شي اپلیکیشن د تونل سرورونو پرځای ډیفالټ resolver ته پوښتنه کولو ته پرېږدي.
ګام 2: د VPN ټرانسپورټ غوښتنه وکړئ او پروسه وتړئ
کله چې اپلیکیشن باید د تونل resolver وکاروي، د VPN ټرانسپورټ سره شبکه وغواړئ او په کال بیک کې پروسه وتړئ، ترڅو کوډ اټکل ونه کړي چې شبکه کله ښکاري:
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_VPN)
.build()
connectivityManager.requestNetwork(request, object : NetworkCallback() {
override fun onAvailable(network: Network) {
val bound = connectivityManager.bindProcessToNetwork(network)
Log.i(TAG, "bound to VPN network: " + bound)
}
})
دا غوښتنه د ټولې پروسې ډیفالټ شبکه بدلوي، نو هر ساکټ چې وروسته جوړ شي هغه کاروي. هغه ساکټونه چې له مخکې شته، هغه شبکه ساتي چې په هغې جوړ شوي وو، نو ځکه هغه د اړیکو زېرمه چې له تړلو مخکې پرانیستل شوې وه کولی شي د پخوانۍ لارې له مخې حل ته دوام ورکړي. د بېرته راګرځېدونکې ارزښت boolean دی، او false پایله معنا دا ده چې تړل نه دي شوي؛ په لنډ ځنډ سره بیا هڅه وکړئ او دواړه هڅې ولیکئ.
ګام 3: تړل یوازې هغه څه ته محدود کړئ چې ورته اړتیا لري
د ټولې پروسې تړل ناوړه دي. ټیلی میټري، د تازه کولو څیړنې او د دریمې ډلې SDKونه هم تونل ته ځي، او که تونل انټرنیټ ونه لري نو ناکامېږي. د یوې غوښتنې لپاره د شبکې ساکټ فابریکه وکاروئ او پاتې نور د وسیلې په ډیفالټ پرېږدئ. په قصد سره یو ماډل غوره کړئ: هر اړیکې ته نرۍ تړل، یا د پروسې تړل چې کله VPN ورک شي په څرګند ډول خلاص شي.
د resolver دوه ځانګړتیاوې کولی شي پرته له کومې تېروتنې تړل مات کړي. په کلک حالت کې شخصي DNS پوښتنې د شبکې resolver پرځای نوم لرونکي DoT سرور ته لیږي، او هغه اپلیکیشن چې خپل DNS-over-HTTPS کلاینټ لري د سیستم resolver په بشپړه توګه پریږدي. د دې پایلې دمخه چې تړل ناکام شوي، دواړه وګورئ. هغه پوښتنه چې هیڅکله د VPN DNS سرور ته نه رسیږي، د تونل په خوا کې په هیڅ لاګ کې نه ښکاري.
ګام 4: پر CONNECTED محدودیت باور مه کوئ
په WorkManager کې NetworkType.CONNECTED معنا دا ده چې شبکه تړل شوې ده، او VPN ټرانسپورټ هغه پوره کوي حتی کله چې لاندې Wi-Fi یا ګرځنده اړیکه ورکه وي. دنده پرمخ ځي، هرې غوښتنې ناکامېږي، او د بیا هڅې تګلاره هغه د مهالویش د باګ په څېر توپان ته اړوي. تونل یوه شبکه ده؛ دا محدودیت هیڅکله د انټرنیټ څیړنه نه وه.
هغه وړتیا وګورئ چې کار واقعاً ورته اړتیا لري، لکه تایید شوې انټرنیټ لاسرسی، او د بېرته تګ سره محدوده بیا هڅې تګلاره وساتئ. که دندې شخصي نوم ته اړتیا وي، د کار کولو دمخه هغه نوم په ټاکل شوې شبکه کې حل کړئ، او هغې غوښتنې ته چې بریالۍ کېدای نشي، د بیا هڅې پرځای په څرګنده تېروتنه سره ژر ناکام شئ.
ګام 5: شواهد ولیکئ او حد بیا وګورئ
د ټاکل شوې شبکې د ټرانسپورټ ډولونه، له LinkProperties څخه DNS سرورونه، چې تړل true راګرځولي که نه، او د لومړۍ غوښتنې دقیقه ناکامي ولیکئ. بیا د هماغه تړل لاندې یو شخصي نوم او یو عام نوم وچلوئ. دا جوړه ښیي چې اپلیکیشن د تونل resolver کارولی که په خاموشۍ د وسیلې ډیفالټ ته راګرځېدلی، او همدا هغه توپیر دی چې کارونکی یې تجربه کوي.
دې ته په هغه تر ټولو زوړ Android نسخه کې چې ملاتړ یې کوئ او په یوه اوسني خپرونه کې تکرار کړئ. هغه د resolver چلند چې ډیفالټ لار سمه ښکاره کوي، هماغه ځای دی چې وسیلې او نسخې سره توپیر لري، او هغه بیلډ چې یوازې په نوي ازموینې وسیله بریالی کیږي، ستاسو د لیږل شوي حد لپاره تایید شوی نه دی. adb shell dumpsys connectivity یوه چټکه لاره ده چې تایید کړئ وسیله کومې شبکې او وړتیاوې راپور کوي کله چې تاسو ناکامي بیا تولیدوئ.