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

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.
Figure 1. Exemple de flux UX de vente incitative

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.

É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.