Mit der 5G-Netzwerk-Slicing können Mobilfunkanbieter die Netzwerkleistung für bestimmte Anwendungsfälle steigern. In diesem Leitfaden wird erläutert, wie eine App den UX-Upselling-Upselling nach Netzwerksegmentierung auslösen und eine Premiumverbindung anfordern kann, wenn sich der Nutzer für den Kauf einer Verbindung entscheidet.
Intents für Premium-Funktionen deklarieren
Damit die Anfrage Ihrer App nach einer Netzwerkfunktion berücksichtigt werden kann, muss im App-Manifest Ihrer App die Absicht, diese Funktion anzufordern, deklariert werden.
Andernfalls schlägt die Netzwerkanfrage fehl und gibt SecurityException
aus.
Dazu muss Ihre Anwendung das Attribut PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
in der Datei AndroidManifest.xml
deklarieren und eine entsprechende XML-Ressourcendatei enthalten.
Eine Funktionsdeklaration in der Manifestdatei sieht so aus:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
Die entsprechende network_capabilities.xml
-Ressourcendatei sieht so aus:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Upselling-Vorgang für Netzwerksegmentierung auslösen
Dieses Codebeispiel zeigt, wie der Upselling-Ablauf ausgelöst und die gekaufte Premium-Funktion angefordert wird.
Context mContext;
Network mNetwork;
public void purchasePremiumCapability() {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
int capability = TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY;
if (tm.isPremiumCapabilityAvailableForPurchase(capability)) {
tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
@Override
public void accept(Integer result) {
Log.d("Purchase premium capability result: "
+ TelephonyManager.convertPurchaseResultToString(result));
switch (result) {
case /* success or already purchased */:
requestPremiumCapabilityNetwork();
break;
case /* temporary failure */:
// TODO: wait and retry
break;
case /* hard failure */:
// TODO: handle failure
break;
default:
Log.e("Unknown purchase result: " + result);
}
}
});
} else {
Log.e("Premium capability is not available for purchase.");
}
}
public void requestPremiumCapabilityNetwork() {
ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
NetworkRequest request = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY)
.build();
cm.requestNetwork(request, new NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.d("Application can now use the network with the premium capability.");
mNetwork = network;
}
@Override
public void onLost(Network network) {
Log.d("Premium capability network is no longer available.");
mNetwork = null;
// TODO: clean up anything relying on the premium capability network
}
});
}
In den folgenden Abschnitten werden die einzelnen Schritte ausführlicher beschrieben.
Schritt 1: Prüfen, ob die Premium-Funktion verfügbar ist
Rufen Sie die API-Methode isPremiumCapabilityAvailableForPurchase()
auf, um festzustellen, ob die ausgewählte Premiumfunktion verfügbar ist. Diese Methode gibt true
zurück, wenn die Funktion vom Mobilfunkanbieter über den Workflow für Upselling-Benachrichtigungen erworben werden kann.
Schritt 2: Benachrichtigung über Upselling starten
Nachdem bestätigt wurde, dass die Premiumfunktion verfügbar ist, sollte Ihre App purchasePremiumCapability()
aufrufen, um den Upselling-Benachrichtigungsablauf zu starten. Wenn der Nutzer die angegebene Funktion noch nicht erworben hat und alle Voraussetzungen erfüllt sind, zeigt die Plattform dem Nutzer eine Benachrichtigung an, um ihn darüber zu informieren, dass von seinem Mobilfunkanbieter Optionen zur Leistungsoptimierung verfügbar sein könnten. Wenn der Nutzer auf die Benachrichtigung tippt, öffnet die Plattform das WebView des Mobilfunkanbieters, damit der Kaufvorgang fortgesetzt werden kann.
Der an purchasePremiumCapability()
übergebene Callback parameter
gibt einen Ergebniscode für die Kaufanfrage zurück.
Die Ergebniscodes PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
und PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
stellen erfolgreiche Ergebnisse dar, bei denen Ihre App die ausgewählte Premiumfunktion anfordern kann.
Die Ergebniscodes in der folgenden Liste stehen für fehlgeschlagene Kaufanfragen. Weitere Informationen finden Sie in der API-Referenz.
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR
PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED
PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE
PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION
PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_FOREGROUND
PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP
PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT
PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED
Schritt 3: Gekaufte Premiumverbindung anfordern
Wenn die Upselling-Benachrichtigung einen erfolgreichen Code zurückgibt (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
oder PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), sollte Ihre App requestNetwork()
verwenden, um ein Netzwerk anzufordern, das die angeforderte Funktion erfüllt. Hinweis: Wenn Sie ein NetworkRequest
-Objekt erstellen, ist die hinzugefügte Funktion nicht dieselbe Funktion, die Sie in den vorherigen Schritten an die TelephonyManager
APIs übergeben haben.
In der folgenden Tabelle werden die Konstanten aus der TelephonyManager
-Klasse den entsprechenden Konstanten in NetworkCapabilities
zugeordnet.
TelephonyManager -Konstante |
NetworkCapabilities -Konstante |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Wenn die Kaufanfrage fehlschlägt, sollte die Anwendung stattdessen das Standardnetzwerk anfordern und verwenden. Wenn die Premium-Slice-Anfrage nicht erfüllt werden kann, gibt es kein automatisches Fallback-Verhalten.