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

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.