การแบ่งเครือข่าย 5G มอบ ผู้ให้บริการสามารถเพิ่มประสิทธิภาพเครือข่ายสำหรับการใช้งานที่เฉพาะเจาะจง กรณี คำแนะนำนี้จะอธิบายวิธีที่แอปทริกเกอร์ UX การขายอัปเซลเครือข่าย และขอการเชื่อมต่อแบบพรีเมียมในกรณีที่ผู้ใช้ตัดสินใจซื้อ
ประกาศ Intent ด้านความสามารถระดับพรีเมียม
หากต้องการให้แอปทำตามความสามารถด้านเครือข่ายของแอป แอปของคุณ
ต้องประกาศเจตนาขอความสามารถดังกล่าวในไฟล์ Manifest ของแอป
มิฉะนั้น คำขอเครือข่ายจะส่ง SecurityException
ไม่สำเร็จ
ในการดำเนินการนี้ แอปของคุณต้องประกาศ
PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
ในไฟล์ AndroidManifest.xml
และรวม XML ที่เกี่ยวข้องไว้
ไฟล์ทรัพยากร
การประกาศความสามารถในไฟล์ Manifest มีลักษณะดังนี้
<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 ของผู้ให้บริการเพื่อให้ขั้นตอนการซื้อสามารถดำเนินต่อไปได้
Callback parameter
ที่ส่งไปยัง purchasePremiumCapability()
แสดงผล
รหัสผลลัพธ์สำหรับคำขอซื้อ
รหัสผลลัพธ์
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
ขั้นตอนที่ 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 |
หากคำขอซื้อไม่สำเร็จ แอปควรขอและใช้ค่าเริ่มต้น เครือข่ายแทน ไม่มีการทำงานสำรองอัตโนมัติถ้าส่วนแบ่งพรีเมียม ไม่สามารถดำเนินการตามคำขอ