Partager via


ESim.Discover Méthode

Définition

Surcharges

Discover()

Effectue une opération de découverte de profil eSIM à l’aide de l’adresse SMDS par défaut.

Notes

Cette fonctionnalité n’est disponible que pour les applications d’opérateur mobile et les applications UWP disposant d’un accès privilégié par les opérateurs de réseau mobile.

Si vous souhaitez utiliser cette API et publier votre application dans le Microsoft Store, vous devez demander une approbation spéciale pour utiliser la fonctionnalité personnalisée Microsoft.eSIMManagement_8wekyb3d8bbwe. Pour plus d’informations, consultez Fonctionnalités personnalisées.

Discover(String, String)

Effectue une opération de découverte de profil eSIM pour l’adresse du serveur RSP et l’ID correspondant fourni.

Notes

Cette fonctionnalité n’est disponible que pour les applications d’opérateur mobile et les applications UWP disposant d’un accès privilégié par les opérateurs de réseau mobile.

Si vous souhaitez utiliser cette API et publier votre application dans le Microsoft Store, vous devez demander une approbation spéciale pour utiliser la fonctionnalité personnalisée Microsoft.eSIMManagement_8wekyb3d8bbwe. Pour plus d’informations, consultez Fonctionnalités personnalisées.

Discover()

Effectue une opération de découverte de profil eSIM à l’aide de l’adresse SMDS par défaut.

Notes

Cette fonctionnalité n’est disponible que pour les applications d’opérateur mobile et les applications UWP disposant d’un accès privilégié par les opérateurs de réseau mobile.

Si vous souhaitez utiliser cette API et publier votre application dans le Microsoft Store, vous devez demander une approbation spéciale pour utiliser la fonctionnalité personnalisée Microsoft.eSIMManagement_8wekyb3d8bbwe. Pour plus d’informations, consultez Fonctionnalités personnalisées.

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

Retours

Objet ESimDiscoverResult représentant le résultat de l’opération.

Attributs

Configuration requise pour Windows

Famille d’appareils
Windows 10, version 1903 (introduit dans 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v8.0)
Fonctionnalités de l’application
Microsoft.eSIMManagement_8wekyb3d8bbwe

Exemples

Scénario 1

Découvrez le profil avec une adresse SM-DP+ donnée et un ID correspondant. L’opérateur mobile donne à l’application l’adresse SMDP, qui est un nom de domaine complet d’un serveur tel que smdp.contoso.com et le MatchingID abcd1234 pour localiser le profil. L’hypothèse est que le client a déjà obtenu un objet ESim à partir d’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";
    }
}

Scénario 2

Découvrez le profil sans informations de serveur. L’opérateur mobile ne fournit aucune information de serveur sur le profil à télécharger. Dans ce cas, l’application peut toujours démarrer le processus de découverte. L’application traverse tous les profils disponibles pour l’eSIM. Cela peut conduire à toucher des profils qui n’appartiennent pas à l’opérateur mobile s’il existe plusieurs profils détectables par l’eSIM. Toutefois, en l’absence d’informations de l’opérateur mobile, il s’agit d’une technique que vous pouvez utiliser.

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

Scénario 3

Découvrez des profils avec un sous-correctif d’adresse de serveur donné. L’opérateur mobile héberge de nombreux serveurs de profils, mais il refuse de donner l’adresse du serveur de profil à l’application pour des raisons de sécurité. L’application est invitée à case activée profils enregistrés sur le serveur avec un nom de domaine se terminant par contoso.com. Une partie de la logique est identique à celle du scénario 2. L’exemple de code ici appelle la fonction 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;
}

Scénario 4

Aperçu des résultats de la découverte disponibles. Une application utilitaire eSIM affiche la liste des résultats de la découverte pour l’utilisateur. L’utilisateur peut ensuite choisir le tronçon suivant en fonction de son intérêt. Pour obtenir la liste, l’application appelle l’API de découverte sans aucun paramètre.

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

Scénario 5

Appel d’API synchronisé. Une application utilitaire tente de voir s’il existe des résultats de découverte disponibles pour l’eSIM. Ils créent une fonction nommée HasAvailableEventsToDiscover(). Il est garanti qu’il s’exécute dans le threadpool de l’application et souhaite que le résultat soit retourné de manière synchrone.

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

Remarques

L’opération de découverte de profil implique de contacter un serveur distant. Ce serveur peut être soit le serveur de découverte dont l’adresse est prédéfinie dans l’eSIM, soit une adresse de serveur fournie par un opérateur mobile (MO). Le serveur peut retourner une liste d’événements qui contiennent les informations du tronçon de serveur suivant, ou il peut télécharger les métadonnées d’un profil. Une fois que votre application obtient les métadonnées de profil, vous pouvez choisir d’installer ou de rejeter le profil en fonction de votre propre logique métier. La découverte de profil est série, ce qui signifie que tant que votre application n’a pas pris la décision d’installation pour le profil actuel, elle n’est pas autorisée à découvrir d’autres profils.

Pour chaque tronçon, votre application doit visiter le tronçon pour savoir quel type de données est retourné par le serveur. Toutefois, les métadonnées de profil peuvent avoir des limites de temps de téléchargement. Par conséquent, votre application doit éviter le téléchargement inutile d’autres métadonnées de profil si elle a une indication de l’emplacement du profil d’intérêt.

S’applique à

Discover(String, String)

Effectue une opération de découverte de profil eSIM pour l’adresse du serveur RSP et l’ID correspondant fourni.

Notes

Cette fonctionnalité n’est disponible que pour les applications d’opérateur mobile et les applications UWP disposant d’un accès privilégié par les opérateurs de réseau mobile.

Si vous souhaitez utiliser cette API et publier votre application dans le Microsoft Store, vous devez demander une approbation spéciale pour utiliser la fonctionnalité personnalisée Microsoft.eSIMManagement_8wekyb3d8bbwe. Pour plus d’informations, consultez Fonctionnalités personnalisées.

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

Paramètres

serverAddress
String

Platform::String

winrt::hstring

Chaîne contenant une adresse de serveur RSP. Si serverAddress est vide, l’API utilise l’adresse SMDS par défaut.

matchingId
String

Platform::String

winrt::hstring

Chaîne contenant l’ID correspondant.

Retours

Objet ESimDiscoverResult représentant le résultat de l’opération.

Attributs

Configuration requise pour Windows

Famille d’appareils
Windows 10, version 1903 (introduit dans 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (introduit dans v8.0)
Fonctionnalités de l’application
Microsoft.eSIMManagement_8wekyb3d8bbwe

Exemples

Consultez Découvrir pour obtenir des exemples de code.

Remarques

Pour plus d’informations, consultez Découvrir .

S’applique à