অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং তার উচ্চতর ভার্সন চালিত ডিভাইসগুলি আপনার অ্যাপকে একটি ডিভাইসের জন্য নেটওয়ার্ক শংসাপত্র যোগ করার অনুমতি দেয় যাতে একটি ওয়াই-ফাই অ্যাক্সেস পয়েন্টে স্বয়ংক্রিয়ভাবে সংযোগ করা যায়। আপনি WifiNetworkSuggestion ব্যবহার করে কোন নেটওয়ার্কে সংযোগ করতে হবে তার জন্য পরামর্শ দিতে পারেন। প্ল্যাটফর্মটি শেষ পর্যন্ত আপনার অ্যাপ এবং অন্যান্য অ্যাপের ইনপুটের উপর ভিত্তি করে কোন অ্যাক্সেস পয়েন্ট গ্রহণ করবে তা বেছে নেয়।
অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) এবং তার উচ্চতর সংস্করণে:
-
PasspointConfigurationপ্রভিশনিং সাজেশন এপিআই দ্বারা সমর্থিত। অ্যান্ড্রয়েড ১১ এর আগে,PasspointConfigurationপ্রভিশনিং করার জন্যaddOrUpdatePasspointConfiguration()API ব্যবহার করা প্রয়োজন ছিল। - এই কাঠামোটি TLS-ভিত্তিক এন্টারপ্রাইজ সাজেশনের (EAP-TLS, EAP-TTLS, এবং EAP-PEAP) নিরাপত্তা প্রয়োজনীয়তা প্রয়োগ করে; এই ধরনের নেটওয়ার্কের জন্য সাজেশনের জন্য একটি
Root CA certificateএবং একটিserver domain nameসেট করতে হবে।
- এই কাঠামোটি EAP-SIM ভিত্তিক এন্টারপ্রাইজ পরামর্শের (EAP-SIM, EAP-AKA, EAP-AKA-PRIME) জন্য মালিকানার প্রয়োজনীয়তা প্রয়োগ করে; এই ধরনের পরামর্শ শুধুমাত্র ক্যারিয়ার-স্বাক্ষরিত অ্যাপগুলির দ্বারা অনুমোদিত।
- ক্যারিয়ার-স্বাক্ষরিত অ্যাপ দ্বারা প্রদত্ত পরামর্শের জন্য, ফ্রেমওয়ার্কটি স্বয়ংক্রিয়ভাবে তাদের অ্যাপের ক্যারিয়ার স্বাক্ষরের সাথে সম্পর্কিত একটি ক্যারিয়ার আইডি বরাদ্দ করে। ডিভাইস থেকে সংশ্লিষ্ট সিমটি সরানো হলে এই ধরনের পরামর্শ স্বয়ংক্রিয়ভাবে অক্ষম হয়ে যায়।
অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) এবং তার উচ্চতর সংস্করণে:
অ-স্থায়ী MAC র্যান্ডমাইজেশনের মাধ্যমে অতিরিক্ত গোপনীয়তা সক্ষম করা যেতে পারে, যা পর্যায়ক্রমে র্যান্ডমাইজড MAC ঠিকানা পুনরায় র্যান্ডমাইজ করে। আপনার নেটওয়ার্কের জন্য র্যান্ডমাইজেশনের স্তর নির্দিষ্ট করতে
setMacRandomizationSettingব্যবহার করুন।isPasspointTermsAndConditionsSupported(): শর্তাবলী হল একটি পাসপয়েন্ট বৈশিষ্ট্য যা নেটওয়ার্ক স্থাপনাগুলিকে অনিরাপদ ক্যাপটিভ পোর্টালগুলিকে প্রতিস্থাপন করতে দেয়, যা ওপেন নেটওয়ার্ক ব্যবহার করে, একটি নিরাপদ পাসপয়েন্ট নেটওয়ার্ক দিয়ে। শর্তাবলী গ্রহণের প্রয়োজন হলে ব্যবহারকারীকে একটি বিজ্ঞপ্তি প্রদর্শিত হয়। যেসব অ্যাপ শর্তাবলী দ্বারা গেটেড পাসপয়েন্ট নেটওয়ার্কের পরামর্শ দেয়, তাদের অবশ্যই প্রথমে এই API কল করতে হবে যাতে নিশ্চিত করা যায় যে ডিভাইসটি ক্ষমতা সমর্থন করে। যদি ডিভাইসটি ক্ষমতা সমর্থন না করে, তাহলে এটি এই নেটওয়ার্কের সাথে সংযোগ করতে সক্ষম হবে না এবং একটি বিকল্প বা লিগ্যাসি নেটওয়ার্ক প্রস্তাব করতে হবে।isDecoratedIdentitySupported(): যখন একটি প্রিফিক্স ডেকোরেশন সহ নেটওয়ার্কগুলিতে প্রমাণীকরণ করা হয়, তখন সজ্জিত পরিচয় প্রিফিক্স নেটওয়ার্ক অপারেটরদের AAA নেটওয়ার্কের ভিতরে একাধিক প্রক্সির মাধ্যমে স্পষ্ট রাউটিং সম্পাদনের জন্য নেটওয়ার্ক অ্যাক্সেস আইডেন্টিফায়ার (NAI) আপডেট করার অনুমতি দেয় (এ সম্পর্কে আরও জানতে RFC 7542 দেখুন)।Android 12 PPS-MO এক্সটেনশনের জন্য WBA স্পেসিফিকেশনের সাথে সঙ্গতিপূর্ণ হওয়ার জন্য এই বৈশিষ্ট্যটি প্রয়োগ করে। যেসব অ্যাপ পাসপয়েন্ট নেটওয়ার্কের জন্য একটি সজ্জিত পরিচয়ের প্রয়োজন হয় তাদের প্রথমে এই API কল করতে হবে যাতে নিশ্চিত করা যায় যে ডিভাইসটি ক্ষমতা সমর্থন করে। যদি ডিভাইসটি ক্ষমতা সমর্থন না করে, তাহলে পরিচয়টি সজ্জিত হবে না এবং নেটওয়ার্কের প্রমাণীকরণ ব্যর্থ হতে পারে।
পাসপয়েন্ট সাজেশন তৈরি করতে, অ্যাপগুলিকে PasspointConfiguration , Credential এবং HomeSp ক্লাস ব্যবহার করতে হবে। এই ক্লাসগুলি পাসপয়েন্ট প্রোফাইল বর্ণনা করে, যা ওয়াই-ফাই অ্যালায়েন্স পাসপয়েন্ট স্পেসিফিকেশনে সংজ্ঞায়িত করা হয়েছে।
নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি ওপেন, একটি WPA2, একটি WPA3 নেটওয়ার্ক এবং একটি পাসপয়েন্ট নেটওয়ার্কের জন্য শংসাপত্র প্রদান করতে হয়:
কোটলিন
val suggestion1 = WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion2 = WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion3 = WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val passpointConfig = PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration val suggestion4 = WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestionsList = listOf(suggestion1, suggestion2, suggestion3, suggestion4); val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager; val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here } // Optional (Wait for post connection broadcast to one of your suggestions) val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here } }; context.registerReceiver(broadcastReceiver, intentFilter);
জাভা
final WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion3 = new WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final PasspointConfiguration passpointConfig = new PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration final WifiNetworkSuggestion suggestion4 = new WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion> {{ add(suggestion1); add(suggestion2); add(suggestion3); add(suggestion4); }}; final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final int status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here… } // Optional (Wait for post connection broadcast to one of your suggestions) final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals( WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here... } }; context.registerReceiver(broadcastReceiver, intentFilter);
অ্যাপটি প্রথমবারের মতো কোনও পরামর্শ দেওয়ার পরপরই ব্যবহারকারীকে অবহিত করা হয়। বিজ্ঞপ্তির ধরণ ডিভাইসে চলমান অ্যান্ড্রয়েডের সংস্করণের উপর নির্ভর করে:
- অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) এবং তার উচ্চতর সংস্করণে, অ্যাপটি ফোরগ্রাউন্ডে চলমান থাকলে ব্যবহারকারী একটি ডায়ালগ দেখতে পাবেন এবং অ্যাপটি ব্যাকগ্রাউন্ডে চলমান থাকলে একটি বিজ্ঞপ্তি দেখতে পাবেন।
- অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) তে, ব্যবহারকারী একটি বিজ্ঞপ্তি দেখতে পাবেন, অ্যাপটি ফোরগ্রাউন্ডে চলছে নাকি ব্যাকগ্রাউন্ডে, তা নির্বিশেষে।
যখন প্ল্যাটফর্মটি কোনও একটি নেটওয়ার্ক পরামর্শের সাথে সংযুক্ত হয়, তখন সেটিংস এমন টেক্সট দেখায় যা সংশ্লিষ্ট পরামর্শদাতা অ্যাপের সাথে নেটওয়ার্ক সংযোগের বৈশিষ্ট্য উল্লেখ করে।
ব্যবহারকারীর সংযোগ বিচ্ছিন্ন করা পরিচালনা করা
যদি ব্যবহারকারী ওয়াই-ফাই পিকার ব্যবহার করে কোনও নেটওয়ার্ক পরামর্শের সাথে সংযুক্ত থাকাকালীন তা থেকে স্পষ্টভাবে সংযোগ বিচ্ছিন্ন করে, তাহলে সেই নেটওয়ার্কটি যখন রেঞ্জের মধ্যে থাকে তখন তা উপেক্ষা করা হয়। এই সময়ের মধ্যে, সেই নেটওয়ার্কটি স্বয়ংক্রিয় সংযোগের জন্য বিবেচিত হবে না, এমনকি যদি অ্যাপটি নেটওয়ার্কের সাথে সম্পর্কিত নেটওয়ার্ক পরামর্শটি সরিয়ে দেয় এবং পুনরায় যোগ করে। যদি ব্যবহারকারী ওয়াই-ফাই পিকার ব্যবহার করে এমন কোনও নেটওয়ার্কের সাথে স্পষ্টভাবে সংযোগ স্থাপন করে যা পূর্বে সংযোগ বিচ্ছিন্ন ছিল, তাহলে সেই নেটওয়ার্কটি অবিলম্বে স্বয়ংক্রিয় সংযোগের জন্য বিবেচিত হবে।
অ্যাপের অনুমোদনের স্থিতি পরিবর্তন করা হচ্ছে
কোনও ব্যবহারকারী নেটওয়ার্ক পরামর্শ বিজ্ঞপ্তি প্রত্যাখ্যান করলে অ্যাপ থেকে CHANGE_WIFI_STATE অনুমতিটি সরিয়ে ফেলা হয়। ব্যবহারকারী পরে Wi-Fi নিয়ন্ত্রণ মেনুতে গিয়ে এই অনুমোদন দিতে পারেন ( সেটিংস > অ্যাপস এবং বিজ্ঞপ্তি > বিশেষ অ্যাপ অ্যাক্সেস > ওয়াই-ফাই নিয়ন্ত্রণ > App name )।