Dem Nutzer ein Upselling nach Netzwerksegment anbieten

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.

Der UX-Flow zeigt dem Nutzer eine Benachrichtigung, über die ein Webblatt für den Mobilfunkanbieter geöffnet wird, auf dem er den Kauf abschließen kann.
Abbildung 1: Ein Beispiel für den UX-Upselling-Flow

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.

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.