Ağ dilimleme özelliğini kullanma

5G ağ dilimleme, operatörlere belirli kullanım alanları için ağ performansını artırma olanağı sunar. Bu kılavuzda, bir uygulamanın ağ dilimleme özelliğini nasıl kullanabileceği açıklanmaktadır.

Bu kılavuzda, uygulamanın premium bağlantıya erişebilmesi için satın alma işleminin gerekli olduğu durumlarda ağ dilimleme upsell kullanıcı deneyimi akışının nasıl tetikleneceği de açıklanmaktadır.

1. adım: Premium özellik isteklerini tanımlayın

Uygulamanızın premium dilimleme özelliği isteğinizin kabul edilmesi için uygulamanızın, uygulama manifestinde bu özelliği isteme niyetini belirtmesi gerekir. Aksi takdirde ağ isteği başarısız olur ve SecurityException döndürülür.

Bunu yapmak için uygulamanızın AndroidManifest.xml dosyasında PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES mülkünü tanımlaması ve ilgili bir XML kaynak dosyası eklemesi gerekir.

Manifest dosyasındaki bir özellik beyanı şö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ı şu şekilde 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>

2. adım: Premium özelliğinin kullanılıp kullanılamadığını doğrulayın

Premium özelliğinin kullanılıp kullanılamayacağını belirlemek için requestNetwork() API yöntemini çağırın.

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

Bir NetworkRequest nesnesi oluşturduğunuzda eklediğiniz özellik, TelephonyManager API'lerine ilettiğiniz özellikle aynı değildir. Aşağıdaki tabloda, TelephonyManager sınıfındaki sabitler NetworkCapabilities sınıfındaki karşılık gelen sabitlerle eşleştirilmektedir.

TelephonyManager sabit NetworkCapabilities sabit
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

3. Adım: Premium özellik kullanılamıyorsa satın alma durumunu kontrol edin

Seçilen premium özelliğin kullanılıp kullanılamayacağını belirlemek için isPremiumCapabilityAvailableForPurchase() API yöntemini çağırın. Bu yöntem, özellik, upsell bildirim iş akışı kullanılarak operatörden satın alınabiliyorsa true değerini döndürür.

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. Adım: Upsell bildirim akışını başlatın

Premium özelliğin kullanılabileceğini onayladıktan sonra uygulamanız, upsell bildirim akışını başlatmak için purchasePremiumCapability() işlevini çağırmalıdır. Kullanıcı, belirtilen özelliği daha önce satın almamışsa ve tüm ön koşullar karşılanıyorsa platform, kullanıcıya performans artırma seçeneklerinin operatöründen kullanılabileceğ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.

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

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

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

Aşağıdaki listedeki 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.

Satın alma isteği başarısız olursa uygulamanız bunun yerine varsayılan ağı kullanabilir. Premium dilim isteği yerine getirilemezse otomatik yedek davranış yoktur.

Upsell dilimleme için kullanıcı deneyimi akışı

Kullanıcı deneyimi akışında, kullanıcıya satın alma işlemini tamamlayabileceği bir operatör web sayfasını açan bir bildirim gösterilir.