Utilizzare il slicing della rete

Lo slicing della rete 5G consente agli operatori di offrire un aumento delle prestazioni della rete per casi d'uso specifici. Questa guida spiega come un'app può utilizzare la funzionalità di slicing della rete.

Questa guida illustra anche come attivare il flusso di UX upsell per la suddivisione della rete nei casi in cui è necessario un acquisto prima che l'app possa accedere alla connessione premium.

Passaggio 1: dichiara le intenzioni delle funzionalità premium

Affinché la richiesta di una funzionalità di slicing premium da parte della tua app venga soddisfatta, la tua app deve dichiarare la sua intenzione di richiedere questa funzionalità nel file manifest dell'app. In caso contrario, la richiesta di rete non va a buon fine e viene generato un errore SecurityException.

Per farlo, 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 delle 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 della 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>

Passaggio 2: verifica se la funzionalità premium è disponibile

Chiama il metodo API requestNetwork() per determinare se la funzionalità premium è disponibile.

Context mContext;
Network mNetwork;

public void requestPremiumCapabilityNetwork(@NetCapability int capability) {
    ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
    NetworkRequest request = NetworkRequest.Builder()
            .addCapability(capability)
            .build();
    cm.requestNetwork(request, new NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            log("Premium capability %d network is available.", capability);
            mNetwork = network;
        }

        @Override
        public void onLost(Network network) {
            log("Premium capability %d network is not available.", capability);
            mNetwork = null;
        }
    });
}

Quando crei un oggetto NetworkRequest, la funzionalità che aggiungi non è la stessa che passi alle API TelephonyManager. La tabella seguente mappa le costanti della classe TelephonyManager alle costanti corrispondenti in NetworkCapabilities.

Costante TelephonyManager Costante NetworkCapabilities
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

Passaggio 3: se la funzionalità premium non è disponibile, controlla la disponibilità per l'acquisto

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

Context mContext;

public boolean isPremiumCapabilityAvailableForPurchase(@PremiumCapability int capability) {
    TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
    boolean isAvailable = tm.isPremiumCapabilityAvailableForPurchase(capability);
    log("Premium capability %d %s available to purchase.",
            capability,
            isAvailable ? "is" : "is not");
    return isAvailable;
}

Passaggio 4: avvia il flusso di notifiche di upsell

Dopo aver verificato che la funzionalità premium è disponibile, l'app deve chiamare purchasePremiumCapability() per avviare il flusso di notifica di upsell. Se l'utente non ha già acquistato la funzionalità specificata e tutti i prerequisiti sono soddisfatti, la piattaforma mostra all'utente una notifica per informarlo che le opzioni di miglioramento delle prestazioni potrebbero essere disponibili presso il suo operatore. Se l'utente tocca la notifica, la piattaforma apre la webview dell'operatore in modo che la procedura di acquisto possa continuare.

Context mContext;

public void purchasePremiumCapability(@PremiumCapability int capability) {
    TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
    tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
        @Override
        public void accept(Integer result) {
            log("Purchase premium capability %d result: %d", capability, result);
            int purchaseResult = result;
        }
    });
}

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

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

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

Se la richiesta di acquisto non va a buon fine, la tua app potrebbe utilizzare la rete predefinita. Non è previsto alcun comportamento di riserva automatico se la richiesta di un segmento premium non può essere soddisfatta.

Flusso UX per l'upsell con suddivisione

Il flusso UX mostra all&#39;utente una notifica che apre un foglio web
       dell&#39;operatore in cui può completare l&#39;acquisto.