ESim.Discover Metodo

Definizione

Overload

Discover()

Esegue un'operazione di individuazione dei profili eSIM usando l'indirizzo SMDS predefinito.

Nota

Questa funzionalità è disponibile solo per le app degli operatori mobili e le app UWP date l'accesso con privilegi dagli operatori di rete mobile.

Se si vuole usare questa API e pubblicare l'app in Microsoft Store, sarà necessario richiedere l'approvazione speciale per usare la funzionalità personalizzata Microsoft.eSIMManagement_8wekyb3d8bbwe. Per altre informazioni, vedere Funzionalità personalizzate.

Discover(String, String)

Esegue un'operazione di individuazione dei profili eSIM per l'indirizzo del server RSP fornito e l'ID corrispondente.

Nota

Questa funzionalità è disponibile solo per le app degli operatori mobili e le app UWP date l'accesso con privilegi dagli operatori di rete mobile.

Se si vuole usare questa API e pubblicare l'app in Microsoft Store, sarà necessario richiedere l'approvazione speciale per usare la funzionalità personalizzata Microsoft.eSIMManagement_8wekyb3d8bbwe. Per altre informazioni, vedere Funzionalità personalizzate.

Discover()

Esegue un'operazione di individuazione dei profili eSIM usando l'indirizzo SMDS predefinito.

Nota

Questa funzionalità è disponibile solo per le app degli operatori mobili e le app UWP date l'accesso con privilegi dagli operatori di rete mobile.

Se si vuole usare questa API e pubblicare l'app in Microsoft Store, sarà necessario richiedere l'approvazione speciale per usare la funzionalità personalizzata Microsoft.eSIMManagement_8wekyb3d8bbwe. Per altre informazioni, vedere Funzionalità personalizzate.

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

Restituisce

Oggetto ESimDiscoverResult che rappresenta il risultato dell'operazione.

Attributi

Requisiti Windows

Famiglia di dispositivi
Windows 10, version 1903 (è stato introdotto in 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v8.0)
Funzionalità dell'app
Microsoft.eSIMManagement_8wekyb3d8bbwe

Esempio

Scenario 1

Individuare il profilo con un determinato indirizzo SM-DP+ e un ID corrispondente. L'operatore mobile fornisce all'app l'indirizzo SMDP, ovvero un nome di dominio completo di un server, ad esempio smdp.contoso.com e il MatchingID abcd1234 per individuare il profilo. Il presupposto è che il client ha già ottenuto un oggetto ESim da 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";
    }
}

Scenario 2

Individuare il profilo senza informazioni sul server. L'operatore mobile non fornisce informazioni sul server sul profilo da scaricare. In questo caso, l'app può comunque avviare il processo di individuazione. L'app attraversa tutti i profili disponibili per l'eSIM. Ciò può causare profili di tocco che non appartengono all'operatore mobile se sono presenti più profili individuabili da eSIM. Tuttavia, senza informazioni dall'operatore mobile, questa è una tecnica che è possibile usare.

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

Scenario 3

Individuare i profili con prefisso dell'indirizzo server specificato. L'operatore mobile ospita molti server di profilo, ma rifiuta di assegnare l'indirizzo del server di profilo all'app per motivi di sicurezza. L'app viene chiesto di controllare i profili salvati nel server con un nome di dominio che termina con contoso.com. Alcune delle logiche sono uguali a quella dello scenario 2. Il codice di esempio chiama la funzione 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;
}

Scenario 4

Un'anteprima dei risultati dell'individuazione disponibili. Un'app di utilità eSIM mostra l'elenco dei risultati dell'individuazione per l'utente. L'utente può quindi scegliere quale è l'hop successivo in base al loro interesse. Per ottenere l'elenco, l'app chiama l'API di individuazione senza parametri.

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

Scenario 5

Chiamata API sincronizzata. Un'app di utilità sta tentando di verificare se sono disponibili risultati di individuazione per eSIM. Creano una funzione denominata HasAvailableEventsToDiscover(). È garantito l'esecuzione nel threadpool dell'app e vuole avere il risultato restituito in modo sincrono.

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

Commenti

L'operazione di individuazione del profilo comporta il contatto di un server remoto. Tale server può essere il server di individuazione il cui indirizzo è preimpostato nell'eSIM o un indirizzo server fornito da un operatore mobile (MO). Il server può restituire un elenco di eventi che contengono le informazioni dell'hop del server successivo oppure può scaricare i metadati del profilo. Una volta che l'applicazione ottiene i metadati del profilo, è possibile scegliere di installare o rifiutare il profilo in base alla propria logica di business. L'individuazione dei profili è seriale, ovvero finché l'applicazione non prende la decisione di installazione per il profilo corrente, non è consentito individuare altri profili.

Per ogni hop, l'applicazione deve visitare l'hop per sapere quale tipo di dati viene restituito dal server. Tuttavia, i metadati del profilo possono avere limiti di tempo di download. Pertanto, l'applicazione deve evitare il download non necessario di altri metadati del profilo se ha un suggerimento di dove deve essere il profilo di interesse.

Si applica a

Discover(String, String)

Esegue un'operazione di individuazione dei profili eSIM per l'indirizzo del server RSP fornito e l'ID corrispondente.

Nota

Questa funzionalità è disponibile solo per le app degli operatori mobili e le app UWP date l'accesso con privilegi dagli operatori di rete mobile.

Se si vuole usare questa API e pubblicare l'app in Microsoft Store, sarà necessario richiedere l'approvazione speciale per usare la funzionalità personalizzata Microsoft.eSIMManagement_8wekyb3d8bbwe. Per altre informazioni, vedere Funzionalità personalizzate.

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

Parametri

serverAddress
String

Platform::String

winrt::hstring

Stringa contenente un indirizzo del server RSP. Se serverAddress è vuoto, l'API usa l'indirizzo SMDS predefinito.

matchingId
String

Platform::String

winrt::hstring

Stringa contenente l'ID corrispondente.

Restituisce

Oggetto ESimDiscoverResult che rappresenta il risultato dell'operazione.

Attributi

Requisiti Windows

Famiglia di dispositivi
Windows 10, version 1903 (è stato introdotto in 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v8.0)
Funzionalità dell'app
Microsoft.eSIMManagement_8wekyb3d8bbwe

Esempio

Vedere Individua per esempi di codice.

Commenti

Per altre informazioni, vedere Scopri .

Si applica a