تمنح تقنية تقسيم شبكة الجيل الخامس مشغّلي شبكات الجوّال إمكانية تحسين أداء الشبكة في حالات استخدام معيّنة. يوضّح هذا الدليل كيفية استخدام التطبيق لميزة تقسيم الشبكة.
يتناول هذا الدليل أيضًا كيفية بدء مسار تجربة المستخدم لبيع اشتراكات إضافية في ميزة "تقسيم الشبكة" في الحالات التي تتطلّب إجراء عملية شراء قبل أن يتمكّن التطبيق من الوصول إلى الاتصال المدفوع.
الخطوة 1: الإفصاح عن نوايا استخدام الميزات المدفوعة
لكي يتم قبول طلب تطبيقك للحصول على ميزة تقسيم المحتوى المدفوع،
يجب أن يعلن تطبيقك عن رغبته في طلب هذه الميزة في بيان التطبيق.
بخلاف ذلك، يتعذّر طلب الشبكة ويظهر خطأ 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>
الخطوة 2: التحقّق من توفّر الميزة المدفوعة
استخدِم واجهة برمجة التطبيقات لطلب requestNetwork()
لتحديد ما إذا كانت الميزة المدفوعة متاحة.
Context mContext;
Network mNetwork;
public void requestPremiumCapabilityNetwork(@NetCapability int capability) {
ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
NetworkRequest request = NetworkRequest.Builder()
.addCapability(capability)
.build();
cm.requestNetwork(request, new NetworkCallback() {
@Override
public void onAvailable(Network network) {
log("Premium capability %d network is available.", capability);
mNetwork = network;
}
@Override
public void onLost(Network network) {
log("Premium capability %d network is not available.", capability);
mNetwork = null;
}
});
}
عند إنشاء عنصر NetworkRequest
، تكون الميزة التي تضيفها ليست
هي الميزة نفسها التي يتم تمريرها إلى واجهات برمجة تطبيقات TelephonyManager
.
يربط الجدول التالي الثوابت من فئة TelephonyManager
بالثوابت المقابلة لها في NetworkCapabilities
.
TelephonyManager ثابت |
NetworkCapabilities ثابت |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
الخطوة 3: إذا لم تكن الميزة المدفوعة متاحة، تحقّق من مدى توفّرها للشراء.
استخدِم طريقة واجهة برمجة التطبيقات isPremiumCapabilityAvailableForPurchase()
لتحديد ما إذا كانت الميزة المدفوعة المحدّدة متاحة.
تعرض هذه الطريقة القيمة true
إذا كانت الميزة متاحة للشراء من مقدم الخدمة باستخدام سير عمل إشعارات البيع الإضافي.
Context mContext;
public boolean isPremiumCapabilityAvailableForPurchase(@PremiumCapability int capability) {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
boolean isAvailable = tm.isPremiumCapabilityAvailableForPurchase(capability);
log("Premium capability %d %s available to purchase.",
capability,
isAvailable ? "is" : "is not");
return isAvailable;
}
الخطوة 4: بدء مسار إشعارات البيع الإضافي
بعد التأكّد من توفّر الميزة المدفوعة، من المفترض أن يطلب تطبيقك purchasePremiumCapability()
لبدء عملية إرسال إشعارات الترقية. إذا لم يسبق للمستخدم شراء
الميزة المحدّدة واستيفاء جميع الشروط المسبقة، تعرِض المنصة
إشعارًا للمستخدم لإعلامه بأنّه قد تتوفّر لديه خيارات تحسين الأداء
من مشغّل شبكة الجوّال. إذا نقر المستخدم على الإشعار، يفتح المعالج
عرض الويب الخاص بمشغّل شبكة الجوّال لكي تتمكّن عملية الشراء من المتابعة.
Context mContext;
public void purchasePremiumCapability(@PremiumCapability int capability) {
TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
@Override
public void accept(Integer result) {
log("Purchase premium capability %d result: %d", capability, result);
int purchaseResult = result;
}
});
}
تؤدي دالة الاستدعاء 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
إذا تعذّر طلب الشراء، قد يستخدم تطبيقك الشبكة التلقائية بدلاً من ذلك. لا يتوفّر سلوك تلقائي للرجوع إليه في حال تعذّر إشباع طلب القسم الإضافي.
مسار تجربة المستخدم لزيادة المبيعات
![تعرِض تجربة المستخدم إشعارًا للمستخدم يفتح جدول بيانات على الويب لجهة النقل
يمكنه من خلاله إكمال عملية الشراء.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=ar)