사용자에게 네트워크 슬라이싱 업셀링 제안

5G 네트워크 슬라이싱은 이동통신사는 특정 용도에 맞게 네트워크 성능 부스트를 제공 있습니다. 이 가이드에서는 앱이 네트워크 슬라이싱 업셀 UX를 트리거하는 방법을 설명합니다. 프리미엄 연결을 요청합니다.

UX 흐름에서 사용자에게 이동통신사를 여는 알림을 표시함
       구매를 완료할 수 있는 웹 시트입니다.
그림 1. 업셀링 UX 흐름의 예

프리미엄 기능 인텐트 선언

앱의 네트워크 기능 요청을 이행하려면 앱이 앱 매니페스트에서 해당 기능을 요청하려면 인텐트를 선언해야 합니다. 그러지 않으면 네트워크 요청이 실패하고 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 앱에서 요청을 진행할 수 있는 성공적인 결과를 나타냅니다. 일부 프리미엄 기능을 지원합니다.

다음 목록의 결과 코드는 실패한 구매 요청을 나타냅니다. 자세한 내용은 자세히 알아보세요.

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

구매 요청이 실패하면 앱에서 기본값을 요청하고 네트워크를 대신 사용 설정할 수 있습니다. 프리미엄 슬라이스의 경우 자동 대체 동작이 없습니다. 요청을 처리할 수 없습니다.