Tính năng cắt mạng 5G giúp nhà mạng có thể cung cấp mức tăng hiệu suất mạng cho từng mục đích sử dụng cụ thể trường hợp. Hướng dẫn này giải thích cách một ứng dụng có thể kích hoạt trải nghiệm người dùng bán thêm và chia nhỏ mạng và yêu cầu một kết nối đặc biệt nếu người dùng quyết định mua một gói thuê bao.
![Luồng trải nghiệm người dùng cho người dùng thấy một thông báo mở ra một nhà mạng
trang web mà họ có thể hoàn tất giao dịch mua.](https://developer.android.google.cn/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=19&hl=vi)
Khai báo ý định cho chức năng nâng cao
Để yêu cầu của ứng dụng về khả năng kết nối mạng được chấp nhận,
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
PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
vào tệp AndroidManifest.xml
và thêm một XML tương ứng
tệp tài nguyên.
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 và 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 đã mua chức năng nâng cao.
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ả các bước trong quy trình này một cách chi tiết hơn chi tiết hơn.
Bước 1: Xác minh xem bạn có dùng được tính năng nâng cao hay không
Gọi
isPremiumCapabilityAvailableForPurchase()
Phương thức API để xác định
xem có chức năng nâng cao đã chọn hay không. Phương thức này trả về true
nếu nhà cung cấp có thể mua khả năng này bằng cách sử dụng phương thức bán thêm
quy trình thông báo.
Bước 2: Bắt đầu luồng thông báo bán thêm
Sau khi xác nhận rằng ứng dụng của bạn đã dùng được tính năng nâng cao,
purchasePremiumCapability()
để bắt đầu quy trình thông báo bán thêm. Nếu người dùng chưa mua
khả năng đã chỉ định và tất cả các điều kiện tiên quyết được đáp ứng, thì nền tảng
hiển thị cho người dùng thông báo để họ biết rằng các tuỳ chọn tăng hiệu suất
có thể được cung cấp 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ở chế độ xem web 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ột giá trị
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ến hành yêu cầu
đã chọn chức năng nâng cao.
Các mã kết quả trong danh sách sau đây thể hiện các yêu cầu mua hàng không thành công. Xem tài liệu tham khảo API để tìm hiểu thêm về chúng.
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 sẽ sử dụng
requestNetwork()
để yêu cầu một mạng đáp ứng khả năng được yêu cầu. Lưu ý rằng khi bạn
tạo một đối tượng NetworkRequest
, thì chức năng mà bạn thêm không giống nhau
mà bạn truyền tới API TelephonyManager
ở các bước trước đó.
Bảng sau đây liên kết các hằng số từ lớp TelephonyManager
đến
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 giá trị mặc định mạng thay thế. Không có hành vi dự phòng tự động nếu lát cắt cao cấp Không thể thực hiện yêu cầu.