Offrire all'utente un upsell per lo slicing della rete

Lo slicing della rete 5G consente agli operatori di offrire aumenti delle prestazioni della rete per casi d'uso specifici. Questa guida spiega in che modo un'app può attivare il flusso di UX di upsell della rete e richiedere una connessione premium se l'utente decide di acquistarne una.

Il flusso UX mostra all'utente una notifica che apre un foglio web dell'operatore in cui può completare l'acquisto.
Figura 1. Esempio di flusso UX di upsell.

Dichiara gli intent delle funzionalità premium

Per soddisfare la richiesta dell'app relativa a una funzionalità di rete, l'app deve dichiarare l'intenzione di richiedere questa funzionalità nel file manifest dell'app. In caso contrario, la richiesta di rete non riesce generando un valore SecurityException.

A questo scopo, l'app deve dichiarare la proprietà PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES nel file AndroidManifest.xml e includere un file di risorse XML corrispondente.

Una dichiarazione della funzionalità 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 risorsa 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>

Attiva il flusso di upsell di slicing della rete

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

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 in modo più dettagliato i passaggi necessari in questo processo.

Passaggio 1: verifica la disponibilità della funzionalità premium

Chiama il metodo API isPremiumCapabilityAvailableForPurchase() per determinare se la funzionalità premium selezionata è disponibile. Questo metodo restituisce true se la funzionalità è disponibile per l'acquisto dal corriere utilizzando il flusso di lavoro della notifica di upsell.

Passaggio 2: avvia il flusso di notifica di upsell

Dopo aver confermato che le funzionalità premium sono disponibili, la tua app deve chiamare purchasePremiumCapability() per avviare il flusso di notifica di upsell. Se l'utente non ha già acquistato la funzionalità specificata e tutte le condizioni preliminari sono soddisfatte, la piattaforma mostra all'utente una notifica per informarlo che potrebbero essere disponibili opzioni di miglioramento delle prestazioni offerte dall'operatore. Se l'utente tocca la notifica, la piattaforma apre la WebView dell'operatore per continuare la procedura di acquisto.

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

I codici risultato PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS e PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED rappresentano risultati riusciti in cui la tua app può procedere alla richiesta della funzionalità premium selezionata.

I codici risultato nel seguente elenco rappresentano richieste di acquisto non riuscite. Per saperne di più, consulta la documentazione di riferimento sulle API.

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), la tua app deve utilizzare requestNetwork() per richiedere una rete che soddisfi la funzionalità richiesta. Tieni presente che, quando crei un oggetto NetworkRequest, la funzionalità che aggiungi non è la stessa che passi alle API TelephonyManager nei passaggi precedenti. La seguente tabella mappa le costanti della classe TelephonyManager alle costanti corrispondenti in NetworkCapabilities.

costante TelephonyManager costante 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 la rete predefinita. Non esiste un comportamento di riserva automatico se non è possibile soddisfare la richiesta della sezione premium.