Pemotongan jaringan 5G memberi operator kemampuan untuk memberikan peningkatan performa jaringan untuk kasus penggunaan tertentu. Panduan ini menjelaskan cara aplikasi dapat memicu alur UX upsell yang membagi jaringan dan meminta koneksi premium jika pengguna memutuskan untuk membelinya.
![Alur UX menampilkan notifikasi kepada pengguna yang membuka websheet
operator tempat mereka dapat menyelesaikan pembelian.](https://developer.android.google.cn/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=8&hl=id)
Mendeklarasikan intent kemampuan premium
Agar permintaan kemampuan jaringan dipenuhi, aplikasi Anda
harus mendeklarasikan intent-nya untuk meminta kemampuan tersebut dalam manifes aplikasi.
Jika tidak, permintaan jaringan akan gagal menampilkan SecurityException
.
Untuk melakukannya, aplikasi Anda harus mendeklarasikan
properti PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
dalam file AndroidManifest.xml
dan menyertakan file resource XML
yang sesuai.
Deklarasi kemampuan dalam file manifes terlihat seperti ini:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
File resource network_capabilities.xml
yang sesuai akan terlihat seperti ini:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Memicu alur upsell slicing jaringan
Contoh kode ini menunjukkan cara memicu alur upsell dan meminta kemampuan premium yang dibeli.
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
}
});
}
Bagian berikut menjelaskan langkah-langkah yang terlibat dalam proses ini secara lebih mendetail.
Langkah 1: Verifikasi apakah kemampuan premium tersedia
Panggil
metode API isPremiumCapabilityAvailableForPurchase()
untuk menentukan
apakah kemampuan premium yang dipilih tersedia. Metode ini akan menampilkan true
jika kemampuan tersedia untuk dibeli dari operator menggunakan alur kerja
notifikasi upsell.
Langkah 2: Mulai alur notifikasi upsell
Setelah mengonfirmasi bahwa kemampuan premium tersedia, aplikasi Anda harus memanggil
purchasePremiumCapability()
untuk memulai alur notifikasi upsell. Jika pengguna belum membeli
kemampuan yang ditentukan dan semua prasyarat terpenuhi, platform
akan menampilkan notifikasi kepada pengguna untuk memberi tahu bahwa opsi peningkatan performa
mungkin tersedia dari operator mereka. Jika pengguna mengetuk notifikasi, platform akan membuka webview operator sehingga proses pembelian dapat dilanjutkan.
Callback parameter
yang diteruskan ke purchasePremiumCapability()
menampilkan
kode hasil untuk permintaan pembelian.
Kode hasil
PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
dan
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
menunjukkan hasil yang sukses sehingga aplikasi dapat melanjutkan permintaan
kemampuan premium yang dipilih.
Kode hasil dalam daftar berikut mewakili permintaan pembelian yang gagal. Lihat referensi API untuk mempelajarinya lebih lanjut.
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
Langkah 3: Minta koneksi premium yang dibeli
Jika alur notifikasi upsell menampilkan kode yang berhasil
(PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
atau
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), aplikasi Anda harus menggunakan
requestNetwork()
untuk meminta jaringan yang memenuhi kemampuan yang diminta. Perlu diketahui bahwa saat Anda
mem-build objek NetworkRequest
, kemampuan yang Anda tambahkan bukan kemampuan yang sama
dengan yang Anda teruskan ke TelephonyManager
API di langkah sebelumnya.
Tabel berikut memetakan konstanta dari class TelephonyManager
ke
konstanta yang sesuai di NetworkCapabilities
.
Konstanta TelephonyManager |
Konstanta NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Jika permintaan pembelian gagal, aplikasi Anda harus meminta dan menggunakan jaringan default sebagai gantinya. Tidak ada perilaku penggantian otomatis jika permintaan slice premium tidak dapat dipenuhi.