Compartilhar via


ESim.Discover Método

Definição

Sobrecargas

Discover()

Executa uma operação de descoberta de perfil do eSIM usando o endereço SMDS padrão.

Observação

Essa funcionalidade está disponível apenas para aplicativos de operadora móvel e aplicativos UWP com acesso privilegiado por operadoras de rede móvel.

Se você quiser usar essa API e publicar seu aplicativo na Microsoft Store, precisará solicitar aprovação especial para usar a funcionalidade personalizada Microsoft.eSIMManagement_8wekyb3d8bbwe. Para obter mais informações, consulte Recursos personalizados.

Discover(String, String)

Executa uma operação de descoberta de perfil do eSIM para o endereço do servidor RSP fornecido e a ID correspondente.

Observação

Essa funcionalidade está disponível apenas para aplicativos de operadora móvel e aplicativos UWP com acesso privilegiado por operadoras de rede móvel.

Se você quiser usar essa API e publicar seu aplicativo na Microsoft Store, precisará solicitar aprovação especial para usar a funcionalidade personalizada Microsoft.eSIMManagement_8wekyb3d8bbwe. Para obter mais informações, consulte Recursos personalizados.

Discover()

Executa uma operação de descoberta de perfil do eSIM usando o endereço SMDS padrão.

Observação

Essa funcionalidade está disponível apenas para aplicativos de operadora móvel e aplicativos UWP com acesso privilegiado por operadoras de rede móvel.

Se você quiser usar essa API e publicar seu aplicativo na Microsoft Store, precisará solicitar aprovação especial para usar a funcionalidade personalizada Microsoft.eSIMManagement_8wekyb3d8bbwe. Para obter mais informações, consulte Recursos personalizados.

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

Retornos

Um objeto ESimDiscoverResult que representa o resultado da operação.

Atributos

Requisitos do Windows

Família de dispositivos
Windows 10, version 1903 (introduzida na 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v8.0)
Funcionalidades do aplicativo
Microsoft.eSIMManagement_8wekyb3d8bbwe

Exemplos

Cenário 1

Descubra o perfil com um determinado endereço SM-DP+ e uma ID correspondente. A operadora móvel fornece ao aplicativo o endereço SMDP, que é um FQDN de um servidor como smdp.contoso.com e o MatchingID abcd1234 para localizar o perfil. A suposição é que o cliente já obteve um objeto ESim do ESimWatcher.

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";
    }
}

Cenário 2

Descubra o perfil sem informações do servidor. A operadora móvel não fornece nenhuma informação de servidor sobre o perfil a ser baixado. Nesse caso, o aplicativo ainda pode iniciar o processo de descoberta. O aplicativo percorre todos os perfis disponíveis para o eSIM. Isso pode levar a perfis tocantes que não pertencem à operadora móvel se houver mais de um perfil detectável pelo eSIM. No entanto, sem informações da operadora móvel, essa é uma técnica que você pode usar.

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);
}

Cenário 3

Descubra perfis com determinado subfixo de endereço do servidor. A operadora móvel hospeda muitos servidores de perfil, mas se recusa a fornecer o endereço do servidor de perfil ao aplicativo por motivos de segurança. O aplicativo é solicitado a marcar perfis salvos no servidor com um nome de domínio terminando com contoso.com. Parte da lógica é a mesma do Cenário 2. O código de exemplo aqui chama a função 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;
}

Cenário 4

Uma prévia dos resultados de descoberta disponíveis. Um aplicativo utilitário eSIM mostra a lista de resultados de descoberta para o usuário. Posteriormente, o usuário pode escolher qual é o próximo salto com base em seu interesse. Para obter a lista, o aplicativo chama a API de descoberta sem parâmetros.

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>();
}

Cenário 5

Chamada à API sincronizada. Um aplicativo utilitário está tentando ver se há resultados de descoberta disponíveis para o eSIM. Eles criam uma função chamada HasAvailableEventsToDiscover(). É garantido que ele esteja em execução no threadpool do aplicativo e gostaria de ter o resultado retornado de forma síncrona.

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;
}

Comentários

A operação de descoberta de perfil envolve entrar em contato com um servidor remoto. Esse servidor pode ser o servidor de descoberta cujo endereço é predefinido no eSIM ou um endereço de servidor fornecido por uma mo (operadora móvel). O servidor pode retornar uma lista de eventos que contêm as informações do próximo salto do servidor ou pode baixar metadados de perfil. Depois que o aplicativo obtém os metadados de perfil, você pode optar por instalar ou rejeitar o perfil com base em sua própria lógica de negócios. A descoberta de perfil é serial, o que significa que, até que seu aplicativo faça a decisão de instalação para o perfil atual, não é permitido descobrir outros perfis.

Para cada salto, seu aplicativo deve visitar o salto para saber qual tipo de dados é retornado pelo servidor. No entanto, os metadados de perfil podem ter limites de tempo de download. Portanto, seu aplicativo deve evitar o download desnecessário de outros metadados de perfil se ele tiver alguma dica de onde o perfil de interesse deve estar.

Aplica-se a

Discover(String, String)

Executa uma operação de descoberta de perfil do eSIM para o endereço do servidor RSP fornecido e a ID correspondente.

Observação

Essa funcionalidade está disponível apenas para aplicativos de operadora móvel e aplicativos UWP com acesso privilegiado por operadoras de rede móvel.

Se você quiser usar essa API e publicar seu aplicativo na Microsoft Store, precisará solicitar aprovação especial para usar a funcionalidade personalizada Microsoft.eSIMManagement_8wekyb3d8bbwe. Para obter mais informações, consulte Recursos personalizados.

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

Parâmetros

serverAddress
String

Platform::String

winrt::hstring

Uma cadeia de caracteres que contém um endereço de servidor RSP. Se serverAddress estiver vazia, a API usará o endereço SMDS padrão.

matchingId
String

Platform::String

winrt::hstring

Uma cadeia de caracteres que contém a ID correspondente.

Retornos

Um objeto ESimDiscoverResult que representa o resultado da operação.

Atributos

Requisitos do Windows

Família de dispositivos
Windows 10, version 1903 (introduzida na 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v8.0)
Funcionalidades do aplicativo
Microsoft.eSIMManagement_8wekyb3d8bbwe

Exemplos

Consulte Descobrir para obter exemplos de código.

Comentários

Confira Descobrir para obter mais informações.

Aplica-se a