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.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=9&hl=it)
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ù.
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
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.