5G ネットワーク スライシングにより、携帯通信会社は特定のユースケースでネットワーク パフォーマンスを向上させることができます。このガイドでは、アプリでネットワーク スライス機能を使用できる方法について説明します。
このガイドでは、アプリがプレミアム接続にアクセスする前に購入が必要な場合に、ネットワーク スライス アップセル UX フローをトリガーする方法についても説明します。
ステップ 1: プレミアム機能のインテントを宣言する
アプリのプレミアム スライス機能のリクエストが承認されるようにするには、アプリのマニフェストで、その機能をリクエストするインテントを宣言する必要があります。それ以外の場合、ネットワーク リクエストは失敗し、SecurityException
をスローします。
これを行うには、アプリで AndroidManifest.xml
ファイルに PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
プロパティを宣言し、対応する 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>
ステップ 2: プレミアム機能が利用可能かどうかを確認する
requestNetwork()
API メソッドを呼び出して、プレミアム機能が使用可能かどうかを判断します。
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;
}
});
}
NetworkRequest
オブジェクトを作成するときに追加する機能は、TelephonyManager
API に渡す機能とは異なります。次の表に、TelephonyManager
クラスの定数と、NetworkCapabilities
の対応する定数を示します。
TelephonyManager 定数 |
NetworkCapabilities 定数 |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
ステップ 3: プレミアム機能が利用できない場合は、購入の可否を確認する
API メソッド isPremiumCapabilityAvailableForPurchase()
を呼び出して、選択したプレミアム機能が使用可能かどうかを判断します。アップセル通知ワークフローを使用して携帯通信会社から購入できる機能の場合は、このメソッドは true
を返します。
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;
}
ステップ 4: アップセル通知フローを開始する
プレミアム機能が利用可能であることを確認したら、アプリは purchasePremiumCapability()
を呼び出してアップセル通知フローを開始する必要があります。ユーザーが指定された機能をまだ購入しておらず、すべての前提条件が満たされている場合、プラットフォームは、携帯通信会社からパフォーマンス ブースト オプションを利用できる可能性があることをユーザーに通知します。ユーザーが通知をタップすると、プラットフォームが携帯通信会社のウェブビューを開き、購入プロセスを続行できるようにします。
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;
}
});
}
purchasePremiumCapability()
に渡された parameter
コールバックは、購入リクエストの結果コードを返します。
結果コード 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
購入リクエストが失敗した場合、アプリは代わりにデフォルト ネットワークを使用することがあります。プレミアム スライス リクエストを満たすことができない場合、自動フォールバック動作はありません。