Le segmentation du réseau 5G permet aux opérateurs d'améliorer les performances du réseau pour des cas d'utilisation spécifiques. Ce guide explique comment une application peut déclencher le flux d'expérience utilisateur pour la vente incitative du segment de réseau et demander une connexion premium si l'utilisateur décide d'en acheter une.
![Le flux d'expérience utilisateur présente à l'utilisateur une notification qui ouvre une feuille Web d'opérateur où il peut finaliser l'achat.](https://developer.android.google.cn/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=8&hl=fr)
Déclarer des intents de fonctionnalités premium
Pour que la demande de fonctionnalité réseau de votre application soit honorée, elle doit déclarer son intent dans le fichier manifeste de l'application.
Sinon, la requête réseau ne génère pas une erreur SecurityException
.
Pour ce faire, votre application doit déclarer la propriété PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
dans le fichier AndroidManifest.xml
et inclure un fichier de ressources XML correspondant.
Une déclaration de capacité dans le fichier manifeste se présente comme suit:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
Le fichier de ressources network_capabilities.xml
correspondant se présente comme suit:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Déclencher le flux de vente incitative segmentant le réseau
Cet exemple de code montre comment déclencher le flux de vente incitative et demander la fonctionnalité premium achetée.
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
}
});
}
Les sections suivantes décrivent les étapes de ce processus plus en détail.
Étape 1: Vérifiez si la fonctionnalité premium est disponible
Appelez la méthode API isPremiumCapabilityAvailableForPurchase()
pour déterminer si la fonctionnalité premium sélectionnée est disponible. Cette méthode renvoie true
si la capacité est disponible à l'achat auprès de l'opérateur à l'aide du workflow de notification de vente incitative.
Étape 2: Lancez le flux de notification de vente incitative
Après avoir vérifié que la fonctionnalité premium est disponible, votre application doit appeler purchasePremiumCapability()
pour lancer le flux de notification de vente incitative. Si l'utilisateur n'a pas encore acheté la fonctionnalité spécifiée et que toutes les conditions préalables sont remplies, la plate-forme affiche une notification pour l'informer que son opérateur peut proposer des options d'amélioration des performances. Si l'utilisateur appuie sur la notification, la plate-forme ouvre la WebView de l'opérateur afin que le processus d'achat puisse se poursuivre.
Le rappel parameter
transmis à purchasePremiumCapability()
renvoie un code de résultat pour la requête d'achat.
Les codes de résultat PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
et PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
représentent des résultats réussis où votre application peut demander la fonctionnalité premium sélectionnée.
Les codes de résultat de la liste suivante représentent des demandes d'achat ayant échoué. Pour en savoir plus, consultez la documentation de référence de l'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
Étape 3: Demandez à bénéficier d'une connexion premium achetée
Si le flux de notification de vente incitative renvoie un code réussi (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
ou PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), votre application doit utiliser requestNetwork()
pour demander un réseau répondant à la capacité demandée. Notez que lorsque vous créez un objet NetworkRequest
, la capacité que vous ajoutez diffère de celle que vous transmettez aux API TelephonyManager
lors des étapes précédentes.
Le tableau suivant mappe les constantes de la classe TelephonyManager
aux constantes correspondantes dans NetworkCapabilities
.
Constante TelephonyManager |
Constante NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Si la demande d'achat échoue, votre application doit demander et utiliser le réseau par défaut à la place. Il n'y a pas de comportement de remplacement automatique si la demande de tranche premium ne peut pas être traitée.