สักวันหนึ่งเครือข่ายดาวเทียมจะมีความเสถียรมากพอที่จะทำงานเป็นเครือข่ายปกติ และทำงานร่วมกับกรณีการใช้งานแอปทั้งหมดได้อย่างราบรื่น แต่ในตอนนี้ ข้อมูลในเครือข่ายเหล่านี้ เป็นทรัพยากรที่หายาก เครือข่ายที่ใช้ดาวเทียมซึ่งมีข้อจำกัดในการใช้ข้อมูลเรียกว่าเครือข่ายดาวเทียมที่มีข้อจำกัด
ด้วยข้อจำกัดเหล่านี้ แอป Android จึงไม่ได้ใช้เครือข่ายเหล่านี้โดยค่าเริ่มต้น หากต้องการให้แอปทำงานบนเครือข่ายดาวเทียมที่มีข้อจำกัด คุณต้องระบุว่าแอปของคุณได้รับการเพิ่มประสิทธิภาพสำหรับการใช้ข้อมูลผ่านดาวเทียม และปรับกรณีการใช้งานของแอปเพื่อประหยัดทรัพยากรเมื่อเชื่อมต่อกับเครือข่ายดาวเทียมที่มีข้อจำกัด
ปรับกรณีการใช้งานของแอป
สิ่งที่คุณต้องทำเพื่อให้แอปเข้าถึงเครือข่ายดาวเทียมที่มีข้อจำกัดได้คือ เลือกใช้ แต่คุณอาจต้องทำการเปลี่ยนแปลงเพิ่มเติมเพื่อเพิ่มประสิทธิภาพ ลักษณะการทำงานของแอปเพื่อใช้ทรัพยากรเครือข่ายที่มีจำกัดอย่างมีความรับผิดชอบ ข้อควรพิจารณาเมื่อเพิ่มประสิทธิภาพเพื่อการใช้ข้อมูลที่จำกัดมีดังนี้
- พิจารณาว่าแอปของคุณเหมาะกับการใช้งานในเครือข่ายที่มีข้อจำกัดหรือไม่ แอปบางแอปไม่เหมาะกับเครือข่ายที่มีการจำกัดข้อมูลในทุกกรณี เช่น แอปสตรีมมิงวิดีโออาจเลือกที่จะไม่ใช้เครือข่ายดาวเทียมเลย แม้ว่าจะยังระบุการมีอยู่ของเครือข่ายดาวเทียมได้ และแจ้งให้ผู้ใช้ทราบว่าแอปจะไม่ทำงานในเครือข่ายที่จำกัดที่มีอยู่
- ระบุกรณีการใช้งานที่เฉพาะเจาะจงเพื่อจำกัดหรือแก้ไข ฟีเจอร์บางอย่างของแอปอาจเหมาะกับสภาพข้อมูลที่จำกัดมากกว่าฟีเจอร์อื่นๆ เช่น การส่งข้อความจะทำงานได้ดี แต่การพยายามอัปโหลดวิดีโอ HD อาจส่งผลให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี ซึ่งคล้ายกับ วิธีที่แอปจำนวนมากเปลี่ยนลักษณะการทำงานเมื่อมีการโรมมิ่ง
- ปรับวิธีที่แอปใช้ทรัพยากรเครือข่าย เครือข่ายที่มีข้อจำกัดจะทำงานได้ดีที่สุดเมื่อแอปทำการดำเนินการเครือข่ายเป็นช่วงๆ และใช้เวลาส่วนใหญ่โดยไม่ใช้เครือข่าย หลีกเลี่ยงการสร้างการรับส่งข้อมูลในเครือข่ายที่เกิดขึ้นอย่างต่อเนื่องหรือมีการรับส่งข้อมูลจำนวนมาก ตัวอย่างเช่น เสียงแบบกดเพื่อพูดเหมาะกับสภาพเครือข่ายที่มีข้อจำกัดมากกว่าการโทรด้วยเสียงแบบเรียลไทม์
นอกจากนี้ ยังมีการเปลี่ยนแปลงเฉพาะที่คุณต้องทำหากแอปใช้ตรรกะการเชื่อมต่อเครือข่ายที่ซับซ้อนหรือ Firebase Cloud Messaging
ระบุตนเองว่าเพิ่มประสิทธิภาพสำหรับเครือข่ายที่มีข้อจำกัด
หากต้องการระบุว่าแอปของคุณได้รับการเพิ่มประสิทธิภาพสำหรับเครือข่ายที่มีข้อจำกัดและเลือกใช้
เครือข่ายดังกล่าว ให้อัปเดตไฟล์ Manifest ของแอปด้วยองค์ประกอบ
<meta-data>
ดังนี้
<meta-data android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
android:value="PACKAGE_NAME" />
องค์ประกอบนี้ช่วยให้แอปใช้เครือข่ายดาวเทียมที่จำกัดได้เมื่อเป็นเครือข่ายเดียวที่พร้อมใช้งาน นอกจากนี้ ยังแจ้งให้ระบบทราบว่าแอปของคุณ ได้รับการเพิ่มประสิทธิภาพสำหรับเครือข่ายที่มีข้อจำกัด ซึ่งจะช่วยให้ผู้ใช้ค้นพบแอปได้โดยการแสดงแอปของคุณในกลุ่ม แอปที่เปิดใช้ดาวเทียมในแอปการตั้งค่า
เปลี่ยนลักษณะการทำงานภายใต้เงื่อนไขข้อมูลที่จำกัด
หากต้องการเปลี่ยนลักษณะการทำงานของแอปเมื่อใช้เครือข่ายที่มีข้อจำกัด หรือ
หากแอปมีตรรกะที่มีอยู่ก่อนแล้วซึ่งใช้ ConnectivityManager
เพื่อจัดการการใช้เครือข่าย คุณจะต้อง
ทำการเปลี่ยนแปลงบางอย่างในโฟลว์เครือข่าย
ตรวจหาเงื่อนไขข้อมูลที่ถูกจำกัด
ออบเจ็กต์ NetworkCapabilities
ที่ใช้สำหรับคำขอเครือข่าย
มีบิต NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
ซึ่ง
ตั้งค่าไว้โดยค่าเริ่มต้นในเครือข่ายทั้งหมด และนำออกในเครือข่ายที่มี
ข้อจำกัดด้านแบนด์วิดท์ คุณสามารถตรวจสอบว่าเครือข่ายมีข้อจำกัดด้านแบนด์วิดท์หรือไม่โดยดูว่าเครือข่ายนั้นมีNET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
หรือไม่
ทำงานกับเครือข่ายที่มีข้อจำกัด
ออบเจ็กต์ NetworkRequest
ยังมีความสามารถ NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED
โดยค่าเริ่มต้นด้วย นำความสามารถนี้ออก
เพื่อระบุว่ายอมรับเครือข่ายที่มีข้อจำกัดได้
เมื่อตรวจพบว่าคุณเชื่อมต่อกับเครือข่ายที่มีข้อจำกัด คุณจะปรับฟีเจอร์ของแอปได้ตามต้องการโดยทำดังนี้
Kotlin
val HandlerThread = HandlerThread("SatelliteNetworkMonitor" handlerThread.start() val handler = Handler(handlerThread.getLooper()) // Make the network request. val request = NetworkRequest.Builder() .addCapability(NET_CAPABILITY_INTERNET .removeCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) .build() // Register for the callback. val callback = NetworkCallback() { override fun onCapabilitiesChanged(net: Network, nc: NetWorkCapabilities) { updateAppUseCases(net, nc) } fun updateAppUseCases(net: Network, nc: NetworkCapabilities) { if (!nc.hasCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) || nc.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) { // Adapt to constrained network or disable heavy data usage features. ... } else { // Revert to unconstrained behavior. ... } } } // Where cm is your ConnectivityManager object: cm.registerBestMatchingNetworkCallback(request, callback, handler)
Java
HandlerThread handlerThread = new HandlerThread("SatelliteNetworkMonitor"); handlerThread.start(); Handler handler = new Handler(handlerThread.getLooper()); // Make the network request. NetworkRequest request = new NetworkRequest.Builder() .addCapability(NET_CAPABILITY_INTERNET) .removeCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) .build(); // Register for the callback. NetworkCallback callback = new NetworkCallback() { @Override public void onCapabilitiesChanged(Network net, NetworkCapabilities nc) { updateAppUsecases(net, nc); } private void updateAppUsecases(Network net, NetworkCapabilities nc) { if (!nc.hasCapability(NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED) || nc.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) { // Adapt to constrained network or disable heavy data usage features. ... } else { // Revert to unconstrained behavior. ... } } }; // Where cm is your ConnectivityManager object: cm.registerBestMatchingNetworkCallback(request, callback, handler);
รับข้อความ FCM ในเครือข่ายที่มีข้อจำกัด
หากแอปใช้ Firebase Cloud Messaging (FCM) เพื่อรับข้อความจากเซิร์ฟเวอร์แอป คุณสามารถระบุว่าควรนำส่งข้อความที่เฉพาะเจาะจงแม้ในเครือข่ายที่มีข้อจำกัดได้โดยใส่แฟล็ก bandwidth_constrained_ok
เมื่อส่งข้อความไปยังเซิร์ฟเวอร์ FCM
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
"android": {
"bandwidth_constrained_ok": true
}
}
}
หากข้อความไม่มีแฟล็กนี้ เซิร์ฟเวอร์ FCM จะส่งข้อความ เมื่ออุปกรณ์เชื่อมต่อผ่านเครือข่ายที่ไม่จำกัดเท่านั้น