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ù.
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
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'utente una notifica che apre un foglio web
dell'operatore in cui può completare l'acquisto.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=it)