ユーザーにネットワーク スライスのアップセルを提案

5G ネットワーク スライシングにより、 特定の用途でネットワーク パフォーマンスを向上させて 対応できますこのガイドでは、アプリがネットワーク スライシング アップセルの UX をトリガーする方法について説明します フローし、ユーザーが購入を決定した場合にプレミアム接続をリクエストします。

UX フローで携帯通信会社を開く通知がユーザーに表示される
       ウェブシートから購入を完了できます。
図 1. アップセルの UX フローの例。

プレミアム機能のインテントを宣言する

ネットワーク機能に関するアプリのリクエストに対応するには、 アプリ マニフェストでその機能をリクエストするインテントを宣言する必要があります。 それ以外の場合、ネットワーク リクエストは 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: プレミアム機能が利用可能かどうかを確認する

呼び出し isPremiumCapabilityAvailableForPurchase() API メソッドを使用して 利用可能かどうかを表します。このメソッドは true を返します。 アップセルを使用して携帯通信会社から機能を購入できるかどうか。 通知ワークフローに進みます

ステップ 2: アップセル通知フローを開始する

プレミアム機能が利用できることを確認したら、アプリは purchasePremiumCapability() アップセル通知フローを開始します。ユーザーがまだ購入していない場合 すべての前提条件が満たされている場合、プラットフォームは パフォーマンス ブースト オプションを知らせる通知がユーザーに表示されます 利用できる場合があります。ユーザーが通知をタップすると、 購入プロセスを続行できるように、携帯通信会社の WebView が開きます。

purchasePremiumCapability() に渡される parameter コールバックは、 購入リクエストの結果コードを返します

結果コード PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS および PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED 成功した場合は、アプリがリクエスト プレミアム機能に限られます。

以下の結果コードは、失敗した購入リクエストを表します。詳しくは、 API リファレンスで 詳細をご確認ください

ステップ 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

購入リクエストが失敗した場合、アプリはデフォルトのリクエストを使用し、それを使用する必要があります。 ネットワークを使用してください。プレミアム スライスが新しいスライスの場合は、 処理できません。