Inti tagħfas il-ringiela VPN fis-Settings, tara profil li installa xi ħadd ieħor, u tibda tfittex is-sejħa li żżid waħda. Sejħa bħal din ma teżistix. App tista' tiftaħ mina tagħha permezz ta' VpnService, imma l-entrati f'dik il-lista jappartjenu lill-pjattaforma u lill-klijent li ħoloqhom. Li tkun taf eżatt fejn tinsab il-linja jħeġġek ġimgħa mit-tfittxija ta' klassijiet moħbija.

Ibda minn dak li juri l-iskrin tas-Settings

Il-lista VPN hija reġistru ta' profili li installa s-sistema jew klijent tal-manifattur: PPTP, L2TP/IPsec, IKEv2, u kwalunkwe ringiela li app OEM jew MDM imbuttat ġewwa. Kull ringiela ġġorr indirizz tas-server, kredenzjali u implimentazzjoni ta' protokoll li tgħix barra mill-proċess tiegħek. Meta l-utent jagħfas Qabbad hemmhekk, il-klijent tal-pjattaforma jgħolli l-mina, mhux il-kodiċi tiegħek. Għalhekk ir-ringiela tgħaddi minn restart u għalhekk l-installazzjoni mill-ġdid tal-app tiegħek qatt ma tneħħiha.

Minn naħa tal-utent il-lista tidher bħal wiċċ API, post fejn iż-żieda ta' VPN għandha tkun distanza ta' intent waħda. Mhix. L-uniċi punti ta' dħul pubbliċi li jmissuha huma intents tan-navigazzjoni, u kull ma jikteb fiha jappartjeni lill-pjattaforma jew lil komponent bi privileġġi.

Konsegwenza prattika: jekk test ta' appoġġ jgħid lill-utenti biex iżidu l-profil fis-Settings, l-app tiegħek mhix parti minn dak il-fluss xejn.

X'jagħtik VpnService tassew

VpnService u VpnService.Builder jiddeskrivu mina waħda li tappartjeni lill-app tiegħek. Inti żżid indirizzi, rotot, servers DNS u MTU, tillimita t-traffiku b'addAllowedApplication() jew addDisallowedApplication(), u mbagħad establish() jirritorna ParcelFileDescriptor għal interface TUN. Minn dak il-mument l-app taqra pakketti IP u tikteb tweġibiet, li jfisser li l-protokoll huwa tiegħek biex timplimentah jew tinkorporah: OpenVPN, WireGuard, trasport personalizzat.

Xejn f'dik is-sekwenza ma jitkellem PPTP, L2TP/IPsec jew IKEv2. Builder m'għandux swiċċ li jgħid uża l-klijent L2TP tas-sistema, u m'hemmx callback li jħallik issuq profil li l-pjattaforma diġà tippossjedi. Dan huwa l-limitu veru, u huwa limitu tad-disinn, mhux lakuna fil-permessi.

Allura app tista' tkun klijent VPN fuq Android bla dubju. Hija biss ma tistax tkun maniġer għall-klijenti li jiġu mat-telefon.

Id-djalogu tal-kunsens mhux ornament

Billi l-mina tiegħek tista' taqbad it-traffiku ta' apps oħra, is-sistema tagħmel lill-utent japprovaha b'mod espliċitu. prepare() jirritorna Intent li trid tniedi, l-approvazzjoni hija marbuta mal-pakkett tiegħek, u sakemm il-mina tkun attiva l-istrixxa tal-istat turi indikatur permanenti. It-tieni VPN li titla' tiddiżattiva l-ewwel waħda, għax Android iħaddem VPN attiva waħda biss kull darba.

Dik ir-regola ta' waħda attiva tweġġa' lin-nies fit-testijiet. Tgħolli l-mina tiegħek waqt li klijent korporattiv huwa mqabbad u tikkonkludi li l-kodiċi tiegħek huwa miksour, meta l-pjattaforma sempliċement qalbet mill-klijent l-ieħor. L-approvazzjonijiet jistgħu jiġu revokati aktar tard, u prepare() jista' jirritorna null fuq apparati fejn l-attività tal-kunsens hija nieqsa, għalhekk establish() xorta jrid jimmaniġġja l-falliment.

API moħbija u intents tas-settings

Tweġibiet eqdem jindikaw klassijiet com.android.internal u interfaces AIDL li juża l-klijent integrat. Dawn mhumiex fis-SDK, jinbidlu bejn rilaxxi mingħajr avviż, u l-ħwienet tal-apps iqisu dak l-aċċess bħala riskju. L-irrottjar tal-apparat lanqas jagħmilhom stabbli, għax root u aċċess għall-API moħbija huma problemi mhux relatati.

L-għajnuna tan-navigazzjoni appoġġjata hija Settings.ACTION_VPN_SETTINGS, li l-valur tagħha huwa android.net.vpn.SETTINGS. Issolviha qabel tniediha, għax xi builds OEM ma jibagħtux dik l-attività, u mur għal passi miktuba meta s-soluzzjoni tfalli. Hija twassal lill-utent għall-iskrin u ma tikkonfigura xejn.

It-toroq tas-sid tal-apparat u tal-MDM huma l-eċċezzjoni li n-nies normalment ifissru. DevicePolicyManager jista' jaħtar pakkett VPN dejjem mixgħul, u konfigurazzjonijiet maniġġjati jistgħu jgħabbu bil-quddiem settings għal klijent li jappoġġjahom, imma dan xorta mhux l-SDK pubbliku li jikteb profil PPTP.

Mexxi d-deċiżjoni min-naħa tal-utent

Jekk il-prodott tiegħek irid iġorr traffiku, ippjana VpnService flimkien ma' stack tal-protokoll veru, u bbaddja ħin għall-fluss tal-kunsens u r-regola tal-VPN waħda. Jekk l-għan huwa li tqabbad ma' profil korporattiv eżistenti, ix-xogħol tiegħek huwa gwida: deep-link għall-iskrin tas-settings, iddokumenta l-oqsma, u ħalli l-klijent tal-pjattaforma jagħmel il-mina. Jekk l-app trid biss tilħaq endpoint privat, m'għandhiex bżonn il-mina tagħha xejn.

Ikteb dik id-deċiżjoni qabel ma tikteb kodiċi, għax it-tliet toroq ma għandhom kważi xejn komuni wara l-ewwel sprint.

Kontroll aħħari qabel ma tibda: ir-rekwiżit jgħid li l-app tagħna tqabbad, jew li l-apparat iqabbad? L-ewwel huwa VpnService, it-tieni huwa profil li ma tistax toħloq. Li tagħmel dik is-sentenza sew huwa orħos minn kwalunkwe refactoring.

Artikli relatati