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.
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
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.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=pt-br)