Dzielenie sieci 5G umożliwia operatorom zwiększenie wydajności sieci w określonych przypadkach użycia. Ten przewodnik wyjaśnia, w jaki sposób aplikacja może aktywować przepływ UX sprzedaży dodatkowej i poprosić o połączenie premium, jeśli użytkownik zdecyduje się je kupić.
Deklarowanie intencji związanych z funkcjami premium
Aby żądanie aplikacji zostało spełnione, aplikacja musi zadeklarować w manifeście jej intencję.
W przeciwnym razie żądanie sieciowe nie powiedzie się i wystąpi SecurityException
.
Aby to zrobić, aplikacja musi zadeklarować właściwość PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
w pliku AndroidManifest.xml
i podać odpowiedni plik zasobów XML.
Deklaracja możliwości w pliku manifestu wygląda tak:
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
Odpowiedni plik zasobów network_capabilities.xml
wygląda tak:
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
Aktywowanie przepływu sprzedaży dodatkowej w sieci
Ten przykładowy kod pokazuje, jak aktywować proces sprzedaży dodatkowej i zażądać zakupionych funkcji premium.
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
}
});
}
Sekcje poniżej zawierają bardziej szczegółowe informacje o czynnościach związanych z tym procesem.
Krok 1. Sprawdź, czy są dostępne funkcje premium
Wywołaj metodę interfejsu API isPremiumCapabilityAvailableForPurchase()
, aby określić, czy wybrana funkcja premium jest dostępna. Ta metoda zwraca wartość true
, jeśli dany operator jest dostępny do kupienia za pomocą powiadomienia o sprzedaży dodatkowej.
Krok 2. Rozpocznij procedurę wysyłania powiadomień o sprzedaży dodatkowej
Gdy potwierdzisz, że funkcja premium jest dostępna, aplikacja powinna wywołać metodę purchasePremiumCapability()
, aby rozpocząć powiadomienie o sprzedaży dodatkowej. Jeśli użytkownik nie kupił jeszcze określonej możliwości, a wszystkie warunki wstępne są spełnione, platforma wyświetla użytkownikowi powiadomienie z informacją, że operator może oferować opcje zwiększenia wydajności. Jeśli użytkownik kliknie powiadomienie, platforma otworzy komponent WebView operatora, aby kontynuować proces zakupu.
Wywołanie zwrotne parameter
przekazane do purchasePremiumCapability()
zwraca kod wyniku dla żądania zakupu.
Kody wyników PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
i PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
wskazują pomyślne wyniki, w przypadku których aplikacja może wysłać prośbę o wybraną funkcję premium.
Kody wyników na poniższej liście odpowiadają nieudanym prośbom o zakup. Więcej informacji na ten temat znajdziesz w dokumentacji interfejsu API.
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
Krok 3. Poproś o kupione połączenie premium
Jeśli powiadomienie o sprzedaży dodatkowej zwróci pomyślny kod (PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
lub PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), Twoja aplikacja powinna użyć parametru requestNetwork()
, aby wysłać żądanie do sieci, która spełnia żądaną funkcję. Pamiętaj, że podczas tworzenia obiektu NetworkRequest
dodawane możliwości nie są takie same jak uprawnienia przekazane do interfejsów API TelephonyManager
we wcześniejszych krokach.
W tabeli poniżej mapujemy stałe z klasy TelephonyManager
na odpowiadające im stałe w NetworkCapabilities
.
TelephonyManager stała |
NetworkCapabilities stała |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Jeśli żądanie zakupu nie powiedzie się, aplikacja powinna wysyłać żądanie i używać sieci domyślnej. Jeśli nie można zrealizować żądania wycinka premium, nie występuje automatyczne zachowanie awaryjne.