Proposer à l'utilisateur une vente incitative segmentant le réseau

Le segmentation réseau 5G offre la possibilité d'améliorer les performances du réseau pour des usages spécifiques cas d'utilisation. Ce guide explique comment une application peut déclencher l'expérience utilisateur de vente incitative de segmentation du réseau et demander une connexion premium si l'utilisateur décide d'en acheter une.

Le flux d'expérience utilisateur montre à l'utilisateur une notification qui ouvre un opérateur
       pour finaliser l'achat.
Figure 1. Exemple de flux UX de vente incitative.

Déclarer des intents de capacité premium

Pour que la demande de capacité réseau de votre application soit respectée, doit déclarer son intention pour demander cette fonctionnalité dans le fichier manifeste de l'application. Sinon, la requête réseau échoue et génère une erreur SecurityException.

Pour ce faire, votre application doit déclarer PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES dans le fichier AndroidManifest.xml et inclure le code XML correspondant fichier de ressources.

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 de tranchage du réseau

Cet exemple de code montre comment déclencher le flux de vente incitative et demander le les fonctionnalités premium achetées.

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 de façon plus détaillée dans les moindres détails.

Étape 1: Vérifiez si la fonctionnalité Premium est disponible

Appelez la méthode isPremiumCapabilityAvailableForPurchase() méthode API pour déterminer si la fonctionnalité Premium sélectionnée est disponible. Cette méthode renvoie true si la fonctionnalité est disponible à l'achat auprès de l'opérateur via la vente incitative ; le workflow de notification.

É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 capacité spécifiée et toutes les conditions préalables remplies, la plate-forme affiche une notification pour l'informer que les options d'amélioration des performances peuvent être disponibles auprès de leur opérateur. Si l'utilisateur appuie sur la notification, ouvre la WebView de l'opérateur afin que le processus d'achat puisse se poursuivre.

Le rappel parameter transmis à purchasePremiumCapability() renvoie une code de résultat de la demande d'achat.

Les codes de résultat PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS et PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED présentent des résultats positifs, pour lesquels votre application peut demander certaines fonctionnalités premium.

Les codes de résultat dans la liste suivante représentent des demandes d'achat ayant échoué. Voir consultez la documentation de référence de l'API pour en savoir plus.

Étape 3: Demandez la connexion premium achetée

Si le flux de notification de vente incitative renvoie un code de réussite (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éer un objet NetworkRequest, la capacité que vous ajoutez n'est pas la même que vous transmettez aux API TelephonyManager lors des étapes précédentes. Le tableau suivant mappe les constantes de la classe TelephonyManager avec les 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 la valeur réseau à la place. Il n'y a pas de comportement de remplacement automatique si le segment Premium ne peut pas être satisfaite.