Kullanıcıya ek satış fırsatı sunun

5G ağ dilimleme, operatörlere belirli kullanım alanları için ağ performansı artışı sağlama olanağı sunar. Bu kılavuzda, bir uygulamanın upsell kullanıcı deneyimi akışını parçalara ayırarak nasıl tetikleyebileceği ve kullanıcı satın almaya karar verirse premium bağlantı isteğinde nasıl bulunabileceği açıklanmaktadır.

Kullanıcı deneyimi akışı, kullanıcıya satın alma işlemini tamamlayabileceği bir operatör web sayfası açan bir bildirim gösterir.
Şekil 1. Upsell kullanıcı deneyimi akışı örneği.

Premium özellik amaçları bildirme

Uygulamanızın ağ işlevi isteğinin yerine getirilmesi için uygulamanızın, bu özelliği isteme niyetini uygulama manifest dosyasında beyan etmesi gerekir. Aksi takdirde, ağ isteği SecurityException gönderemez.

Bunu yapmak için uygulamanızın AndroidManifest.xml dosyasında PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES özelliğini beyan etmesi ve karşılık gelen XML kaynak dosyasını içermesi gerekir.

Manifest dosyasındaki bir işlev bildirimi şöyle görünür:

<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
          android:resource="@xml/network_capabilities" />

İlgili network_capabilities.xml kaynak dosyası aşağıdaki gibi görünür:

<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>

Ağ dilimleme upsell akışını tetikle

Bu kod örneğinde, upsell akışının nasıl tetikleneceği ve satın alınan premium özelliğinin nasıl isteneceği gösterilmektedir.

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
        }
    });
}

Aşağıdaki bölümlerde bu süreçteki adımlar daha ayrıntılı bir şekilde açıklanmaktadır.

1. Adım: Premium özelliklerinin mevcut olup olmadığını doğrulayın

Seçilen premium özelliğin kullanılabilir olup olmadığını belirlemek için isPremiumCapabilityAvailableForPurchase() API yöntemini çağırın. Özellik, upsell bildirimi iş akışı kullanılarak operatörden satın alınabiliyorsa bu yöntem, true değerini döndürür.

2. Adım: Upsell bildirim akışını başlatın

Premium özelliğinin kullanılabilir olduğunu onayladıktan sonra, uygulamanız upsell bildirim akışını başlatmak için purchasePremiumCapability() aracını aramalıdır. Kullanıcı, belirtilen özelliği henüz satın almamışsa ve tüm ön koşullar karşılanırsa platform, kullanıcıya operatörü tarafından performans artırma seçeneklerinin mevcut olabileceğini bildiren bir bildirim gösterir. Kullanıcı bildirime dokunursa platform, satın alma işleminin devam edebilmesi için operatörün web görünümünü açar.

purchasePremiumCapability() öğesine iletilen parameter geri çağırması, satın alma isteği için bir sonuç kodu döndürür.

Sonuç kodları PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS ve PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED, uygulamanızın seçilen premium özelliği istemeye devam edebileceği başarılı sonuçları temsil eder.

Aşağıdaki listede yer alan sonuç kodları başarısız satın alma isteklerini temsil eder. Bunlar hakkında daha fazla bilgi edinmek için API referansına bakın.

3. Adım: Satın alınan premium bağlantıyı isteyin

Upsell bildirim akışı başarılı bir kod (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS veya PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED) döndürürse uygulamanız, istenen özelliği karşılayan bir ağ istemek için requestNetwork()'i kullanmalıdır. Bir NetworkRequest nesnesi oluşturduğunuzda, eklediğiniz özelliğin önceki adımlarda TelephonyManager API'lerine aktardığınız özelliklerle aynı olmadığını unutmayın. Aşağıdaki tabloda, TelephonyManager sınıfındaki sabit değerler, NetworkCapabilities nesnesine karşılık gelen sabit değerlerle eşleştirilmektedir.

TelephonyManager sabit NetworkCapabilities sabit
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

Satın alma isteği başarısız olursa uygulamanızın bunun yerine varsayılan ağı istemesi ve kullanması gerekir. Premium dilim isteği yerine getirilemezse otomatik yedek davranışı olmaz.