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.
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.
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR
PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED
PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE
PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION
PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_FOREGROUND
PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP
PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED
PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED
PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT
PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED
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.