Dzielenie sieci 5G zapewnia możliwość zwiększenia wydajności sieci komórkowej w określonych sytuacjach przypadków. Z tego przewodnika dowiesz się, jak aplikacja może wpłynąć na UX i zwiększyć sprzedaż w sieci i żądać połączenia premium, jeśli użytkownik zdecyduje się je kupić.
Deklarowanie intencji zaawansowanych funkcji
Aby aplikacja mogła spełnić prośbę o możliwość korzystania z sieci,
musi zadeklarować intencję żądania dostępu do tej funkcji w manifeście aplikacji.
W przeciwnym razie żądanie sieciowe nie wysyła żądania SecurityException
.
Aby to było możliwe, aplikacja musi zadeklarować parametr
PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
w pliku AndroidManifest.xml
i dodaj odpowiedni kod 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>
Uruchom proces podziału sieci na potrzeby sprzedaży dodatkowej
Ten przykładowy kod pokazuje, jak uruchomić proces sprzedaży dodatkowej i zażądać wykupione funkcje 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
}
});
}
W poniższych sekcjach szczegółowo opisano kroki tego procesu szczegóły.
Krok 1. Sprawdź, czy funkcja premium jest dostępna
Wywołaj funkcję
isPremiumCapabilityAvailableForPurchase()
Metoda interfejsu API do określenia
czy wybrana funkcja premium jest dostępna. Ta metoda zwraca true
czy funkcja jest dostępna do kupienia u operatora w ramach sprzedaży dodatkowej
i powiadomieniach.
Krok 2. Rozpocznij proces powiadomienia o sprzedaży dodatkowej
Po potwierdzeniu, że funkcja premium jest dostępna, aplikacja powinna wywołać
purchasePremiumCapability()
aby zainicjować przepływ powiadomień o sprzedaży dodatkowej. Jeśli użytkownik jeszcze nie dokonał zakupu
jeśli zostały spełnione określone możliwości i wszystkie warunki wstępne,
wyświetla użytkownikowi powiadomienie z informacją o opcjach zwiększenia wydajności
mogą być dostępne u operatora. Jeśli użytkownik kliknie powiadomienie,
platforma otworzy stronę operatora w celu kontynuowania procesu zakupu.
Wywołanie zwrotne parameter
przekazane do purchasePremiumCapability()
zwraca błąd
dla żądania zakupu.
Kody wyników
PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
oraz
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
przedstawiają prawidłowe wyniki, przy których aplikacja może przesłać żądanie
wybranej funkcji premium.
Kody wyników na liście poniżej oznaczają nieudane żądania zakupu. Zobacz API, gdzie znajdziesz więcej informacji.
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 zakupione połączenie premium
Jeśli proces powiadomienia o sprzedaży dodatkowej zwróci kod
(PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
lub
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
), aplikacja powinna używać
requestNetwork()
.
aby zażądać sieci, która spełnia żądaną funkcję. Pamiętaj, że gdy
utwórz obiekt NetworkRequest
, dodana przez Ciebie możliwość nie jest taka sama
które przekazujesz do interfejsów API TelephonyManager
w poprzednich krokach.
W poniższej tabeli mapowane są stałe z klasy TelephonyManager
na
odpowiadające sobie stałe w narzędziu NetworkCapabilities
.
Stała TelephonyManager |
Stała NetworkCapabilities |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
Jeśli prośba o zakup się nie uda, aplikacja powinna poprosić o dodanie domyślnej wartości i jej użyć Jeśli wycinek premium nie działa automatycznie nie można zrealizować żądania.