이동통신사는 5G 네트워크 슬라이싱을 통해 특정 사용 사례의 네트워크 성능을 개선할 수 있습니다. 이 가이드에서는 사용자가 구매를 결정한 경우 앱이 네트워크 슬라이싱 업셀링 UX 흐름을 트리거하고 프리미엄 연결을 요청하는 방법을 설명합니다.
프리미엄 기능 인텐트 선언
앱의 네트워크 기능 요청이 준수되려면 앱이 앱 매니페스트에서 이 기능을 요청하는 인텐트를 선언해야 합니다.
그러지 않으면 네트워크 요청이 SecurityException
을 발생시키는 데 실패합니다.
이렇게 하려면 앱은 AndroidManifest.xml
파일에서 PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES
속성을 선언하고 상응하는 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
는 앱이 선택된 프리미엄 기능 요청을 진행할 수 있는 성공적인 결과를 나타냅니다.
다음 목록의 결과 코드는 실패한 구매 요청을 나타냅니다. 자세한 내용은 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
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 |
구매 요청이 실패하면 앱에서 기본 네트워크를 대신 요청하고 사용해야 합니다. 프리미엄 슬라이스 요청을 처리할 수 없는 경우 자동 대체 동작이 없습니다.