Tính năng cắt lát mạng 5G cho phép nhà mạng có thể tăng hiệu suất mạng cho các trường hợp sử dụng cụ thể. Hướng dẫn này giải thích cách ứng dụng có thể kích hoạt quy trình trải nghiệm người dùng bán thêm tính năng chia nhỏ mạng và yêu cầu kết nối cao cấp nếu người dùng quyết định mua kết nối.
![Quy trình trải nghiệm người dùng cho người dùng thấy một thông báo mở ra trang web của nhà mạng để họ có thể hoàn tất giao dịch mua.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=5&hl=vi)
Khai báo ý định của chức năng cao cấp
Để chấp nhận yêu cầu của ứng dụng về một chức năng mạng, ứng dụng phải khai báo ý định để yêu cầu chức năng đó trong tệp kê khai ứng dụng.
Nếu không, yêu cầu mạng sẽ không gửi được SecurityException
.
Để thực hiện việc này, ứng dụng của bạn phải khai báo thuộc tính PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
trong tệp AndroidManifest.xml
và bao gồm tệp tài nguyên XML tương ứng.
Nội dung khai báo chức năng trong tệp kê khai sẽ có dạng như sau:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
Tệp tài nguyên network_capabilities.xml
tương ứng sẽ có dạng như sau:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Kích hoạt quy trình bán thêm tính năng chia nhỏ mạng
Ví dụ về mã này minh hoạ cách kích hoạt quy trình bán thêm và yêu cầu người dùng mua tính năng đặc biệt.
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
}
});
}
Các phần sau đây mô tả chi tiết hơn về các bước trong quy trình này.
Bước 1: Xác minh xem có tính năng cao cấp hay không
Gọi phương thức API isPremiumCapabilityAvailableForPurchase()
để xác định xem có tính năng cao cấp đã chọn hay không. Phương thức này sẽ trả về true
nếu nhà mạng có thể mua chức năng bằng cách sử dụng quy trình thông báo
bán thêm.
Bước 2: Bắt đầu quy trình thông báo về hoạt động bán thêm
Sau khi xác nhận rằng tính năng nâng cao đã được cung cấp, ứng dụng của bạn nên gọi purchasePremiumCapability()
để bắt đầu quy trình thông báo bán thêm. Nếu người dùng chưa mua tính năng đã chỉ định và đáp ứng tất cả các điều kiện tiên quyết, thì nền tảng sẽ hiển thị cho người dùng thông báo để biết rằng nhà mạng có thể cung cấp các tuỳ chọn tăng hiệu suất từ nhà mạng của họ. Nếu người dùng nhấn vào thông báo đó, nền tảng sẽ mở webview của nhà mạng để quy trình mua có thể tiếp tục.
Lệnh gọi lại parameter
được truyền đến purchasePremiumCapability()
sẽ trả về mã kết quả cho yêu cầu mua hàng.
Mã kết quả PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
và PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
đại diện cho những kết quả thành công, trong đó ứng dụng của bạn có thể tiến hành yêu cầu tính năng cao cấp đã chọn.
Mã kết quả trong danh sách sau đại diện cho các yêu cầu mua hàng không thành công. Hãy xem tài liệu tham khảo API để tìm hiểu thêm về các API này.
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
Bước 3: Yêu cầu kết nối cao cấp đã mua
Nếu quy trình thông báo bán thêm trả về một mã thành công (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
hoặc PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), ứng dụng của bạn nên sử dụng requestNetwork()
để yêu cầu một mạng đáp ứng khả năng được yêu cầu. Xin lưu ý rằng khi tạo đối tượng NetworkRequest
, tính năng mà bạn thêm vào sẽ không giống với khả năng mà bạn truyền đến các API TelephonyManager
trong các bước trước đó.
Bảng sau đây liên kết các hằng số từ lớp TelephonyManager
tới
các hằng số tương ứng trong NetworkCapabilities
.
Hằng số TelephonyManager |
Hằng số NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Nếu yêu cầu mua hàng không thành công, ứng dụng của bạn sẽ yêu cầu và sử dụng mạng mặc định. Không có hành vi dự phòng tự động nếu không thể thực hiện yêu cầu lát cắt cao cấp.