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

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

يعرض تدفق تجربة المستخدم للمستخدم إشعارًا يفتح مشغّل شبكة الجوّال
       ورقة ويب تتيح لهم إكمال عملية الشراء.
الشكل 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>

تشغيل مسار الارتقاء بالمبيعات على مستوى الشبكة

يوضح مثال الرمز هذا كيفية بدء تدفق الارتقاء بالمبيعات وطلب الأجهزة المميزة التي تم شراؤها.

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

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