استخدام ميزة "تقسيم الشبكة"

تمنح تقنية تقسيم شبكة الجيل الخامس مشغّلي شبكات الجوّال إمكانية تحسين أداء الشبكة في حالات استخدام معيّنة. يوضّح هذا الدليل كيفية استخدام التطبيق لميزة تقسيم الشبكة.

يتناول هذا الدليل أيضًا كيفية بدء مسار تجربة المستخدم لبيع اشتراكات إضافية في ميزة "تقسيم الشبكة" في الحالات التي تتطلّب إجراء عملية شراء قبل أن يتمكّن التطبيق من الوصول إلى الاتصال المدفوع.

الخطوة 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 النتائج الناجحة التي يمكن لتطبيقك مواصلة طلب الميزة المدفوعة المحدّدة.

تمثّل رموز النتائج في القائمة التالية طلبات الشراء التي تعذّر إكمالها. يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات للتعرّف على مزيد من المعلومات.

إذا تعذّر طلب الشراء، قد يستخدم تطبيقك الشبكة التلقائية بدلاً من ذلك. لا يتوفّر سلوك تلقائي للرجوع إليه في حال تعذّر إشباع طلب القسم الإضافي.

مسار تجربة المستخدم لزيادة المبيعات

تعرِض تجربة المستخدم إشعارًا للمستخدم يفتح جدول بيانات على الويب لجهة النقل
       يمكنه من خلاله إكمال عملية الشراء.