Cung cấp cho người dùng hình thức bán thêm dưới dạng cắt lát mạng

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.
Hình 1. Ví dụ về quy trình trải nghiệm người dùng bán thêm.

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_SUCCESSPURCHASE_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.

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.