Satellitennetzwerke werden eines Tages robust genug sein, um als normale Netzwerke zu fungieren und nahtlos mit allen App-Anwendungsfällen zusammenzuarbeiten. Derzeit sind Daten in diesen Netzwerken jedoch eine knappe Ressource. Ein satellitenbasiertes Netzwerk mit Einschränkungen bei der Datennutzung wird als eingeschränktes Satellitennetzwerk bezeichnet.
Aufgrund dieser Einschränkungen werden diese Netzwerke in Android-Apps standardmäßig nicht verwendet. Wenn Ihre App in eingeschränkten Satellitennetzwerken funktionieren soll, müssen Sie Ihre App als für die Satellitendatennutzung optimiert kennzeichnen und die Anwendungsfälle Ihrer App anpassen, um Ressourcen zu schonen, wenn sie mit einem eingeschränkten Satellitennetzwerk verbunden ist.
Anwendungsfälle Ihrer App anpassen
Sie müssen nur die Option aktivieren, damit Ihre App auf eingeschränkte Satellitennetzwerke zugreifen kann. Möglicherweise sind jedoch weitere Änderungen erforderlich, um das Verhalten Ihrer App zu optimieren und begrenzte Netzwerkressourcen verantwortungsbewusst zu nutzen. Hier sind einige Punkte, die Sie bei der Optimierung für eine eingeschränkte Datennutzung berücksichtigen sollten:
- Satellitennetzwerke arbeiten unter deutlich eingeschränkteren Bedingungen als terrestrische LTE-/5G-Netzwerke, die durch einen geringeren Durchsatz und eine höhere Latenz gekennzeichnet sind. Wir empfehlen zwar generell, die Datennutzung aus Zuverlässigkeitsgründen zu minimieren, aber jede App ist einzigartig. Sie sollten Ihre spezifischen Anwendungsfälle prüfen, um festzustellen, ob Ihre aktuellen Strategien zur Datenoptimierung in diesen eingeschränkten Umgebungen eine akzeptable Nutzerfreundlichkeit bieten.
- Entscheiden Sie, ob Ihre App für die Verwendung in eingeschränkten Netzwerken geeignet ist. Einige Apps sind unter keinen Umständen für datenbeschränkte Netzwerke geeignet.
Apps mit hoher Bandbreite wie Video-Streaming-Apps sollten beispielsweise ihre Datenkomprimierungs- und Inhaltsbereitstellungsmechanismen prüfen, um eine funktionale Nutzererfahrung zu gewährleisten. Wenn eine eingeschränkte Nutzung aufgrund von Datenbeschränkungen unvermeidlich ist, sollte die App die folgenden Maßnahmen ergreifen:
- Apps können Satellitennetzwerke auch komplett ignorieren. Sie können aber trotzdem erkennen, ob ein Satellitennetzwerk vorhanden ist, und den Nutzer darüber informieren, dass sie im vorhandenen eingeschränkten Netzwerk nicht funktionieren.
- Bestimmte Anwendungsfälle identifizieren, die eingeschränkt oder geändert werden sollen: Einige Funktionen Ihrer App eignen sich möglicherweise besser für Situationen mit begrenzten Daten als andere. Beispielsweise sind Vorgänge mit geringer Bandbreite wie das Senden von SMS sehr zuverlässig. Bei Vorgängen mit hoher Bandbreite, z. B. beim Hochladen von unkomprimierten HD-Videos, kann es jedoch zu erheblichem Buffering oder Fehlern kommen. Wir empfehlen, für diese anspruchsvollen Funktionen adaptives Bitrate-Streaming oder eine robuste Komprimierung zu implementieren. Das ist ähnlich wie bei vielen Apps, die ihr Verhalten beim Roaming ändern.
- Die Art und Weise anpassen, wie Ihre App Netzwerkressourcen verwendet. Netzwerke mit eingeschränkter Bandbreite funktionieren am besten, wenn Apps Netzwerkoperationen in Bursts ausführen und die meiste Zeit das Netzwerk nicht verwenden. Variable Latenz kann die synchrone Echtzeitkommunikation erschweren.
Wenn Ihre App komplexe Netzwerklogik oder Firebase Cloud Messaging verwendet, müssen Sie außerdem bestimmte Änderungen vornehmen.
Als für eingeschränkte Netzwerke optimiert kennzeichnen
Wenn Sie Ihre App als für eingeschränkte Netzwerke optimiert kennzeichnen und die Verwendung dieser Netzwerke aktivieren möchten, aktualisieren Sie die App-Manifestdatei mit einem <meta-data>-Element wie folgt:
<meta-data android:name="android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"
android:value="PACKAGE_NAME" />
Mit diesem Element kann Ihre App ein eingeschränktes Satellitennetzwerk verwenden, wenn es das einzige verfügbare Netzwerk ist. Außerdem wird das System darüber informiert, dass Ihre App für eingeschränkte Netzwerke optimiert ist. Dies erleichtert Nutzern das Auffinden Ihrer App, da sie in der Einstellungs-App unter den für Satelliten optimierten Apps aufgeführt wird.
Verhalten bei eingeschränkten Daten ändern
Wenn Sie das Verhalten Ihrer App bei Verwendung eines eingeschränkten Netzwerks ändern müssen oder Ihre App bereits Logik verwendet, die ConnectivityManager zur Verwaltung der Netzwerknutzung verwendet, müssen Sie einige Änderungen an Ihrem Netzwerkablauf vornehmen.
Bedingungen für eingeschränkte Daten erkennen
Das für Netzwerkanfragen verwendete NetworkCapabilities-Objekt enthält das Bit NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED, das standardmäßig für alle Netzwerke festgelegt und für Netzwerke mit Bandbreitenbeschränkung entfernt wird. Ob ein Netzwerk bandbreitenbeschränkt ist, können Sie daran erkennen, ob es die Funktion NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED hat.
Mit eingeschränkten Netzwerken arbeiten
NetworkRequest-Objekte enthalten standardmäßig auch die NET_CAPABILITY_NOT_BANDWIDTH_CONSTRAINED-Funktion. Entfernen Sie diese Funktion, um anzugeben, dass eingeschränkte Netzwerke akzeptabel sind.
Wenn Sie feststellen, dass Sie mit einem eingeschränkten Netzwerk verbunden sind, können Sie die Funktionen Ihrer App nach Bedarf anpassen:
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-Nachrichten in eingeschränkten Netzwerken empfangen
Wenn Ihre App Firebase Cloud Messaging (FCM) verwendet, um Nachrichten von einem App-Server zu empfangen, können Sie angeben, dass eine bestimmte Nachricht auch in eingeschränkten Netzwerken zugestellt werden soll. Dazu müssen Sie das Flag bandwidth_constrained_ok einfügen, wenn Sie die Nachricht an den FCM-Server übergeben:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
"android": {
"bandwidth_constrained_ok": true
}
}
}
Wenn eine Nachricht dieses Flag nicht enthält, wird sie vom FCM-Server nur zugestellt, wenn das Gerät über ein Netzwerk ohne Einschränkungen verbunden ist.