உங்கள் Android பயன்பாடு கணினி VPN சுயவிவரத்தை ஏன் சேர்க்க முடியாது
VpnService உங்கள் பயன்பாட்டுக்குச் சொந்தமான சுரங்கப்பாதையை உருவாக்குகிறது; இது தொலைபேசியின் PPTP, L2TP அல்லது IPsec பதிவுகளைச் சேர்க்கவோ திருத்தவோ முடியாது. எல்லையைப் பின்பற்றி சரியான பாதையைத் தேர்ந்தெடுக்கவும்.
நீங்கள் அமைப்புகளில் VPN வரிசையைத் தட்டுகிறீர்கள், வேறொருவர் நிறுவிய சுயவிவரத்தைப் பார்க்கிறீர்கள், அதைச் சேர்க்கும் அழைப்பைத் தேடத் தொடங்குகிறீர்கள். அத்தகைய அழைப்பு இல்லை. பயன்பாடு VpnService வழாக அதன் சொந்தச் சுரங்கப்பாதையைத் திறக்கலாம், ஆனால் அந்தப் பட்டியலில் உள்ள பதிவுகள் தளத்துக்கும் அவற்றை உருவாக்கிய கிளையன்ட்டுக்கும் சொந்தமானவை. கோடு சரியாக எங்கே உள்ளது என்பதை அறிவது மறைந்த வகுப்புகளுக்குப் பின்னால் ஓடும் ஒரு வாரத்தைச் சேமிக்கிறது.
அமைப்புகள் திரை காட்டுவதில் இருந்து தொடங்குங்கள்
VPN பட்டியல் என்பது கணினி அல்லது உற்பத்தியாளரின் கிளையன்ட் நிறுவிய சுயவிவரங்களின் பதிவேடு: PPTP, L2TP/IPsec, IKEv2, மேலும் OEM பயன்பாடு அல்லது MDM தள்ளிய எந்த வரிசையும். ஒவ்வொரு வரிசையும் சேவையக முகவரி, சான்றுகள் மற்றும் உங்கள் செயல்முறைக்கு வெளியே வாழும் நெறிமுறைச் செயலாக்கத்தைக் கொண்டுள்ளது. பயனர் அங்கே இணை தட்டும்போது சுரங்கப்பாதையை உயர்த்துவது தளத்தின் கிளையன்ட், உங்கள் குறியீடு அல்ல. அதனால்தான் வரிசை மறுதொடக்கத்திற்குப் பிறகும் நீடிக்கிறது, அதனால்தான் உங்கள் பயன்பாட்டை நீக்குவது அதை ஒருபோதும் அகற்றாது.
பயனரின் பக்கத்திலிருந்து பட்டியல் API மேற்பரப்பு போலத் தோன்றுகிறது, VPN சேர்ப்பது ஒரு நோக்கத்தின் தூரத்தில் இருக்க வேண்டிய இடம். அப்படி இல்லை. அதைத் தொடும் ஒரே பொது நுழைவுப் புள்ளிகள் வழிசெலுத்தல் நோக்கங்கள், அதில் எழுதுவது அனைத்தும் தளத்துக்கோ சிறப்புரிமை பெற்ற கூறுக்கோ சொந்தமானது.
நடைமுறை விளைவு: ஆதரவு உரை பயனர்களை அமைப்புகளில் சுயவிவரத்தைச் சேர்க்கச் சொன்னால், உங்கள் பயன்பாடு அந்த ஓட்டத்தின் பகுதியே அல்ல.
VpnService உண்மையில் தருவது
VpnService மற்றும் VpnService.Builder உங்கள் பயன்பாட்டுக்குச் சொந்தமான ஒரு சுரங்கப்பாதையை விவரிக்கின்றன. நீங்கள் முகவரிகள், பாதைகள், DNS சேவையகங்கள் மற்றும் MTU சேர்க்கிறீர்கள், addAllowedApplication() அல்லது addDisallowedApplication() மூலம் போக்குவரத்தை வரம்பிடுகிறீர்கள், பின்னர் establish() TUN இடைமுகத்திற்கு ParcelFileDescriptor திருப்பித் தருகிறது. அந்தத் தருணத்திலிருந்து பயன்பாடு IP பொதிகளைப் படித்து பதில்களை எழுதுகிறது, அதாவது நெறிமுறையைச் செயல்படுத்துவதோ உட்பொதிப்பதோ உங்கள் வேலை: OpenVPN, WireGuard, தனிப்பயன் இடமாற்றம்.
அந்த வரிசையில் எதுவும் PPTP, L2TP/IPsec அல்லது IKEv2 பேசவில்லை. Builder இல் கணினியின் L2TP கிளையன்ட்டைப் பயன்படுத்து என்று சொல்லும் சுவிட்ச் இல்லை, தளம் ஏற்கனவே வைத்திருக்கும் சுயவிவரத்தை இயக்க அனுமதிக்கும் கால்பேக்கும் இல்லை. இதுவே உண்மையான எல்லை, இது அனுமதிகளின் இடைவெளி அல்ல, வடிவமைப்பின் எல்லை.
எனவே ஒரு பயன்பாடு Android இல் நிச்சயமாக VPN கிளையன்ட்டாக இருக்க முடியும். தொலைபேசியுடன் வரும் கிளையன்ட்களின் மேலாளராக மட்டும் இருக்க முடியாது.
ஒப்புதல் உரையாடல் அலங்காரம் அல்ல
உங்கள் சுரங்கப்பாதை மற்ற பயன்பாடுகளின் போக்குவரத்தைப் பிடிக்க முடியும் என்பதால், கணினி பயனரிடமிருந்து வெளிப்படையான அனுமதியைக் கோருகிறது. prepare() நீங்கள் தொடங்க வேண்டிய Intent ஒன்றைத் திருப்பித் தருகிறது, அனுமதி உங்கள் தொகுப்புடன் பிணைக்கப்பட்டுள்ளது, சுரங்கப்பாதை இயங்கும்போது நிலைப் பட்டியில் நிரந்தரக் குறியீடு தெரிகிறது. இரண்டாவது VPN எழும்பினால் முதல் ஒன்று முடக்கப்படும், ஏனெனில் Android ஒரு நேரத்தில் ஒரு செயலில் உள்ள VPN ஐ மட்டுமே இயக்குகிறது.
ஒரு-செயலில் என்ற அந்த விதி சோதனையில் மக்களைத் தடுக்கிறது. நிறுவனக் கிளையன்ட் இணைக்கப்பட்டிருக்கும்போது உங்கள் சுரங்கப்பாதையை உயர்த்தி உங்கள் குறியீடு உடைந்துவிட்டது என்று முடிவெடுக்கிறீர்கள், உண்மையில் தளம் மற்ற கிளையன்ட்டிலிருந்து மாறியது மட்டுமே. அனுமதிகள் பின்னர் ரத்து செய்யப்படலாம், ஒப்புதல் செயல்பாடு இல்லாத சாதனங்களில் prepare() null திருப்பித் தரலாம், எனவே establish() இன்னும் தோல்வியைக் கையாள வேண்டும்.
மறைந்த API களும் அமைப்பு நோக்கங்களும்
பழைய பதில்கள் உள்ளமைந்த கிளையன்ட் பயன்படுத்தும் com.android.internal வகுப்புகள் மற்றும் AIDL இடைமுகங்களைச் சுட்டுகின்றன. அவை SDK இல் இல்லை, வெளியீடுகளுக்கு இடையே அறிவிப்பின்றி மாறுகின்றன, பயன்பாட்டுக் கடைகள் அந்த அணுகலை ஆபத்தாகக் கருதுகின்றன. சாதனத்தை root செய்வதும் அவற்றை நிலைப்படுத்தாது, ஏனெனில் root மற்றும் மறைந்த API அணுகல் தொடர்பற்ற சிக்கல்கள்.
ஆதரவளிக்கப்பட்ட வழிசெலுத்தல் உதவி Settings.ACTION_VPN_SETTINGS, அதன் மதிப்பு android.net.vpn.SETTINGS. தொடங்குவதற்கு முன் அதைத் தீர்க்கவும், ஏனெனில் சில OEM கட்டுமானங்கள் அந்தச் செயல்பாட்டை வழங்குவதில்லை, தீர்வு தோல்வியடைந்தால் எழுதப்பட்ட படிகளுக்குச் செல்லுங்கள். அது பயனரைத் திரைக்கு அழைத்துச் செல்கிறது, எதையும் கட்டமைக்கவில்லை.
சாதன-உரிமையாளர் மற்றும் MDM பாதைகளே மக்கள் பொதுவாகக் குறிப்பிடும் விதிவிலக்கு. DevicePolicyManager எப்போதும்-இயங்கும் VPN தொகுப்பை நியமிக்க முடியும், நிர்வகிக்கப்பட்ட உள்ளமைவுகள் அவற்றை ஆதரிக்கும் கிளையன்ட்டுக்கு அமைப்புகளை முன்கூட்டியே ஏற்றலாம், ஆனால் அது இன்னும் பொது SDK PPTP சுயவிவரத்தை எழுதுவது அல்ல.
பயனரின் பக்கத்திலிருந்து முடிவைப் பாருங்கள்
உங்கள் தயாரிப்பு போக்குவரத்தைச் சுமக்க வேண்டும் என்றால், VpnService உடன் உண்மையான நெறிமுறை அடுக்கைத் திட்டமிடுங்கள், ஒப்புதல் ஓட்டத்திற்கும் ஒரு-VPN விதிக்கும் நேரம் ஒதுக்குங்கள். இலக்கு ஏற்கனவே உள்ள நிறுவனச் சுயவிவரத்துடன் இணைவது என்றால், உங்கள் வேலை வழிகாட்டல்: அமைப்புகள் திரைக்கு ஆழமான இணைப்பு, புலங்களை ஆவணப்படுத்துதல், சுரங்கப்பாதையை தளத்தின் கிளையன்ட் செய்யட்டும். பயன்பாடு தனிப்பட்ட முடிவுப் புள்ளியை அடைய மட்டுமே வேண்டும் என்றால், அதற்கு சொந்தச் சுரங்கப்பாதை தேவையே இல்லை.
குறியீடு எழுதுவதற்கு முன் அந்த முடிவை எழுதுங்கள், ஏனெனில் முதல் ஸ்பிரிண்ட்டுக்குப் பிறகு மூன்று பாதைகளுக்கும் கிட்டத்தட்ட எதுவும் பொதுவானதல்ல.
தொடங்குவதற்கு முன் இறுதிச் சரிபார்ப்பு: தேவை எங்கள் பயன்பாடு இணைக்கிறது என்று சொல்கிறதா, அல்லது சாதனம் இணைக்கிறது என்று? முதலாவது VpnService, இரண்டாவது நீங்கள் உருவாக்க முடியாத சுயவிவரம். அந்த வாக்கியத்தைச் சரிசெய்வது எந்த மறுசீரமைப்பையும் விட மலிவானது.