네트워크 슬라이싱 사용

5G 네트워크 슬라이싱을 사용하면 이동통신사가 특정 사용 사례에 맞게 네트워크 성능을 개선할 수 있습니다. 이 가이드에서는 앱이 네트워크 슬라이싱 기능을 사용하는 방법을 설명합니다.

이 가이드에서는 앱이 프리미엄 연결에 액세스하기 전에 구매가 필요한 경우 네트워크 슬라이싱 업셀링 UX 흐름을 트리거하는 방법도 설명합니다.

1단계: 프리미엄 기능 인텐트 선언

앱의 프리미엄 슬라이싱 기능 요청이 처리되려면 앱이 앱 매니페스트에서 해당 기능을 요청할 의도를 선언해야 합니다. 그렇지 않으면 네트워크 요청이 실패하여 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>

2단계: 프리미엄 기능을 사용할 수 있는지 확인

requestNetwork() API 메서드를 호출하여 프리미엄 기능을 사용할 수 있는지 확인합니다.

Context mContext;
Network mNetwork;

public void requestPremiumCapabilityNetwork(@NetCapability int capability) {
    ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
    NetworkRequest request = NetworkRequest.Builder()
            .addCapability(capability)
            .build();
    cm.requestNetwork(request, new NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            log("Premium capability %d network is available.", capability);
            mNetwork = network;
        }

        @Override
        public void onLost(Network network) {
            log("Premium capability %d network is not available.", capability);
            mNetwork = null;
        }
    });
}

NetworkRequest 객체를 빌드할 때 추가하는 기능은 TelephonyManager API에 전달하는 기능과 다릅니다. 다음 표는 TelephonyManager 클래스의 상수를 NetworkCapabilities의 상응하는 상수에 매핑합니다.

TelephonyManager 상수 NetworkCapabilities 상수
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

3단계: 프리미엄 기능을 사용할 수 없는 경우 구매 가능 여부 확인

isPremiumCapabilityAvailableForPurchase() API 메서드를 호출하여 선택한 프리미엄 기능을 사용할 수 있는지 확인합니다. 이 메서드는 업셀링 알림 워크플로를 사용하여 이동통신사에서 구매할 수 있는 기능인 경우 true를 반환합니다.

Context mContext;

public boolean isPremiumCapabilityAvailableForPurchase(@PremiumCapability int capability) {
    TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
    boolean isAvailable = tm.isPremiumCapabilityAvailableForPurchase(capability);
    log("Premium capability %d %s available to purchase.",
            capability,
            isAvailable ? "is" : "is not");
    return isAvailable;
}

4단계: 업셀링 알림 흐름 시작

프리미엄 기능을 사용할 수 있는지 확인한 후 앱은 purchasePremiumCapability()를 호출하여 업셀링 알림 흐름을 시작해야 합니다. 사용자가 지정된 기능을 아직 구매하지 않았고 모든 기본 조건이 충족되면 플랫폼은 사용자에게 이동통신사에서 성능 향상 옵션을 사용할 수 있다는 알림을 표시합니다. 사용자가 알림을 탭하면 플랫폼은 구매 프로세스를 계속할 수 있도록 이동통신사의 WebView를 엽니다.

Context mContext;

public void purchasePremiumCapability(@PremiumCapability int capability) {
    TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
    tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
        @Override
        public void accept(Integer result) {
            log("Purchase premium capability %d result: %d", capability, result);
            int purchaseResult = result;
        }
    });
}

purchasePremiumCapability()에 전달된 parameter 콜백은 구매 요청의 결과 코드를 반환합니다.

결과 코드 PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESSPURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED는 앱이 선택한 프리미엄 기능을 요청할 수 있는 성공적인 결과를 나타냅니다.

다음 목록의 결과 코드는 실패한 구매 요청을 나타냅니다. 자세한 내용은 API 참조를 참고하세요.

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

슬라이싱 업셀을 위한 UX 흐름

UX 흐름은 사용자에게 구매를 완료할 수 있는 이동통신사 웹시트를 여는 알림을 표시합니다.