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.
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.
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
), 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.