من خلال تقسيم شبكة الجيل الخامس لمشغّلي شبكة الجوّال، يمكن لمشغّلي شبكات الجوّال توفير أدوات لتعزيز أداء الشبكة لحالات استخدام معيّنة. يشرح هذا الدليل كيف يمكن لتطبيق ما تشغيل تدفق تجربة المستخدم لتقسيم الشبكة وطلب اتصال مميز إذا قرر المستخدم شراء واحد.
تحديد أهداف الإمكانات المتميزة
لتلبية طلب تطبيقك بشأن إمكانية الوصول إلى الشبكة، يجب أن يعلن تطبيقك عن رغبته في طلب هذه الإمكانية في بيان التطبيق.
بخلاف ذلك، يتعذّر طلب الشبكة بعرض SecurityException
.
لتنفيذ ذلك، يجب أن يعرِّف تطبيقك السمة
PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
في ملف AndroidManifest.xml
وأن يتضمّن ملف 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 |
وإذا تعذّر طلب الشراء، يجب أن يطلب التطبيق الشبكة التلقائية ويستخدمها بدلاً من ذلك. ليس هناك سلوك احتياطي تلقائي إذا تعذّر تنفيذ طلب الشريحة المميزة.