برش شبکه 5G به اپراتورها این توانایی را می دهد که عملکرد شبکه را برای موارد استفاده خاص افزایش دهند. این راهنما توضیح میدهد که چگونه یک برنامه میتواند جریان UX برش شبکه را راهاندازی کند و اگر کاربر تصمیم به خرید آن داشته باشد، درخواست اتصال ممتاز کند.
اهداف قابلیت برتر را اعلام کنید
برای اینکه درخواست برنامه شما برای قابلیت شبکه رعایت شود، برنامه شما باید قصد خود را برای درخواست این قابلیت در مانیفست برنامه اعلام کند. در غیر این صورت، درخواست شبکه با پرتاب یک SecurityException
ناموفق است.
برای انجام این کار، برنامه شما باید ویژگی PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
را در فایل AndroidManifest.xml
اعلام کند و یک فایل منبع XML مربوطه را شامل شود.
یک اعلان قابلیت در فایل مانیفست به صورت زیر است:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
فایل منبع network_capabilities.xml
مربوطه به شکل زیر است:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
جریان upsell برش شبکه را فعال کنید
این مثال کد نشان میدهد که چگونه میتوان جریان upsell را راهاندازی کرد و قابلیت Premium خریداریشده را درخواست کرد.
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
}
});
}
بخشهای زیر مراحل مربوط به این فرآیند را با جزئیات بیشتری شرح میدهند.
مرحله 1: بررسی کنید که آیا قابلیت Premium موجود است یا خیر
متد isPremiumCapabilityAvailableForPurchase()
API را فراخوانی کنید تا مشخص شود که آیا قابلیت Premium انتخاب شده در دسترس است یا خیر. اگر قابلیت خرید از اپراتور با استفاده از گردش کار اطلاع رسانی upsell در دسترس باشد، این روش true
را برمی گرداند.
مرحله 2: جریان اطلاع رسانی upsell را آغاز کنید
پس از تأیید در دسترس بودن قابلیت Premium، برنامه شما باید با purchasePremiumCapability()
تماس بگیرد تا جریان اعلان upsell را آغاز کند. اگر کاربر قبلاً قابلیت مشخصشده را خریداری نکرده باشد و همه پیششرطها برآورده شوند، پلتفرم اعلانی را به کاربر نشان میدهد تا بداند گزینههای افزایش عملکرد ممکن است از اپراتورشان در دسترس باشد. اگر کاربر روی اعلان ضربه بزند، پلتفرم نمای وب اپراتور را باز می کند تا روند خرید ادامه یابد.
parameter
فراخوانی ارسال شده به purchasePremiumCapability()
یک کد نتیجه را برای درخواست خرید برمی گرداند.
کدهای نتیجه PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
و PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
نشاندهنده نتایج موفقیتآمیز هستند که در آن برنامه شما میتواند به درخواست قابلیت برتر انتخابشده ادامه دهد.
کدهای نتیجه در لیست زیر نشان دهنده درخواست های خرید ناموفق هستند. برای کسب اطلاعات بیشتر در مورد آنها به مرجع API مراجعه کنید.
-
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
مرحله 3: اتصال حق بیمه خریداری شده را درخواست کنید
اگر جریان اعلان upsell کد موفقی را برگرداند ( PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
یا PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
)، برنامه شما باید از requestNetwork()
برای درخواست شبکه ای استفاده کند که قابلیت درخواستی را برآورده کند. توجه داشته باشید که وقتی یک شی NetworkRequest
میسازید، قابلیتی که اضافه میکنید همان قابلیتی نیست که در مراحل قبلی به APIهای TelephonyManager
منتقل میکنید. جدول زیر ثابتهای کلاس TelephonyManager
را به ثابتهای مربوطه در NetworkCapabilities
نشان میدهد.
TelephonyManager ثابت | NetworkCapabilities ثابت |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY | NET_CAPABILITY_PRIORITIZE_LATENCY |
اگر درخواست خرید ناموفق بود، برنامه شما باید به جای آن از شبکه پیشفرض درخواست کرده و از آن استفاده کند. اگر درخواست بخش حق بیمه قابل انجام نباشد، هیچ رفتار بازگشتی خودکار وجود ندارد.