ESim.Discover 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
Discover() |
기본 SMDS 주소를 사용하여 eSIM 프로필 검색 작업을 수행합니다. 참고 이 기능은 모바일 네트워크 운영자가 권한 있는 액세스 권한을 부여한 통신사 앱 및 UWP 앱에서만 사용할 수 있습니다. 이 API를 사용하고 앱을 Microsoft Store에 게시하려면 사용자 지정 기능 Microsoft.eSIMManagement_8wekyb3d8bbwe 사용하도록 특별 승인을 요청해야 합니다. 자세한 내용은 사용자 지정 기능을 참조하세요. |
Discover(String, String) |
제공된 RSP 서버 주소 및 일치하는 ID에 대해 eSIM 프로필 검색 작업을 수행합니다. 참고 이 기능은 모바일 네트워크 운영자가 권한 있는 액세스 권한을 부여한 통신사 앱 및 UWP 앱에서만 사용할 수 있습니다. 이 API를 사용하고 앱을 Microsoft Store에 게시하려면 사용자 지정 기능 Microsoft.eSIMManagement_8wekyb3d8bbwe 사용하도록 특별 승인을 요청해야 합니다. 자세한 내용은 사용자 지정 기능을 참조하세요. |
Discover()
기본 SMDS 주소를 사용하여 eSIM 프로필 검색 작업을 수행합니다.
참고
이 기능은 모바일 네트워크 운영자가 권한 있는 액세스 권한을 부여한 통신사 앱 및 UWP 앱에서만 사용할 수 있습니다.
이 API를 사용하고 앱을 Microsoft Store에 게시하려면 사용자 지정 기능 Microsoft.eSIMManagement_8wekyb3d8bbwe 사용하도록 특별 승인을 요청해야 합니다. 자세한 내용은 사용자 지정 기능을 참조하세요.
public:
virtual ESimDiscoverResult ^ Discover() = Discover;
/// [Windows.Foundation.Metadata.Overload("Discover")]
ESimDiscoverResult Discover();
[Windows.Foundation.Metadata.Overload("Discover")]
public ESimDiscoverResult Discover();
function discover()
Public Function Discover () As ESimDiscoverResult
반환
작업 결과를 나타내는 ESimDiscoverResult 개체입니다.
- 특성
Windows 요구 사항
디바이스 패밀리 |
Windows 10, version 1903 (10.0.18362.0에서 도입되었습니다.)
|
API contract |
Windows.Foundation.UniversalApiContract (v8.0에서 도입되었습니다.)
|
앱 기능 |
Microsoft.eSIMManagement_8wekyb3d8bbwe
|
예제
시나리오 1
지정된 SM-DP+ 주소와 일치하는 ID를 사용하여 프로필을 검색합니다. 통신사는 앱에 SMDP 주소(예: smdp.contoso.com
서버의 FQDN) 및 프로필을 찾는 MatchingID abcd1234
를 제공합니다. 클라이언트가 이미 ESimWatcher에서 ESim 개체를 얻었다고 가정합니다.
async void Scenario1_DiscoverWithSmdpAddress(ESim esim, String smdpAddress, String matchingId)
{
ESimDiscoverResult discoverResult = await esim.DiscoverAsync(
smdpAddress,
matchingId);
if (discoverResult.Result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Discover failed", discoverResult.Result.Status);
return;
}
if (discoverResult.Kind == ESimDiscoverResultKind.ProfileMetadata )
{
ESimProfileMetadata profileMetadata = discoverResult.ProfileMetadata;
ESimOperationResult result = await profileMetadata.ConfirmInstallAsync();
if (result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Couldn't install profile", result.Status);
}
else
{
discoveryStatusBar.Text = "Success";
}
}
else
{
// If an SMDP address is given, the app will expect a profile.
discoveryStatusBar.Text = "Unexpected result from server";
}
}
시나리오 2
서버 정보가 없는 프로필을 검색합니다. 통신사는 다운로드할 프로필에 대한 서버 정보를 제공하지 않습니다. 이 경우 앱은 검색 프로세스를 계속 시작할 수 있습니다. 앱은 eSIM에 사용 가능한 모든 프로필을 트래버스합니다. 이로 인해 eSIM에서 검색할 수 있는 프로필이 두 개 이상 있는 경우 통신사에 속하지 않는 프로필이 터치할 수 있습니다. 그러나 통신사의 정보가 없으면 사용할 수 있는 기술입니다.
async Task<bool> Scenario2_DiscoverProfile(ESim esim, String rspServerAddress, String matchingId)
{
ESimDiscoverResult discoverResult = await esim.DiscoverAsync(
rspServerAddress,
matchingId);
if (discoverResult.Result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Discover failed", discoverResult.Result.Status);
return false;
}
if (discoverResult.Kind == ESimDiscoverResultKind.Events)
{
IList<ESimDiscoverEvent> discoveryEvents = discoverResult.Events;
foreach (ESimDiscoverEvent discoverEvent in discoveryEvents)
{
// Recursively visit the server hops in event list.
foundProfile = await Scenario2_DiscoverProfile(
esim,
discoverEvent.RspServerAddress,
discoverEvent.MatchingId);
if (foundProfile) break;
}
}
else if (discoverResult.Kind == ESimDiscoverResultKind.ProfileMetadata)
{
ESimProfileMetadata profileMetadata = discoverResult.ProfileMetadata;
// There can be multiple profiles waiting for download. In a general profile
// discovery, the app may ask the user's consent for each profile (metadata).
bool okToInstall = await GetUserConsentForProfileDownload(profileMetadata);
// OR ...
// In the use case where the app is expecting a certain profile, the app may
// check the Id, ProviderName and ProviderId of the returned profile metadata
// to determine whether it is the expected profile.
//
// For example:
// okToInstall = IsExpectedProfile(profileMetadata);
if (okToInstall)
{
ESimOperationResult result = await profileMetadata.ConfirmInstallAsync();
if (result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Couldn't install profile", result.Status);
}
// Regardless of installation result, the desired profile has been found.
// Return early to avoid touching other profiles unnecessarily.
return true;
}
else
{
ESimOperationResult result = await profileMetadata.PostponeInstallAsync();
if (result.Status != ESimOperationStatus.Success)
{
// App can choose to ignore the result as this is to postpone
// installation. Error can be caused by a timeout or bad connection
// with the remote server. All these causes will effectively postpone
// the install.
}
}
}
return false;
}
async void Scenario2_DiscoverWithDefault(ESim esim)
{
await Scenario2_DiscoverProfile(esim, null, null);
}
시나리오 3
지정된 서버 주소 하위 접두사를 사용하여 프로필을 검색합니다. 통신사는 많은 프로필 서버를 호스트하지만 보안상의 이유로 프로필 서버 주소를 앱에 제공하는 것을 거부합니다. 앱은 도메인 이름이 로 끝나는 contoso.com
서버에 저장된 프로필을 검사 합니다. 일부 논리는 시나리오 2의 논리와 동일합니다. 여기서 예제 코드는 함수 Scenario2_DiscoverProfile()를 호출합니다.
async void Scenario3_DiscoverProfileWithServerInfo(ESim esim, String serverDomainNameSubfix)
{
ESimDiscoverResult discoverResult = await esim.DiscoverAsync();
if (discoverResult.Result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Discover failed", discoverResult.Result.Status);
return;
}
if (discoverResult.Kind == ESimDiscoverResultKind.Events)
{
IList<ESimDiscoverEvent> discoverEvents = discoverResult.Events;
foreach (ESimDiscoverEvent discoverEvent in discoverEvents)
{
// Check if this is the expected event.
if (discoverEvent.RspServerAddress.EndsWith(serverDomainNameSubfix))
{
bool foundProfile = await Scenario2_DiscoveryProfile(
esim,
discoverEvent.RspServerAddress,
discoverEvent.MatchingId);
if (foundProfile) break;
}
}
}
else
{
// The first discovery is guaranteed to return event list.
discoveryStatusBar.Text = "Unexpected result from server";
}
return;
}
시나리오 4
사용 가능한 검색 결과를 미리 볼 수 있습니다. eSIM 유틸리티 앱은 사용자의 검색 결과 목록을 표시합니다. 사용자는 나중에 관심에 따라 다음 홉을 선택할 수 있습니다. 목록을 가져오기 위해 앱은 매개 변수 없이 검색 API를 호출합니다.
Task<IList<ESimDiscoverEvent>> void Scenario4_ReviewDiscoveryResults(ESim esim)
{
ESimDiscoverResult discoverResult = await esim.DiscoverAsync();
if (discoverResult.Result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Discover failed", discoverResult.Result.Status);
return new List<ESimDiscoverResult>();
}
if (discoverResult.Kind == ESimDiscoverResultKind.Events)
{
return discoverResult.Events;
}
else
{
// The first discovery is guaranteed to return event list.
discoveryStatusBar.Text = "Unexpected result from server";
}
return new List<ESimDiscoverResult>();
}
시나리오 5
동기화된 API 호출. 유틸리티 앱이 eSIM에 사용할 수 있는 검색 결과가 있는지 확인하려고 합니다. HasAvailableEventsToDiscover()라는 함수를 만듭니다. 앱의 스레드 풀에서 실행되도록 보장되며 결과를 동기적으로 반환하려고 합니다.
bool Scenario5_HasAvailableEventsToDiscover(ESim esim)
{
ESimDiscoverResult discoverResult = esim.Discover();
if (discoverResult.Result.Status != ESimOperationStatus.Success)
{
discoveryStatusBar.Text = GetDiscoveryResultString("Discover failed", discoverResult.Result.Status);
return false;
}
// The discover result will always return the default SMDP+ address as
// the first result so that it can be considered by the caller as one
// possible profile source. Any more events in the list mean that the
// discovery server has discovery events available.
if (discoverResult.Kind == ESimDiscoverResultKind.Events
&& discoverResult.Count > 1)
{
return true;
}
return false;
}
설명
프로필 검색 작업에는 원격 서버에 연결해야 합니다. 해당 서버는 eSIM에서 주소가 미리 설정된 검색 서버 또는 MO(통신사)에서 제공하는 서버 주소일 수 있습니다. 서버는 다음 서버 홉의 정보를 포함하는 이벤트 목록을 반환하거나 프로필 메타데이터를 다운로드할 수 있습니다. 애플리케이션이 프로필 메타데이터를 가져오면 고유한 비즈니스 논리에 따라 프로필을 설치하거나 거부할 수 있습니다. 프로필 검색은 직렬입니다. 즉, 애플리케이션이 현재 프로필에 대한 설치 결정을 내릴 때까지 다른 프로필을 검색할 수 없습니다.
각 홉에 대해 애플리케이션이 홉을 방문하여 서버에서 반환되는 데이터 형식을 알아야 합니다. 그러나 프로필 메타데이터에는 다운로드 시간 제한이 있을 수 있습니다. 따라서 애플리케이션에 관심 있는 프로필이 있어야 하는 위치에 대한 힌트가 있는 경우 다른 프로필 메타데이터를 불필요하게 다운로드하지 않아야 합니다.
적용 대상
Discover(String, String)
제공된 RSP 서버 주소 및 일치하는 ID에 대해 eSIM 프로필 검색 작업을 수행합니다.
참고
이 기능은 모바일 네트워크 운영자가 권한 있는 액세스 권한을 부여한 통신사 앱 및 UWP 앱에서만 사용할 수 있습니다.
이 API를 사용하고 앱을 Microsoft Store에 게시하려면 사용자 지정 기능 Microsoft.eSIMManagement_8wekyb3d8bbwe 사용하도록 특별 승인을 요청해야 합니다. 자세한 내용은 사용자 지정 기능을 참조하세요.
public:
virtual ESimDiscoverResult ^ Discover(Platform::String ^ serverAddress, Platform::String ^ matchingId) = Discover;
/// [Windows.Foundation.Metadata.Overload("DiscoverWithServerAddressAndMatchingId")]
ESimDiscoverResult Discover(winrt::hstring const& serverAddress, winrt::hstring const& matchingId);
[Windows.Foundation.Metadata.Overload("DiscoverWithServerAddressAndMatchingId")]
public ESimDiscoverResult Discover(string serverAddress, string matchingId);
function discover(serverAddress, matchingId)
Public Function Discover (serverAddress As String, matchingId As String) As ESimDiscoverResult
매개 변수
- serverAddress
-
String
Platform::String
winrt::hstring
RSP 서버 주소를 포함하는 문자열입니다. 가 비어 있으면 serverAddress
API는 기본 SMDS 주소를 사용합니다.
- matchingId
-
String
Platform::String
winrt::hstring
일치하는 ID를 포함하는 문자열입니다.
반환
작업 결과를 나타내는 ESimDiscoverResult 개체입니다.
- 특성
Windows 요구 사항
디바이스 패밀리 |
Windows 10, version 1903 (10.0.18362.0에서 도입되었습니다.)
|
API contract |
Windows.Foundation.UniversalApiContract (v8.0에서 도입되었습니다.)
|
앱 기능 |
Microsoft.eSIMManagement_8wekyb3d8bbwe
|
예제
코드 예제는 검색 을 참조하세요.
설명
자세한 내용은 검색 을 참조하세요.