Dir tippt an den Astellungen op d'VPN-Zeil, gesitt e Profil, deen een aneren installéiert huet, a fänkt un, dee Opruff ze sichen, deen een derbäisetzt. Sou en Opruff gëtt et net. Eng App kann hireen eegene Tunnel iwwer VpnService opmaachen, awer d'Anträg an där Lëscht gehéieren der Plattform an deem Client, deen se ugeluecht huet. Genau ze wëssen, wou d'Grenz läit, spuert Iech eng Woch Juegd op verstoppte Klassen.

Fänkt domat un, wat den Astellungsecran weist

D'VPN-Lëscht ass e Register vun de Profiler, déi de System oder e Client vun engem Hiersteller installéiert huet: PPTP, L2TP/IPsec, IKEv2 an all Zeilen, déi eng OEM-App oder en MDM eragedréckt huet. All Zeil dréit eng Serveradress, Umeldungsdaten an eng Protokollimplementéierung, déi baussent Ärem Prozess lieft. Wann de Benotzer do op Verbannen tippt, ass et de Client vun der Plattform, deen den Tunnel opbaut, net Äre Code. Dofir iwwerlieft d'Zeil en Neistart, an dofir hëlt d'Deinstallatioun vun Ärer App se ni ewech.

Vun der Benotzersäit gesinn gesäit d'Lëscht aus wéi eng API-Uewerfläch, eng Plaz, wou d'Bäisetze vun engem VPN just een Intent wäit ewech sollt sinn. Ass et net. Déi eenzeg ëffentlech Agäng, déi se beréieren, sinn Navigatiounsintenten, an alles, wat drop schreift, gehéiert der Plattform oder enger privilegéierter Komponent.

Praktesch Konsequenz: wann en Ënnerstëtzungstext de Benotzer seet, de Profil an den Astellungen bäizesetzen, ass Är App guer net Deel vun deem Oflaf.

Wat VpnService Iech tatsächlech gëtt

VpnService a VpnService.Builder beschreiwen een Tunnel, deen Ärer App gehéiert. Dir setzt Adressen, Strecken, DNS-Server an eng MTU derbäi, grenzt den Trafick mat addAllowedApplication() oder addDisallowedApplication() an, an duerno gëtt establish() e ParcelFileDescriptor fir eng TUN-Schnittstell zréck. Vun deem Punkt un liest d'App IP-Paketen a schreift Äntwerten, dat heescht, de Protokoll ass Ären, fir en ëmzesetzen oder anzebauen: OpenVPN, WireGuard, en eegene Transport.

Näischt an där Rei schwätzt PPTP, L2TP/IPsec oder IKEv2. Builder huet keng Schalt, déi seet benotz de System-L2TP-Client, an et gëtt kee Callback, deen Iech en Profil steiere léisst, deen d'Plattform schonn huet. Dat ass déi richteg Grenz, an et ass eng Designgrenz, keen Zoustand vun de Berechtegungen.

Also kann eng App ganz bestëmmt e VPN-Client op Android sinn. Si kann just keen Administrateur fir d'Cliente sinn, déi mam Telefon kommen.

Den Zoustëmmungsdialog ass keng Dekoratioun

Well Ären Tunnel den Trafick vun aneren Appen afänke kann, fuerdert de System, datt de Benotzer en ausdrécklech gutt heescht. prepare() gëtt en Intent zréck, deen Dir musst starten, d'Zoustëmmung ass u Ärem Pak gebonnen, a soulaang den Tunnel leeft, weist d'Statusleescht en dauerhaften Indikator. En zweete VPN, deen dobäikënnt, deaktivéiert den éischten, well Android een aktiven VPN gläichzäiteg leeft.

Dee Reegel vum eenzegen Aktiven bréngt Leit beim Testen aus dem Konzept. Dir baut Ären Tunnel op, wärend e Firmenclient verbonnen ass, a schléisst, datt Äre Code futti ass, wou d'Plattform just vum aneren Client ewéchgewiesselt huet. Zoustëmmungen kënnen duerno zeréckgezunn ginn, a prepare() kann null zréckginn op Apparater, wou d'Zoustëmmungsaktivitéit feelt, also muss establish() ëmmer nach de Feeler behandelen.

Verstoppt APIen a Astellungsintenten

Méi al Äntwerten weisen op com.android.internal-Klassen an AIDL-Interface'en, déi de agebaute Client benotzt. Si sinn net am SDK, si änneren tëscht Verëffentlechungen ouni Ukënnegung, an App-Store betruechten dee Zougrëff als Risiko. D'Apparat rooten mécht se och net stabil, well Root an Zougrëff op verstoppt APIen onofhängeg Problemer sinn.

D'ënnerstëtzte Navigatiounshëllef ass Settings.ACTION_VPN_SETTINGS, dee säi Wäert android.net.vpn.SETTINGS ass. Léist en op, ier Dir en start, well e puer OEM-Builde déi Aktivitéit net liwweren, a gitt op geschriwwe Schrëtt zeréck, wann d'Léisung feelt. Et bréngt de Benotzer op den Ecran a konfiguréiert näischt.

D'Weer vum Apparatbesëtzer an MDM sinn déi Ausnam, déi d'Leit normalerweis mengen. DevicePolicyManager kann e Pak fir en ëmmer-aktive VPN bestëmmen, a verwalt Konfiguratiounen kënnen Astellunge fir e Client virlueden, deen se ënnerstëtzt, awer dat ass ëmmer nach net dee ëffentlechen SDK, deen e PPTP-Profil schreift.

Gitt d'Entscheedung vun der Benotzersäit of

Wann Ären Produkt Trafick muss droen, plangt VpnService plus e richtege Protokollstack an, a budgetéiert Zäit fir den Zoustëmmungsoflaf a fir d'Reegel vum eenzegen VPN. Wann d'Zil ass, sech mat engem bestoende Firmenprofil ze verbannen, ass Är Aarbecht d'Féierung: Deep-Link op den Astellungsecran, d'Felder dokumentéieren, an loosst de Client vun der Plattform tunnelen. Wann d'App just en private Endpunkt muss erreechen, brauch si guer keen eegene Tunnel.

Schreift déi Entscheedung op, ier Dir Code schreift, well déi dräi Weeër no dem éischte Sprint bal näischt gemeinsam hunn.

Eng lescht Kontroll, ier Dir ufänkt: seet d'Ufuerderung, datt eis App sech verbënnt, oder datt den Apparat sech verbënnt? Dat éischt ass VpnService, dat zweet ass e Profil, deen Dir net kënnt uleeën. Dee Saz richteg ze formuléieren ass méi bëlleg wéi jiddwer Refactoring.

Ähnlech Artikelen