تقديم فرصة الارتقاء بالمبيعات من خلال توسيع نطاق الشبكة

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

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

تحديد أهداف الإمكانات المتميزة

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

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

الخطوة 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

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