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_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
구매 요청이 실패하면 앱에서 기본 네트워크를 대신 사용할 수 있습니다. 프리미엄 슬라이스 요청을 처리할 수 없는 경우 자동 대체 동작이 없습니다.
슬라이싱 업셀을 위한 UX 흐름
![UX 흐름은 사용자에게 구매를 완료할 수 있는 이동통신사 웹시트를 여는 알림을 표시합니다.](https://developer.android.com/static/images/develop/connectivity/5g/upsell-ux-flow.png?hl=ko)