為使用者提供網路區隔向上銷售

5G 網路切片 電信業者可以針對特定用途提供提升網路效能 用途本指南說明應用程式如何觸發網路區隔向上銷售使用者體驗 並要求付費連線

使用者體驗流程會顯示通知,藉此開啟電信業者。
       可完成購買交易的網頁單。
圖 1. 向上銷售使用者體驗流程示例。

宣告付費功能意圖

為了讓應用程式請求提供網路功能,您的應用程式 必須在應用程式資訊清單中宣告其意圖,才能要求該功能。 否則網路要求會失敗,擲回 SecurityException

此時,您的應用程式必須在宣告 PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES敬上 屬性,並包含相應的 XML 檔案AndroidManifest.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。 表示應用程式可以繼續要求 所選進階功能

下列清單中的結果代碼代表購買要求失敗。詳情請見 。

步驟 3:要求購買的付費連線

如果向上銷售通知流程傳回成功代碼 (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESSPURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED),您的應用程式應使用 requestNetwork()敬上 要求網路來滿足要求的功能請注意, 建構 NetworkRequest 物件,您新增的功能「不」相同 您在先前步驟中傳遞至 TelephonyManager API 的功能。 下表將 TelephonyManager 類別的常數對應至 與 NetworkCapabilities 中的對應常數

TelephonyManager 常數 NetworkCapabilities 常數
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

如果購買要求失敗,應用程式應提出要求並使用預設值 網路。如果是高級部分,就不會自動備用行為 則無法完成要求