Tính năng phân đoạn mạng 5G giú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 một ứng dụng có thể sử dụng tính năng phân đoạn mạng.
Hướng dẫn này cũng trình bày cách kích hoạt luồng trải nghiệm người dùng bán thêm khi phân đoạn mạng trong trường hợp người dùng phải mua trước khi ứng dụng có thể truy cập vào kết nối cao cấp.
Bước 1: Khai báo ý định về tính năng nâng cao
Để yêu cầu của ứng dụng về tính năng cắt cao cấp được chấp nhận, ứng dụng phải khai báo ý định yêu cầu tính năng đó trong tệp kê khai ứng dụng.
Nếu không, yêu cầu mạng sẽ không thành công và gửi một 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à đưa vào một 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 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 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>
Bước 2: Xác minh xem bạn có thể sử dụng tính năng nâng cao hay không
Gọi phương thức API requestNetwork()
để xác định xem có thể sử dụng tính năng nâng cao hay không.
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;
}
});
}
Khi bạn tạo một đối tượng NetworkRequest
, chức năng mà bạn thêm vào không giống với chức năng mà bạn truyền vào các API TelephonyManager
.
Bảng sau đây ánh xạ các hằng số từ lớp TelephonyManager
đến 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 |
Bước 3: Nếu không có tính năng nâng cao, hãy kiểm tra xem bạn có thể mua hay không
Gọi phương thức API isPremiumCapabilityAvailableForPurchase()
để xác định xem tính năng cao cấp đã chọn có hoạt động hay không.
Phương thức này trả về true
nếu người dùng có thể mua tính năng này từ nhà mạng bằng quy trình thông báo bán thêm.
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;
}
Bước 4: Bắt đầu luồng thông báo bán thêm
Sau khi xác nhận rằng tính năng cao cấp có sẵn, ứng dụng của bạn sẽ 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à tất cả các điều kiện tiên quyết đều được đáp ứng, thì nền tảng sẽ hiển thị cho người dùng một thông báo để cho họ biết rằng nhà mạng có thể cung cấp các lựa chọn tăng hiệu suất. 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 để tiếp tục quy trình mua.
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;
}
});
}
Lệnh gọi lại parameter
được chuyển đến purchasePremiumCapability()
sẽ trả về một 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
thể hiện kết quả thành công, trong đó ứng dụng của bạn có thể tiếp tục yêu cầu tính năng cao cấp đã chọn.
Các mã kết quả trong danh sách sau đây thể hiện các yêu cầu mua 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
Nếu yêu cầu mua không thành công, ứng dụng của bạn có thể 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.
Quy trình trải nghiệm người dùng để phân chia nội dung bán thêm
![Quy trình trải nghiệm người dùng hiển thị cho người dùng một thông báo mở ra trang tính 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?hl=vi)