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