อุปกรณ์ที่ใช้ Android 10 (API ระดับ 29) ขึ้นไปอนุญาตให้แอปเพิ่มเครือข่ายได้
ข้อมูลเข้าสู่ระบบของอุปกรณ์เพื่อเชื่อมต่อกับจุดเข้าใช้งาน Wi-Fi โดยอัตโนมัติ คุณสามารถให้
คำแนะนำว่าจะใช้เครือข่ายใดในการเชื่อมต่อ
WifiNetworkSuggestion
แพลตฟอร์มจะเลือกจุดเข้าใช้งานที่จะยอมรับในท้ายที่สุด
ข้อมูลจากแอปของคุณและแอปอื่นๆ
ใน Android 11 (API ระดับ 30) ขึ้นไป ให้ทำดังนี้
- การจัดสรร
PasspointConfiguration
สนับสนุนโดย API การแนะนำ ก่อน Android 11 กำลังจัดสรร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); คำแนะนำดังกล่าว อนุญาตเฉพาะแอปที่ลงนามโดยผู้ให้บริการ
- เฟรมเวิร์กโดยอัตโนมัติสำหรับคำแนะนำจากแอปที่ลงนามโดยผู้ให้บริการ กำหนดรหัสผู้ให้บริการที่สอดคล้องกับ การรับรองของผู้ให้บริการ เช่น ระบบจะปิดการแนะนำโดยอัตโนมัติหากนำซิมที่เกี่ยวข้องออก จากอุปกรณ์
ใน Android 12 (API ระดับ 31) ขึ้นไป ให้ทำดังนี้
เปิดใช้ความเป็นส่วนตัวเพิ่มเติมผ่านการสุ่ม MAC ที่ไม่ถาวรได้ ซึ่งจะสุ่มที่อยู่ MAC ที่สุ่มขึ้นอีกครั้งเป็นระยะๆ ใช้
setMacRandomizationSetting
เพื่อระบุระดับการสุ่มสำหรับเครือข่ายisPasspointTermsAndConditionsSupported()
: ข้อกำหนดและเงื่อนไขคือรหัสผ่าน ที่ช่วยให้การติดตั้งใช้งานเครือข่ายแทนที่แคพทีฟพอร์ทัลที่ไม่ปลอดภัย ซึ่งใช้เครือข่ายแบบเปิดพร้อมด้วยเครือข่าย Passpoint ที่ปลอดภัย การแจ้งเตือนคือ แสดงต่อผู้ใช้เมื่อต้องยอมรับข้อกำหนดในการให้บริการ แอปที่แนะนำเครือข่าย Passpoint ซึ่งจำกัดขอบเขตตามข้อกำหนดและเงื่อนไข ต้องเรียกใช้ API นี้ก่อนเพื่อให้แน่ใจว่าอุปกรณ์รองรับความสามารถดังกล่าว หากอุปกรณ์ไม่รองรับความสามารถ จะไม่สามารถเชื่อมต่อกับ ต้องแนะนำเครือข่ายนี้และเครือข่ายอื่นหรือเครือข่ายเดิมisDecoratedIdentitySupported()
: เมื่อมีการตรวจสอบสิทธิ์ไปยังเครือข่ายที่มีการตกแต่งคำนำหน้า การตั้งค่า คำนำหน้าข้อมูลประจำตัวอนุญาตให้ผู้ให้บริการเครือข่ายอัปเดตการเข้าถึงเครือข่าย ตัวระบุ (NAI) เพื่อทำการกำหนดเส้นทางที่ชัดเจนผ่านพร็อกซีหลายรายการภายใน ของเครือข่าย AAA (โปรดดู RFC 7542 สำหรับ เกี่ยวกับเรื่องนี้เพิ่มเติม)Android 12 ใช้ฟีเจอร์นี้เพื่อปฏิบัติตามข้อกำหนด WBA สำหรับ PPS-MO ส่วนขยาย แอปที่แนะนำเครือข่าย Passpoint ซึ่งจำเป็นต้องมีข้อมูลระบุตัวตนที่ตกแต่งอย่างสวยงามจะต้อง เรียกใช้ API นี้ก่อนเพื่อตรวจสอบว่าอุปกรณ์รองรับความสามารถดังกล่าว ถ้า อุปกรณ์ไม่รองรับความสามารถ จะไม่มีการตกแต่งข้อมูลประจำตัว และการตรวจสอบสิทธิ์ไปยังเครือข่ายอาจล้มเหลว
ในการสร้างคำแนะนำ Passpoint แอปต้องใช้
PasspointConfiguration
Credential
และ
HomeSp
ชั้นเรียน เหล่านี้
คลาสจะอธิบายโปรไฟล์ Passpoint ซึ่งกำหนดไว้ใน Wi-Fi Alliance
รหัสผ่าน
ข้อกำหนดเฉพาะ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีระบุข้อมูลเข้าสู่ระบบสำหรับการเปิด 1 ครั้ง WPA2, เครือข่าย WPA3 1 เครือข่าย และเครือข่าย Passpoint 1 เครือข่าย
Kotlin
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);
Java
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);
ทันทีหลังจากที่แอปแสดงคำแนะนำเป็นครั้งแรก ผู้ใช้จะ การแจ้งเตือน ประเภทการแจ้งเตือนจะขึ้นอยู่กับเวอร์ชัน Android ที่ใช้อยู่ ในอุปกรณ์
- ใน Android 11 (API ระดับ 30) ขึ้นไป ผู้ใช้จะเห็นกล่องโต้ตอบหากแอป ทำงานอยู่ในเบื้องหน้า และการแจ้งเตือนหากแอปกำลังทำงานใน พื้นหลัง
- ใน Android 10 (API ระดับ 29) ผู้ใช้จะเห็นการแจ้งเตือนโดยไม่คำนึงถึง ไม่ว่าแอปจะทำงานอยู่ในเบื้องหน้าหรือเบื้องหลัง
เมื่อแพลตฟอร์มเชื่อมต่อกับคำแนะนำเครือข่ายรายการใดรายการหนึ่ง การตั้งค่าจะแสดง ข้อความที่ระบุแหล่งที่มาของการเชื่อมต่อเครือข่ายกับแอปตัวแนะนำที่เกี่ยวข้อง
การจัดการการยกเลิกการเชื่อมต่อของผู้ใช้
หากผู้ใช้ใช้เครื่องมือเลือก Wi-Fi เพื่อยกเลิกการเชื่อมต่อจากหนึ่งใน คำแนะนำเครือข่ายเมื่อเชื่อมต่ออยู่ ระบบจะไม่สนใจเครือข่ายนั้นเมื่อ ยังอยู่ในระยะสัญญาณ ในช่วงเวลาดังกล่าว เราจะพิจารณาเครือข่ายนั้น เพื่อการเชื่อมต่ออัตโนมัติ แม้ว่าแอปจะนำคำแนะนำเครือข่ายออกและเพิ่มอีกครั้งก็ตาม ที่สอดคล้องกับเครือข่าย หากผู้ใช้ใช้เครื่องมือเลือก Wi-Fi เพื่อ เชื่อมต่อกับเครือข่ายที่ไม่ได้เชื่อมต่อก่อนหน้านี้ เครือข่ายนั้นจะ พิจารณาสำหรับการเชื่อมต่ออัตโนมัติทันที
การเปลี่ยนสถานะการอนุมัติสำหรับแอป
ผู้ใช้ปฏิเสธการแจ้งเตือนเกี่ยวกับคำแนะนำเครือข่ายจะนำ
สิทธิ์CHANGE_WIFI_STATE
จากแอป ผู้ใช้สามารถให้การอนุมัตินี้ได้
ในภายหลังโดยไปที่เมนูควบคุม Wi-Fi (การตั้งค่า >
แอปและ การแจ้งเตือน > แอปพิเศษ
การเข้าถึง > การควบคุม Wi-Fi > App name)