Kodėl jūsų iPhone programėlė negali įjungti ar išjungti sistemos VPN
Vieša programėlė negali perjungti sistemos VPN, perskaityti jo būsenos ar priversti ryšio. On Demand taisyklės, prižiūrimų įrenginių Always On profiliai ir MDM yra parinktys.
Produkto vadovas prašo mygtuko, kuris įjungtų įmonės VPN, ir prašymas skamba banaliai. iOS tai nėra maža funkcija; ji yra už viešosios sutarties ribų, ir kiekvienas apėjimas arba nepraeina peržiūros, arba lūžta kitame leidime. Praveskite prašymą per tai, ką platforma iš tikrųjų leidžia, ir dizainas daugiausia parašo save pats. Programėlė gali turėti VPN konfigūraciją ir ją paleisti. Programėlė negali pasiekti sistemos jungiklio, negali perskaityti profilio, kurio pati nesukūrė, būsenos ir negali išlaikyti naudotojo prijungto prieš jo valią.
Pradėkite nuo trijų dalykų, kuriuos turi omenyje naudotojas
Atskirkite reikšmes prieš atskirdami API. Kartais naudotojas nori, kad jūsų programėlės tunelis būtų prijungtas, kartais nori įjungti Nustatymų jungiklį profiliui, kurį įdiegė kas nors kitas, o kartais nori, kad telefonas negalėtų naršyti be tunelio. Tai atitinka tris skirtingus mechanizmus, ir tik pirmasis atviras paprastai programėlei.
Antroji reikšmė yra ta, kuri kuria Stack Overflow klausimus, ir ji neturi palaikomo atsakymo. Nustatymų jungiklis priklauso naudotojui, o valdomuose įrenginiuose – profiliui. Jokia vieša API neišvardija VPN konfigūracijų, nepraneša, ar sistemos tunelis pakeltas, ir jo neperjungia.
Ką programėlė iš tikrųjų gali sukurti
NetworkExtension suteikia programėlei savo konfigūraciją per NEVPNManager. Su Personal VPN teise ir naudotojo sutikimu programėlė išsaugo konfigūraciją, kuri Nustatymuose rodoma jos pačios vardu, ir gali paleisti ar sustabdyti tą vieną ryšį. Tai reali, peržiūrima galimybė, ir tai taip pat visas mastas: valdytojas skaito ir rašo tik tai, ką pats sukūrė.
Teisė nėra automatinė. Jūs prašote jos iš Apple ir pagrindžiate, kodėl programėlei apskritai reikia tunelio, o klientas, kurio vienintelis tikslas yra įjungti kito žmogaus profilį, neturi gero atsakymo. Paketinių tunelių teikėjai laikosi tos pačios taisyklės su kita klase: NETunnelProviderManager valdo teikėju pagrįstas konfigūracijas, kurias įdiegė pati programėlė. Nė vienas kelias nepasiekia MDM pateikto profilio.
Sutikimas galioja ir išsaugant. Konfigūracijos rašymas klausia naudotojo, ir tas klausimas nėra tai, ką programėlė gali nuslopinti dėl patogumo.
Būsenos skaitymas atsiremia į tą pačią sieną
Būsena atrodo draugiškesnė už valdymą ir yra tokia pat uždara. NEVPNStatus praneša negaliojantis, atjungta, jungiamasi, prijungta, iš naujo tvirtinama arba atjungiama savo pačios programėlės konfigūracijai, ir prie kiekvieno pakeitimo suveikia pranešimas. Ji nieko nesako apie valdymo profilio įdiegtą tunelį, o būtent tos būsenos pagalbos tarnyba ir nori matyti.
Tinklo kelio stebėjimas ir sąsajos pokyčiai dizaino peržiūrose siūlomi kaip pakaitalai. Jie aprašo kelią, kuriuo eina programėlės srautas, o jis keičiasi dėl priežasčių, nesusijusių su VPN būsena, ir naudojant juos kaip VPN rodmenį gaunama sąsaja, kuri meluoja abiem kryptimis.
On Demand ir Always On yra tikrosios svirtys
Palaikomos svirtys gyvena profilyje, o ne programėlėje. On Demand taisyklės pasako sistemai, kada jungtis: tvarkingas sąlygų su veiksmais sąrašas, kurį vertina operacinė sistema, o ne jūsų kodas. Taisyklė, kuri jungiasi bet kurioje sąsajoje, sukuria nuolatinio ryšio jausmą nesuteikdama programėlei jokios kontrolės.
Always On VPN yra vykdymo mechanizmas, ir jis susietas su priežiūra. Prižiūrimame įrenginyje MDM įdiegia profilį, kuris palaiko tunelį, o asmeniniame telefone be priežiūros tie patys raktai nesuteikia tokio pat elgesio. Ši asimetrija yra tyčinė, ir jokia naudingosios apkrovos raktų kombinacija jos nepanaikina. Kai reikalavimas iš tikrųjų yra tas, kad VPN turi būti įjungtas, reikalavimas iš tikrųjų yra tas, kad įrenginys turi būti valdomas.
Tarp jų įsitaisęs silpnesnis pusbrolis: taisyklė, kuri vėl prisijungia po to, kai naudotojas atsijungia. Ji prisijungia, kai taisyklė bus įvertinta kitą kartą, o tai nėra tas pats kaip iš karto, ir naudotojas, atsijungęs tyčia, pastebės skirtumą. Projektuokite sąsają apie šią spragą, o ne žadėkite spyną.
Pristatykite palaikomą kelią
Keturi klausimai nusprendžia mechanizmą, kol dar nėra jokio kodo: kam priklauso įrenginys, ar jis prižiūrimas, kuris klientas užbaigia tunelį ir iš kur atsiranda profilis. Jei bent vienas iš jų nežinomas, funkcijos prašymas neparengtas vertinimui.
Privati API, kuri kišasi į sistemos VPN, praeis demonstravimą ir nepraeis peržiūros, o jei bus pristatyta kitu būdu, ji lūš kitame iOS leidime. Nėra šio mainų varianto, kuris apsimokėtų dėl vieno jungiklio.
Valdymo telemetrija yra atskiras kanalas: ji praneša, kad profilis įdiegtas ir ar įrenginys atitinka, o tai yra ataskaitų teikimas, o ne kiekvienos programėlės valdymo paviršius. Testuokite srautą realiame įrenginyje po kiekvieno atnaujinimo, nes palaikomas elgesys gyvena OS, o OS juda.