Conas a sheiceáil i gcód an bhfuil VPN ceangailte ar Android
Níl aon getter ag Android do VPN cheangailte. Fiafraigh de chumais líonra, féach ar athruithe iompair, agus coinnigh toiliú an aip, staid an ghléis agus cruthúnas an fhreastalaí ar leithligh.
Ní féidir leat fiafraí de Android an bhfuil VPN ceangailte. Ní nochtann VpnService aon getter ceangail, agus is é an córas a tharraingíonn deilbhín an eochair sa bharra stádais, ní rud ar bith is féidir le d'aip a léamh. Is féidir leat ceist níos cúinge a chur ar an gcruach-charn nascachta: cén líonra a úsáideann trácht an aip seo, agus an iompraíonn an líonra sin an t-iompar VPN. Téann an lámhleabhar seo trí na seiceálacha san ord a sheachnaíonn bréag-thorthaí dearfacha, ó ordú shell ar an ngléas go dtí an callback a fhágann tú ag rith san aip.
Seiceáil an gléas ó shell sula dteagmhálann tú le cód an aip
Faigh bunlíne ar dtús. Priontálann adb shell dumpsys connectivity gach líonra atá ar eolas ag an gcóras, agus liostaíonn gach bloc a iompair, mar sin tagann líonra VPN chun solais le VPN sa liosta sin. Léigh bloc an líonra réamhshocraithe roimh aon rud eile, ansin féach ar líonraí eile a iompraíonn an t-iompar céanna.
Freagraíonn dhá aschur ceisteanna éagsúla. Ní hionann líonra VPN a bheith ann agus d'aip a bheith á úsáid, agus ar ghléas le próifíl oibre nó dara húsáideoir féadfaidh an dá rud a bheith fíor ag an am céanna agus do phróiseas ag labhairt go díreach leis an idirlíon. Is é líne an líonra ghníomhaigh an ceann a shocraíonn cad a dhéanann do shocóidí.
Iarr an líonra atá á úsáid ag an aip
I gcód is é an tástáil chumais ceithre líne. Iarr ACCESS_NETWORK_STATE sa mhanifeist, ansin cuir cumais an líonra ghníomhaigh i gcomparáid leis an iompar VPN:
ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network active = cm.getActiveNetwork();
NetworkCapabilities caps = cm.getNetworkCapabilities(active);
boolean vpnInUse = caps != null
&& caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
Tá an freagra cúng d'aon ghnó: an é líonra réamhshocraithe an aip VPN anois díreach. Ní deir sé aon rud faoi cé acu VPN é, an leatsa é nó an sroicheann an tollán a chríoch i bhfad i gcéin. Caith le true mar “fágann trácht trí thollán éigin” agus coinnigh do chuntasaíocht féin ar leithligh. Is booleán a chiallaíonn trí rud go ciúin ag an am céanna an chúis a gcríochnaíonn scáileán socruithe ag tuairisciú an VPN mar mhúchta agus an t-úsáideoir ag brabhsáil tríd.
Nuair is gá duit a fháil amach an bhfuil aon líonra VPN ann ina ionad sin, déan atarlú ar cm.getAllNetworks() agus tástáil gach tacar cumais. Eascraíonn an dá fhreagra ar ghléas a ritheann VPN in aghaidh an aip a chlúdaíonn feidhmchláir eile ach nach gclúdaíonn do cheannsa, agus is é an t-easnamh sin foinse an chuid is mó de na tuairiscí fabht a deir nach bhfeiceann an aip VPN atá go soiléir ar siúl.
Féach ar athruithe in ionad pobalbhreith a dhéanamh
Is é pobalbhreith ar amadóir an chruth mícheart don cheist seo, mar tagann athruithe stáit isteach mar imeachtaí. Cláraigh iarratas a mheaitseálann an t-iompar VPN agus lig don chreat a insint duit cathain a thagann líonra meaitseáilte chun cinn, a imíonn nó a athraíonn:
NetworkRequest request = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_VPN)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
.build();
cm.registerNetworkCallback(request, callback);
Ní iompraíonn líonra VPN riamh NET_CAPABILITY_NOT_VPN, mar sin déanann an bhaint shoiléir an rún a dhoiciméadú. Gan é meaitseálann an t-iarratas fós, ach caithfidh an chéad duine eile a léifidh an cód é sin a dhéanamh amach.
Baineann an clárú leis an raon a dteastaíonn an bhreathnóireacht uaidh, de ghnáth scáileán nó seirbhís thosaigh. Díchláraigh i onStop nó i onDestroy, agus ná fág callback ceangailte le gníomhaíocht atá imithe cheana. Is droch-óstach é aip gan chomhpháirt infheicthe do bhreathnóir buan, agus is iad na callbackanna a dhéanann tú dearmad orthu na cinn a thuairteann tar éis athraithe cumraíochta.
Coinnigh trí cheist ar leithligh
Tagann an chuid is mó den mhearbhall sa réimse seo ó thrí sheiceáil éagsúla a chaitheamh mar cheann amháin. Úsáideann siad APIanna éagsúla, agus féadfaidh gach ceann a bheith fíor agus na cinn eile bréagach.
| Question | How you answer it | What a yes means |
|---|---|---|
| Did the user grant VPN consent to my app? | VpnService.prepare() returns null | Consent exists; the tunnel may still be down |
| Is the device sending default traffic through a VPN? | TRANSPORT_VPN on the active network | Something is tunneling, not necessarily your app |
| Did this request arrive through the VPN? | Source address seen by the server | Proof for that connection, nothing wider |
Is é an tríú ró an ceann a dhéanann daoine iarracht a fhreagairt ar an gcliant, agus ní féidir é a fhreagairt ansin. Tabhair comhthiomsú seoltaí dá gcuid féin do chliaint VPN agus léigh an seoladh foinse ar an bhfreastalaí; sin an t-aon chruthúnas a mhaireann nuair a athraíonn úsáideoir tollán i lár seisiúin.
Ord fíoraithe a chuireann bréag-thorthaí dearfacha as an áireamh
Glaonn cód samplach níos sine atá fós i gcúrsaíocht ar getNetworkInfo(ConnectivityManager.TYPE_VPN). Tá an glao sin dulta i léig, agus i roinnt eisiúintí d'fhill sé null fiú nuair a bhí VPN ceangailte, agus sin an fáth a bhfuil an oiread sin sleachta cóipeáilte ag breathnú briste ar ghléas a oibríonn. Seachnaíonn tástálacha cumais an gaiste agus iompraíonn siad mar an gcéanna ó Android 5.0 ar aghaidh. Má chothaíonn tú bunachar cód a ghlaonn air fós, cuir an glao in ionad é a chumhdach i bhfallback, mar is é an fallback a tháirg an freagra mícheart ar dtús.
Tá aon aicearra tuillte ag rabhadh. Cruthaíonn comparáid idir an seoladh poiblí a thuairiscíonn seirbhís sheachtrach agus seoladh imeachta an VPN rud éigin faoin gcosán, ach cuireann sé iarratas tríú páirtí le gach seiceáil, braitheann sé ar an tseirbhís sin fanacht suas, agus is féidir é a thaisceadh nó a bhlocáil. Coinnigh é mar dhiagnóis láimhe, riamh mar sheiceáil stáit laistigh den aip.
Rith na seiceálacha san ord seo agus stop ag an gcéad cheann nach n-aontaíonn le tuairisc an úsáideora: liosta iompair sa shell, cumais an líonra ghníomhaigh, imeachtaí callback agus tú ag casadh an tolláin, ansin an seoladh foinse ar thaobh an fhreastalaí. Má thagann an ceathrar le chéile agus an aip fós ag iompar go dona, tá an fabht i do mheaisín stáit féin seachas i ndearcadh Android ar an líonra.