Nega Android ilovangiz tizim VPN profilini qo'sha olmaydi
VpnService ilovangizga tegishli tunnel quradi; u telefonning PPTP, L2TP yoki IPsec yozuvlarini qo'sha yoki tahrirlay olmaydi. Chegarani kuzatib, to'g'ri yo'lni tanlang.
Siz Sozlamalarda VPN qatorini bosasiz, boshqa kimdir o'rnatgan profilni ko'rasiz va uni qo'shadigan chaqiruvni qidira boshlaysiz. Bunday chaqiruv yo'q. Ilova VpnService orqali o'z tunnelini ochishi mumkin, lekin o'sha ro'yxatdagi yozuvlar platformaga va ularni yaratgan mijozga tegishli. Chegara qayerda ekanini aniq bilish sizni yashirin sinflar ortidan quvishdan bir hafta qutqaradi.
Sozlamalar ekrani ko'rsatganidan boshlang
VPN ro'yxati — tizim yoki ishlab chiqaruvchi mijozi o'rnatgan profillar reyestri: PPTP, L2TP/IPsec, IKEv2 va OEM ilovasi yoki MDM itarib kiritgan qatorlar. Har bir qator server manzilini, hisob ma'lumotlarini va sizning jarayoningizdan tashqarida yashaydigan protokol amalga oshirilishini olib yuradi. Foydalanuvchi u yerda Ulanish tugmasini bosganda tunnelni platforma mijozi ko'taradi, sizning kodingiz emas. Shuning uchun qator qayta yuklashdan keyin ham qoladi va shuning uchun ilovangizni o'chirish uni hech qachon olib tashlamaydi.
Foydalanuvchi tomondan ro'yxat API yuzasiga o'xshaydi, VPN qo'shish bitta niyat masofasida bo'lishi kerak bo'lgan joy. Unday emas. Unga tegadigan yagona ommaviy kirish nuqtalari navigatsiya niyatlari, va unga yozadigan hamma narsa platformaga yoki imtiyozli komponentga tegishli.
Amaliy natija: agar yordam matni foydalanuvchilarga profilni Sozlamalarda qo'shishni aytsa, ilovangiz bu oqimning umuman qismi emas.
VpnService aslida nima beradi
VpnService va VpnService.Builder ilovangizga tegishli bitta tunnelni tavsiflaydi. Siz manzillar, marshrutlar, DNS serverlar va MTU qo'shasiz, addAllowedApplication() yoki addDisallowedApplication() bilan trafik chegarasini belgilaysiz, so'ng establish() TUN interfeysi uchun ParcelFileDescriptor qaytaradi. Shu paytdan boshlab ilova IP paketlarni o'qiydi va javoblarni yozadi, ya'ni protokolni amalga oshirish yoki ichiga joylashtirish sizning ishingiz: OpenVPN, WireGuard, maxsus transport.
Bu ketma-ketlikda hech narsa PPTP, L2TP/IPsec yoki IKEv2 haqida gapirmaydi. Builder'da tizimning L2TP mijozini ishlat deydigan tugma yo'q va platforma allaqachon egalik qiladigan profilni boshqarishga imkon beradigan qayta chaqiruv ham yo'q. Bu haqiqiy chegara va bu ruxsatlardagi bo'shliq emas, dizayn chegarasi.
Shuning uchun ilova Android'da bemalol VPN mijozi bo'lishi mumkin. Faqat telefon bilan keladigan mijozlarning menejeri bo'la olmaydi.
Rozilik muloqoti bezak emas
Tunnelingiz boshqa ilovalar trafigini ushlab qolishi mumkinligi sababli, tizim foydalanuvchidan aniq rozilik talab qiladi. prepare() siz ishga tushirishingiz kerak bo'lgan Intent qaytaradi, ruxsat paketingizga bog'langan, tunnel ishlab turganda holat satri doimiy ko'rsatkichni ko'rsatadi. Ikkinchi VPN ko'tarilsa birinchisi o'chadi, chunki Android bir vaqtda bitta faol VPN ishlatadi.
Bu bitta-faol qoidasi sinovda odamlarni qoqiltiradi. Korporativ mijoz ulangan paytda o'z tunnelingizni ko'tarib, kodingiz buzilgan deb xulosa qilasiz, aslida platforma boshqa mijozdan o'tgan. Ruxsatlar keyinroq bekor qilinishi mumkin va rozilik faoliyati yo'q qurilmalarda prepare() null qaytarishi mumkin, shuning uchun establish() baribir xatoni boshqarishi kerak.
Yashirin API va sozlama niyatlari
Eski javoblar o'rnatilgan mijoz ishlatadigan com.android.internal sinflari va AIDL interfeyslariga ishora qiladi. Ular SDK'da yo'q, nashrlar orasida ogohlantirishsiz o'zgaradi va ilova do'konlari bu kirishni xavf deb hisoblaydi. Qurilmani root qilish ham ularni barqaror qilmaydi, chunki root va yashirin API'ga kirish o'zaro bog'liq bo'lmagan muammolar.
Qo'llab-quvvatlanadigan navigatsiya yordamchisi — Settings.ACTION_VPN_SETTINGS, uning qiymati android.net.vpn.SETTINGS. Ishga tushirishdan oldin uni hal qiling, chunki ba'zi OEM buildlari bu faoliyatni taqdim etmaydi, hal qilish muvaffaqiyatsiz bo'lsa yozma qadamlarga o'ting. U foydalanuvchini ekranga olib boradi va hech narsani sozlamaydi.
Qurilma egasi va MDM yo'llari odamlar odatda nazarda tutadigan istisno. DevicePolicyManager doimiy yoqilgan VPN paketini belgilashi mumkin, boshqariladigan konfiguratsiyalar ularni qo'llab-quvvatlaydigan mijoz uchun sozlamalarni oldindan yuklashi mumkin, lekin bu hali ham PPTP profilini yozadigan ommaviy SDK emas.
Qarorni foydalanuvchi tomondan ko'rib chiqing
Agar mahsulotingiz trafik tashishi kerak bo'lsa, VpnService va haqiqiy protokol stekini rejalashtiring, rozilik oqimi va bitta VPN qoidasi uchun vaqt ajrating. Maqsad mavjud korporativ profilga ulanish bo'lsa, sizning ishingiz yo'naltirish: sozlamalar ekraniga chuqur havola, maydonlarni hujjatlashtirish va tunnelni platforma mijoziga qoldirish. Agar ilova faqat shaxsiy oxirgi nuqtaga yetishi kerak bo'lsa, unga o'z tunnels umuman kerak emas.
Bu qarorni kod yozishdan oldin yozib qo'ying, chunki uchta yo'l birinchi sprintdan keyin deyarli hech qanday umumiylikka ega emas.
Boshlashdan oldin oxirgi tekshiruv: talab bizning ilovamiz ulanishini yoki qurilma ulanishini aytadimi? Birinchisi — VpnService, ikkinchisi — siz yarata olmaydigan profil. O'sha gapni to'g'ri shakllantirish har qanday qayta ishlashdan arzon.