5G 網路切片 電信業者可以針對特定用途提供提升網路效能 用途本指南說明應用程式如何觸發網路區隔向上銷售使用者體驗 並要求付費連線
宣告付費功能意圖
為了讓應用程式請求提供網路功能,您的應用程式
必須在應用程式資訊清單中宣告其意圖,才能要求該功能。
否則網路要求會失敗,擲回 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
。
表示應用程式可以繼續要求
所選進階功能
下列清單中的結果代碼代表購買要求失敗。詳情請見 。
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
物件,您新增的功能「不」相同
您在先前步驟中傳遞至 TelephonyManager
API 的功能。
下表將 TelephonyManager
類別的常數對應至
與 NetworkCapabilities
中的對應常數
TelephonyManager 常數 |
NetworkCapabilities 常數 |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
如果購買要求失敗,應用程式應提出要求並使用預設值 網路。如果是高級部分,就不會自動備用行為 則無法完成要求