Offrire all'utente un upsell per lo slicing della rete

Lo slicing della rete 5G offre consente di migliorare le prestazioni di rete per utilizzi specifici d'uso diversi. Questa guida spiega in che modo un'app può attivare l'esperienza utente per l'upsell di network slicing e richiedere una connessione premium se l'utente decide di acquistarne una.

Il flusso UX mostra all'utente una notifica che apre un operatore
       in cui potranno completare l'acquisto.
Figura 1. Un esempio del flusso UX di upsell.

Dichiara gli intent delle funzionalità premium

Per soddisfare la richiesta della tua app di funzionalità di rete, la tua app Deve dichiarare il proprio intent per richiedere questa funzionalità nel file manifest dell'app. In caso contrario, la richiesta di rete non riesce e restituisce un SecurityException.

Per farlo, la tua app deve dichiarare PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES nel file AndroidManifest.xml e includi un file XML corrispondente di risorse.

Una dichiarazione di capacità nel file manifest ha il seguente aspetto:

<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
          android:resource="@xml/network_capabilities" />

Il file di risorse network_capabilities.xml corrispondente ha il seguente aspetto:

<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>

Attivare il flusso di upsell della rete

Questo esempio di codice mostra come attivare il flusso di upsell e richiedere acquistato funzionalità premium.

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
        }
    });
}

Le seguenti sezioni descrivono i passaggi necessari in questo processo per dettaglio.

Passaggio 1: verifica se la funzionalità premium è disponibile

Chiama il isPremiumCapabilityAvailableForPurchase() Metodo API per determinare se la funzionalità premium selezionata è disponibile. Questo metodo restituisce true se la funzionalità è disponibile per l'acquisto dal corriere tramite l'upsell nel flusso di lavoro delle notifiche.

Passaggio 2: avvia il flusso di notifica di upsell

Dopo aver confermato che la funzionalità premium è disponibile, l'app dovrebbe chiamare purchasePremiumCapability() per avviare il flusso di notifica di upsell. Se l'utente non ha ancora effettuato acquisti la funzionalità specificata e tutte le condizioni preliminari siano soddisfatte, la piattaforma mostra all'utente una notifica per informarlo che le opzioni per il miglioramento delle prestazioni potrebbe essere disponibile presso il proprio operatore. Se l'utente tocca la notifica, apre la WebView dell'operatore per consentire il proseguimento della procedura di acquisto.

Il callback parameter passato a purchasePremiumCapability() restituisce un per la richiesta di acquisto.

I codici risultato PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS e PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED rappresentano i risultati positivi in cui l'app può procedere alla richiesta funzionalità premium selezionate.

I codici risultato nel seguente elenco rappresentano richieste di acquisto non riuscite. Consulta riferimento all'API per saperne di più.

Passaggio 3: richiedi la connessione premium acquistata

Se il flusso di notifica di upsell restituisce un codice riuscito (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS o PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED), l'app dovrebbe usare requestNetwork(): per richiedere una rete che soddisfi la funzionalità richiesta. Tieni presente che quando creare un oggetto NetworkRequest, la funzionalità aggiunta non è la stessa funzionalità che passi alle API TelephonyManager nei passaggi precedenti. La tabella seguente mappa le costanti dalla classe TelephonyManager alla costanti corrispondenti in NetworkCapabilities.

costante di TelephonyManager costante di NetworkCapabilities
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

Se la richiesta di acquisto non va a buon fine, l'app dovrebbe richiedere e utilizzare il valore predefinito sulla tua rete on-premise. Non esiste un comportamento di riserva automatico se la sezione premium la richiesta non può essere soddisfatta.