يوفّر تقسيم شبكة الجيل الخامس قدرة الشبكة على توفير تعزيزات في أداء الشبكة لأغراض محددة الحالات. يوضّح هذا الدليل كيف يمكن لتطبيق أن يؤدي إلى الارتقاء بمبيعات تجربة المستخدم على الشبكة. التدفق وطلب اتصال مميز إذا قرر المستخدم شراء واحد.
الإفصاح عن أهداف الإمكانات المدفوعة
لكي يتم الوفاء بطلب تطبيقك بشأن قدرة الشبكة، يجب أن
أن يفصح البيان عن رغبته في طلب هذه الميزة في بيان التطبيق.
وبخلاف ذلك، سيتعذر طلب الشبكة عرض 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>
تشغيل مسار الارتقاء بالمبيعات على مستوى الشبكة
يوضح مثال الرمز هذا كيفية بدء تدفق الارتقاء بالمبيعات وطلب الأجهزة المميزة التي تم شراؤها.
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: التحقّق من توفّر الوظائف المدفوعة
عليك استدعاء
isPremiumCapabilityAvailableForPurchase()
طريقة واجهة برمجة التطبيقات لتحديد
ما إذا كانت إمكانية الإصدار المميز المحددة متاحة أم لا. تُرجع هذه الطريقة true
إذا كانت إمكانية الشراء متاحة من شركة النقل باستخدام خيار الارتقاء بالمبيعات
الإشعارات.
الخطوة 2: بدء مسار إشعارات الارتقاء بالمبيعات
بعد التأكّد من توفّر الإمكانية المدفوعة، يجب أن يتصل تطبيقك
purchasePremiumCapability()
لبدء عملية إشعار الارتقاء بالمبيعات في حال لم يشترِ المستخدم
بالقدرة المحددة واستيفاء جميع الشروط المسبقة، ثم
إرسال إشعار إلى المستخدم لإعلامه بأنّ خيارات تعزيز الأداء
قد تكون متاحة من مشغل شبكة الجوال. إذا نقر المستخدم على الإشعار، سيتم
النظام الأساسي يؤدي إلى فتح WebView لمشغل شبكة الجوال بحيث يمكن متابعة عملية الشراء.
تعرض معاودة الاتصال parameter
التي يتم تمريرها إلى purchasePremiumCapability()
رمز نتيجة طلب الشراء.
رموز النتائج
PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
أو
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
تمثّل نتائج ناجحة تتيح لتطبيقك مواصلة طلب
القدرة المميزة المحددة.
تمثل رموز النتائج في القائمة التالية طلبات الشراء التي تعذّر إتمامها. عرض مرجع واجهة برمجة التطبيقات لمعرفة المزيد عنها.
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: طلب الاتصال المميّز الذي تم شراؤه
إذا عرض مسار إشعار الارتقاء بالمبيعات رمزًا ناجحًا
(PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
أو
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
)، من المفترض أن يستخدم تطبيقك
requestNetwork()
لطلب شبكة تفي بالإمكانية المطلوبة. لاحظ أنه عند
تنشئ كائن NetworkRequest
، فالإمكانية التي تضيفها ليست هي نفسها
التي تضيفها إلى واجهات برمجة تطبيقات TelephonyManager
في الخطوات السابقة.
يعيّن الجدول التالي الثوابت من فئة TelephonyManager
إلى
الثوابت المتناظرة في NetworkCapabilities
.
ثابت TelephonyManager |
ثابت NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
في حال عدم نجاح طلب الشراء، من المفترض أن يطلب التطبيق استخدام القيمة التلقائية الشبكة بدلاً من ذلك. لا يكون هناك سلوك احتياطي تلقائي إذا كانت الشريحة المميّزة لا يمكن تلبية طلبك.