La segmentación de red 5G a los proveedores la capacidad de proporcionar mejoras en el rendimiento de la red para usos diferentes. En esta guía, se explica cómo una app puede activar la UX de venta incremental de segmentación de red y solicitar una conexión premium si el usuario decide comprar una.
![El flujo de UX muestra al usuario una notificación que abre un operador
web en la que podrá completar la compra.](https://developer.android.google.cn/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=19&hl=es)
Declara intents de capacidad premium
Para que se respete la solicitud de tu app de una capacidad de red, la app
debe declarar su intención de solicitar esa capacidad en el manifiesto de la app.
De lo contrario, la solicitud de red falla y arroja una SecurityException
.
Para ello, tu app debe declarar el
PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
en el archivo AndroidManifest.xml
e incluye el archivo XML correspondiente
archivo de recursos.
Una declaración de capacidad en el archivo de manifiesto se ve de la siguiente manera:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
El archivo de recursos network_capabilities.xml
correspondiente se ve de la siguiente manera:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Activa el flujo de venta incremental de segmentación de red
Este ejemplo de código demuestra cómo activar el flujo de venta incremental y solicitar el capacidad 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
}
});
}
En las siguientes secciones, se describen los pasos involucrados en este proceso de forma más en detalle.
Paso 1: Verifica si hay funciones premium disponibles
Llama al
isPremiumCapabilityAvailableForPurchase()
método de API para determinar
si está disponible la función premium seleccionada. Este método muestra true
.
si la empresa puede comprarla mediante la venta incremental
flujo de trabajo de notificaciones.
Paso 2: Inicia el flujo de notificación de venta incremental
Luego de confirmar que la función premium está disponible, tu app deberá llamar
purchasePremiumCapability()
para iniciar el flujo de notificación de venta incremental. Si el usuario aún no realizó una compra
se cumplen todas las condiciones previas y la capacidad especificada,
Muestra al usuario una notificación que le informa que las opciones de mejora del rendimiento.
podrían estar disponibles a través de su operador. Si el usuario presiona la notificación,
plataforma abre la vista web del operador para que el proceso de compra pueda continuar.
La devolución de llamada parameter
pasada a purchasePremiumCapability()
muestra un
el código de resultado de la solicitud de compra.
Los códigos de resultado
PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
y
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
representar resultados exitosos en los que tu app puede proceder a solicitar el
capacidad premium seleccionada.
Los códigos de resultado de la siguiente lista representan solicitudes de compra fallidas. Consulta la referencia de la API para obtener más información.
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
Paso 3: Solicita la conexión premium comprada
Si el flujo de notificación de venta incremental muestra un código correcto
(PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
o
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), tu app debería usar
requestNetwork()
para solicitar una red
que cumpla con la capacidad solicitada. Ten en cuenta que cuando
compilar un objeto NetworkRequest
, la capacidad que agregas no es la misma
que pasaste a las APIs de TelephonyManager
en los pasos anteriores.
En la siguiente tabla, se asignan las constantes de la clase TelephonyManager
al
las constantes correspondientes en NetworkCapabilities
.
TelephonyManager constante |
NetworkCapabilities constante |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Si la solicitud de compra falla, la app deberá solicitar y usar el red de VPC. No hay un comportamiento de resguardo automático si la porción premium la solicitud no se puede completar.