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.
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESSPURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLEDPURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERRORPURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILEDPURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTEDPURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLEPURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTIONPURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_FOREGROUNDPURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUPPURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILEDPURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLEDPURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUTPURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED
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ışı