Нарезка сети 5G дает операторам связи возможность повысить производительность сети для конкретных случаев использования. В этом руководстве объясняется, как приложение может запустить процесс UX-распродажи и запросить премиум-соединение, если пользователь решит его приобрести.
![UX-поток показывает пользователю уведомление, которое открывает веб-лист оператора связи, где он может совершить покупку.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=ru)
Объявить намерения о расширенных возможностях
Чтобы запрос вашего приложения на сетевую возможность был удовлетворен, ваше приложение должно объявить о своем намерении запросить эту возможность в манифесте приложения. В противном случае сетевой запрос не выдаст SecurityException
.
Для этого ваше приложение должно объявить свойство PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
в файле AndroidManifest.xml
и включить соответствующий файл ресурсов XML.
Объявление возможностей в файле манифеста выглядит следующим образом:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
Соответствующий файл ресурсов network_capabilities.xml
выглядит следующим образом:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Запустите поток дополнительных продаж сети
В этом примере кода показано, как запустить поток дополнительных продаж и запросить приобретенную премиальную возможность.
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
}
});
}
В следующих разделах шаги этого процесса описаны более подробно.
Шаг 1. Проверьте, доступны ли возможности премиум-класса.
Вызовите метод API isPremiumCapabilityAvailableForPurchase()
, чтобы определить, доступна ли выбранная премиум-возможность. Этот метод возвращает true
, если возможность доступна для приобретения у оператора связи с использованием рабочего процесса уведомления о дополнительных продажах.
Шаг 2. Запустите поток уведомлений о дополнительных продажах.
После подтверждения доступности премиум-возможностей ваше приложение должно вызвать purchasePremiumCapability()
чтобы инициировать поток уведомлений о дополнительных продажах. Если пользователь еще не приобрел указанную возможность и все предварительные условия выполнены, платформа показывает пользователю уведомление, сообщающее ему, что варианты повышения производительности могут быть доступны у его оператора связи. Если пользователь нажимает на уведомление, платформа открывает веб-просмотр оператора, чтобы можно было продолжить процесс покупки.
Обратный вызов parameter
, переданный в purchasePremiumCapability()
возвращает код результата для запроса на покупку.
Коды результатов PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
и PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
представляют собой успешные результаты, при которых ваше приложение может перейти к запросу выбранной расширенной возможности.
Коды результатов в следующем списке представляют собой неудачные запросы на покупку. Дополнительную информацию о них см. в справочнике по API.
-
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
Шаг 3. Запросите приобретенное премиум-соединение.
Если поток уведомлений о дополнительных продажах возвращает успешный код ( PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
или PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), ваше приложение должно использовать requestNetwork()
для запроса сети, удовлетворяющей запрошенным возможностям. Обратите внимание, что при создании объекта NetworkRequest
добавляемая вами возможность отличается от возможности, которую вы передаете API-интерфейсам TelephonyManager
на предыдущих шагах. В следующей таблице константы класса TelephonyManager
сопоставлены с соответствующими константами в NetworkCapabilities
.
Константа TelephonyManager | Константа NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY | NET_CAPABILITY_PRIORITIZE_LATENCY |
Если запрос на покупку не выполнен, ваше приложение должно вместо этого запросить и использовать сеть по умолчанию. Не существует автоматического резервного поведения, если запрос на премиум-срез не может быть выполнен.