Ofereça ao usuário um upsell de fração de rede

O fracionamento de rede 5G oferece às operadoras a capacidade de otimizar o desempenho da rede para usos específicos casos de uso diferentes. Este guia explica como um app pode acionar a UX de upsell do fracionamento de rede fluxo e solicitar uma conexão premium se o usuário decidir comprar uma.

O fluxo de UX mostra ao usuário uma notificação que abre uma operadora
       na planilha da Web em que é possível concluir a compra.
Figura 1. Um exemplo do fluxo de UX de upsell.

Declarar intents de recurso premium

Para que a solicitação de recurso de rede do seu app seja atendida, precisa declarar a intenção de solicitar essa capacidade no manifesto do app. Caso contrário, a solicitação de rede não vai gerar uma SecurityException.

Para fazer isso, seu app precisa declarar a PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES no arquivo AndroidManifest.xml e inclua um XML correspondente arquivo de recurso.

Uma declaração de capacidade no arquivo de manifesto tem a seguinte aparência:

<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
          android:resource="@xml/network_capabilities" />

O arquivo de recurso network_capabilities.xml correspondente vai ficar assim:

<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>

Acionar o fluxo de upsell do fracionamento de rede

Este exemplo de código demonstra como acionar o fluxo de upsell e solicitar o a capacidade premium adquirida.

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
        }
    });
}

As seções a seguir descrevem as etapas envolvidas nesse processo em uma maior detalhes.

Etapa 1: verificar se o recurso premium está disponível

Chame o método isPremiumCapabilityAvailableForPurchase() Método de API para determinar se o recurso premium selecionado está disponível. Esse método retorna true. se a capacidade está disponível para compra junto à operadora usando o upsell fluxo de trabalho de notificação.

Etapa 2: iniciar o fluxo de notificação de upsell

Depois de confirmar que a funcionalidade premium está disponível, seu aplicativo deve chamar purchasePremiumCapability() para iniciar o fluxo de notificação de upsell. Se o usuário ainda não tiver comprado a capacidade especificada e todas as condições prévias forem atendidas, então a plataforma mostra ao usuário uma notificação informando que as opções para melhorar o desempenho podem estar disponíveis junto à operadora. Se o usuário tocar na notificação, o plataforma abre o WebView da operadora para que o processo de compra possa continuar.

O callback parameter transmitido para purchasePremiumCapability() retorna uma código de resultado para o pedido de aprovação de compra.

Os códigos de resultado PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS e PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED representam resultados bem-sucedidos em que seu aplicativo pode prosseguir com a solicitação do o recurso premium selecionado.

Os códigos de resultado na lista a seguir representam solicitações de compra com falha. Consulte a referência da API para saber mais sobre eles.

Etapa 3: solicitar a conexão premium adquirida

Se o fluxo de notificação de upsell retornar um código (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS ou PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED), o app precisa usar requestNetwork() para solicitar uma rede que satisfaça a capacidade solicitada. Quando você criar um objeto NetworkRequest, o recurso que você adicionar não será o mesmo. que você transmitiu para as APIs TelephonyManager nas etapas anteriores. A tabela a seguir mapeia as constantes da classe TelephonyManager para o constantes correspondentes em NetworkCapabilities.

Constante TelephonyManager Constante NetworkCapabilities
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

Se o pedido de aprovação de compra falhar, o app precisará solicitar e usar o padrão usando a mesma rede. Não há comportamento de substituto automático se a fração premium solicitação não pode ser atendida.