使用網路切片

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:如果無法使用付費功能,請確認是否可購買

呼叫 isPremiumCapabilityAvailableForPurchase() API 方法,判斷所選付費功能是否可用。如果使用升級通知工作流程,可透過電信業者購買這項功能,這個方法會傳回 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(),以啟動升級通知流程。如果使用者尚未購買指定功能,且所有先決條件都符合,平台就會向使用者顯示通知,告知他們可能可透過電信業者取得效能提升選項。如果使用者輕觸通知,平台會開啟電信業者的 WebView,讓購買程序繼續進行。

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_SUCCESSPURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED 代表成功結果,表示應用程式可以繼續要求所選的付費功能。

下列清單中的結果碼代表購買要求失敗。請參閱 API 參考資料,進一步瞭解這些屬性。

如果購買要求失敗,應用程式可能會改用預設網路。如果無法滿足高級切片要求,系統不會自動執行備用行為。

向上銷售切片的使用者體驗流程

使用者體驗流程會向使用者顯示通知,開啟運營商網頁,讓他們完成購買程序。