5G 네트워크 슬라이싱은 이동통신사는 특정 용도에 맞게 네트워크 성능 부스트를 제공 있습니다. 이 가이드에서는 앱이 네트워크 슬라이싱 업셀 UX를 트리거하는 방법을 설명합니다. 프리미엄 연결을 요청합니다.
![UX 흐름에서 사용자에게 이동통신사를 여는 알림을 표시함
구매를 완료할 수 있는 웹 시트입니다.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?authuser=0000&hl=ko)
프리미엄 기능 인텐트 선언
앱의 네트워크 기능 요청을 이행하려면 앱이
앱 매니페스트에서 해당 기능을 요청하려면 인텐트를 선언해야 합니다.
그러지 않으면 네트워크 요청이 실패하고 SecurityException
이 발생합니다.
이렇게 하려면 앱에서
PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
드림
속성을 AndroidManifest.xml
파일에 포함시키고 해당하는 XML을
리소스 파일을 찾습니다.
매니페스트 파일의 기능 선언은 다음과 같습니다.
<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
android:resource="@xml/network_capabilities" />
상응하는 network_capabilities.xml
리소스 파일은 다음과 같습니다.
<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>
네트워크 슬라이싱 업셀 흐름 트리거
이 코드 예는 업셀링 흐름을 트리거하고 프리미엄 기능을 구매했습니다
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
}
});
}
다음 섹션에서는 이 프로세스와 관련된 단계를 더 자세히 설명합니다. 자세히 알아보세요.
1단계: 프리미엄 기능을 사용할 수 있는지 확인
먼저
isPremiumCapabilityAvailableForPurchase()
드림
API 메서드를 사용하여
사용 가능한지 여부를 지정합니다. 이 메서드는 true
를 반환합니다.
업셀링을 통해 이동통신사로부터 기능을 구매할 수 있는지 여부
알림 워크플로가 있습니다.
2단계: 업셀링 알림 흐름 시작하기
프리미엄 기능을 사용할 수 있는지 확인한 후에는 앱에서
purchasePremiumCapability()
드림
업셀 알림 흐름을 시작합니다. 사용자가 아직 구매하지 않은 경우
지정된 기능과 모든 전제조건이 충족되면 플랫폼은
성능 향상 옵션이 있음을 알리는 알림을 사용자에게 표시합니다.
이동통신사에서 구매할 수 있습니다. 사용자가 알림을 탭하면
플랫폼에서 이동통신사의 WebView를 열어 구매 프로세스를 계속할 수 있습니다.
purchasePremiumCapability()
에 전달된 parameter
콜백은 다음을 반환합니다.
결과 코드입니다.
결과 코드
PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
드림
및
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
앱에서 요청을 진행할 수 있는 성공적인 결과를 나타냅니다.
일부 프리미엄 기능을 지원합니다.
다음 목록의 결과 코드는 실패한 구매 요청을 나타냅니다. 자세한 내용은 자세히 알아보세요.
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단계: 구매한 Premium 연결 요청하기
업셀 알림 흐름에서 성공적인 코드를 반환하는 경우
(PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
또는
PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED
)는 앱에서
requestNetwork()
네트워크를 요청할 수 있어야 합니다 참고:
NetworkRequest
객체를 빌드하는 경우 추가하는 기능이 동일하지 않습니다.
기능을 TelephonyManager
API에 전달했습니다.
다음 표는 TelephonyManager
클래스의 상수를
NetworkCapabilities
의 해당 상수입니다.
TelephonyManager 상수 |
NetworkCapabilities 상수 |
---|---|
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY |
NET_CAPABILITY_PRIORITIZE_LATENCY |
구매 요청이 실패하면 앱에서 기본값을 요청하고 네트워크를 대신 사용 설정할 수 있습니다. 프리미엄 슬라이스의 경우 자동 대체 동작이 없습니다. 요청을 처리할 수 없습니다.