สักวันหนึ่งเครือข่ายดาวเทียมจะมีความเสถียรมากพอที่จะทำงานเป็นเครือข่ายปกติ และทำงานร่วมกับกรณีการใช้งานแอปทั้งหมดได้อย่างราบรื่น แต่ในตอนนี้ข้อมูลในเครือข่ายเหล่านี้ ยังคงเป็นทรัพยากรที่หายาก เครือข่ายที่ใช้ดาวเทียมซึ่งมีข้อจำกัดในการใช้ข้อมูลเรียกว่าเครือข่ายดาวเทียมที่มีข้อจำกัด
ด้วยข้อจำกัดเหล่านี้ แอป Android จึงไม่ได้ใช้เครือข่ายเหล่านี้โดยค่าเริ่มต้น หากต้องการให้แอปทำงานในเครือข่ายดาวเทียมที่มีข้อจำกัด คุณต้องระบุว่าแอปของคุณได้รับการเพิ่มประสิทธิภาพสำหรับการใช้ข้อมูลผ่านดาวเทียม และปรับกรณีการใช้งานของแอปเพื่อประหยัดทรัพยากรเมื่อเชื่อมต่อกับเครือข่ายดาวเทียมที่มีข้อจำกัด
ปรับกรณีการใช้งานของแอป
สิ่งที่คุณต้องทำเพื่อให้แอปเข้าถึงเครือข่ายดาวเทียมที่มีข้อจำกัดได้คือ เลือกใช้ แต่คุณอาจต้องทำการเปลี่ยนแปลงเพิ่มเติมเพื่อเพิ่มประสิทธิภาพ ลักษณะการทำงานของแอปเพื่อใช้ทรัพยากรเครือข่ายที่มีจำกัดอย่างมีความรับผิดชอบ ข้อควรพิจารณาเมื่อเพิ่มประสิทธิภาพเพื่อการใช้ข้อมูลที่จำกัดมีดังนี้
- เครือข่ายดาวเทียมทำงานภายใต้ข้อจำกัดที่มากกว่าเครือข่าย LTE/5G ภาคพื้นดินอย่างมาก โดยมีลักษณะเฉพาะคือมีปริมาณงานต่ำกว่าและเวลาในการตอบสนองสูงกว่า แม้ว่าโดยทั่วไปเราจะแนะนำให้ลดการใช้ข้อมูลเพื่อเหตุผลด้านความน่าเชื่อถือ แต่แอปแต่ละแอปก็มีลักษณะเฉพาะตัว คุณควรประเมินกรณีการใช้งานเฉพาะของคุณเพื่อพิจารณาว่ากลยุทธ์การเพิ่มประสิทธิภาพข้อมูลปัจจุบันให้ประสบการณ์การใช้งานที่ยอมรับได้ในสภาพแวดล้อมที่มีข้อจำกัดเหล่านี้หรือไม่
- พิจารณาว่าแอปของคุณเหมาะกับการใช้งานในเครือข่ายที่มีข้อจำกัดหรือไม่ แอปบางแอปไม่เหมาะกับเครือข่ายที่มีการจำกัดข้อมูลในทุกกรณี
เช่น แอปที่ใช้แบนด์วิดท์สูง เช่น สตรีมมิงวิดีโอ ควรประเมินกลไกการบีบอัดข้อมูลและการนำส่งเนื้อหาเพื่อให้มั่นใจว่าผู้ใช้จะได้รับประสบการณ์การใช้งานที่ราบรื่น หากหลีกเลี่ยงการลดคุณภาพของประสบการณ์การใช้งานเนื่องจากข้อจำกัดด้านข้อมูลไม่ได้
แอปควรดำเนินการต่อไปนี้
- แอปอาจเลือกที่จะไม่ใช้เครือข่ายดาวเทียมเลย แต่ก็ยังสามารถระบุการมีอยู่ของเครือข่ายดาวเทียมและแจ้งให้ผู้ใช้ทราบว่าแอปจะไม่ทำงานในเครือข่ายที่จำกัดที่มีอยู่
- ระบุกรณีการใช้งานที่เฉพาะเจาะจงเพื่อจำกัดหรือแก้ไข ฟีเจอร์บางอย่างของแอปอาจเหมาะกับเงื่อนไขข้อมูลแบบจำกัดมากกว่าฟีเจอร์อื่นๆ เช่น การดำเนินการที่ใช้แบนด์วิดท์ต่ำอย่างการส่งข้อความจะมีความน่าเชื่อถือสูง อย่างไรก็ตาม การดำเนินการที่ใช้แบนด์วิดท์สูง เช่น การอัปโหลดวิดีโอ 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 จะส่งข้อความ เมื่ออุปกรณ์เชื่อมต่อผ่านเครือข่ายที่ไม่จำกัดเท่านั้น