Usar o fatiamento de rede

O fracionamento de rede 5G permite que as operadoras ofereçam melhorias no desempenho da rede para casos de uso específicos. Este guia explica como um app pode usar o recurso de divisão de rede.

Este guia também aborda como acionar o fluxo de UX de upsell de fatiamento de rede nos casos em que uma compra é necessária antes que o app possa acessar a conexão premium.

Etapa 1: declarar intents de recursos premium

Para que a solicitação de um recurso de corte premium do app seja atendida, ele precisa declarar a intent para solicitar esse recurso no manifesto do app. Caso contrário, a solicitação de rede falhará, gerando uma SecurityException.

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

Uma declaração de capability no arquivo de manifesto tem esta 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 tem esta aparência:

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

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

Chame o método de API requestNetwork() para determinar se o recurso premium está disponível.

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 você cria um objeto NetworkRequest, o capability adicionado não é o mesmo que você transmite para as APIs TelephonyManager. A tabela a seguir mapeia as constantes da classe TelephonyManager para as constantes correspondentes em NetworkCapabilities.

Constante TelephonyManager Constante NetworkCapabilities
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

Etapa 3: se o recurso premium não estiver disponível, verifique a disponibilidade para compra

Chame o método de API isPremiumCapabilityAvailableForPurchase() para determinar se o recurso premium selecionado está disponível. Esse método retorna true se o recurso estiver disponível para compra do operador usando o fluxo de trabalho de notificação de 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;
}

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

Depois de confirmar que o recurso premium está disponível, o app precisa chamar purchasePremiumCapability() para iniciar o fluxo de notificação de upsell. Se o usuário ainda não tiver comprado o recurso especificado e todas as pré-condições forem atendidas, a plataforma vai mostrar uma notificação para informar que as opções de aumento de desempenho podem estar disponíveis na operadora. Se o usuário tocar na notificação, a plataforma vai abrir a visualização da Web da operadora para que o processo de compra continue.

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

O callback parameter transmitido para purchasePremiumCapability() retorna um código de resultado para a solicitaçã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 o app pode prosseguir para solicitar 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 elas.

Se a solicitação de compra falhar, o app poderá usar a rede padrão. Não há comportamento de fallback automático se a solicitação de fatia premium não puder ser cumprida.

Fluxo de UX para upsell de fatiamento

O fluxo de UX mostra ao usuário uma notificação que abre uma planilha da Web da operadora, onde ele pode concluir a compra.