Freigeben über


ESim.Discover Methode

Definition

Überlädt

Discover()

Führt einen eSIM-Profilermittlungsvorgang unter Verwendung der SMDS-Standardadresse aus.

Hinweis

Diese Funktionalität ist nur für Apps von Mobilfunkanbietern und UWP-Apps verfügbar, die privilegierten Zugriff von Mobilfunknetzbetreibern erhalten.

Wenn Sie diese API verwenden und Ihre App im Microsoft Store veröffentlichen möchten, müssen Sie eine spezielle Genehmigung anfordern, um die benutzerdefinierte Funktion Microsoft.eSIMManagement_8wekyb3d8bbwe verwenden zu können. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen.

Discover(String, String)

Führt einen eSIM-Profilermittlungsvorgang für die angegebene RSP-Serveradresse und die übereinstimmende ID aus.

Hinweis

Diese Funktionalität ist nur für Apps von Mobilfunkanbietern und UWP-Apps verfügbar, die privilegierten Zugriff von Mobilfunknetzbetreibern erhalten.

Wenn Sie diese API verwenden und Ihre App im Microsoft Store veröffentlichen möchten, müssen Sie eine spezielle Genehmigung anfordern, um die benutzerdefinierte Funktion Microsoft.eSIMManagement_8wekyb3d8bbwe verwenden zu können. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen.

Discover()

Führt einen eSIM-Profilermittlungsvorgang unter Verwendung der SMDS-Standardadresse aus.

Hinweis

Diese Funktionalität ist nur für Apps von Mobilfunkanbietern und UWP-Apps verfügbar, die privilegierten Zugriff von Mobilfunknetzbetreibern erhalten.

Wenn Sie diese API verwenden und Ihre App im Microsoft Store veröffentlichen möchten, müssen Sie eine spezielle Genehmigung anfordern, um die benutzerdefinierte Funktion Microsoft.eSIMManagement_8wekyb3d8bbwe verwenden zu können. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen.

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

Gibt zurück

Ein ESimDiscoverResult-Objekt , das das Ergebnis des Vorgangs darstellt.

Attribute

Windows-Anforderungen

Gerätefamilie
Windows 10, version 1903 (eingeführt in 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v8.0)
App-Funktionen
Microsoft.eSIMManagement_8wekyb3d8bbwe

Beispiele

Szenario 1

Ermitteln Sie das Profil mit einer angegebenen SM-DP+-Adresse und einer übereinstimmenden ID. Der Mobilfunkanbieter gibt der App die SMDP-Adresse, die ein FQDN eines Servers wie smdp.contoso.com und die MatchingID abcd1234 ist, um das Profil zu finden. Es wird davon ausgegangen, dass der Client bereits ein ESim-Objekt von ESimWatcher abgerufen hat.

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

Szenario 2

Ermitteln Eines Profils ohne Serverinformationen. Der Mobilfunkanbieter stellt keine Serverinformationen zum Herunterladen des Profils bereit. In diesem Fall kann die App den Ermittlungsprozess weiterhin starten. Die App durchläuft alle verfügbaren Profile für die eSIM. Dies kann zu Berührungsprofilen führen, die nicht zum Mobilfunkanbieter gehören, wenn mehrere Profile von der eSIM auffindbar sind. Ohne Informationen vom Mobilfunkanbieter ist dies jedoch eine Technik, die Sie verwenden können.

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

Szenario 3

Ermitteln Sie Profile mit dem angegebenen Unterfix für die Serveradresse. Der Mobilfunkanbieter hostet viele Profilserver, lehnt es jedoch aus Sicherheitsgründen ab, der App die Profilserveradresse zu geben. Die App wird aufgefordert, die auf dem Server gespeicherten Profile mit einem Domänennamen zu überprüfen, der auf contoso.comendet. Ein Teil der Logik ist mit der logik von Szenario 2 identisch. Der Hier gezeigte Beispielcode ruft die Funktion Scenario2_DiscoverProfile() auf.

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

Szenario 4

Ein Blick auf die verfügbaren Ermittlungsergebnisse. Eine eSIM-Hilfsprogramm-App zeigt die Liste der Ermittlungsergebnisse für den Benutzer an. Der Benutzer kann später basierend auf seinen Interessen auswählen, welcher der nächste Hop ist. Um die Liste abzurufen, ruft die App die Ermittlungs-API ohne Parameter auf.

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

Szenario 5

Synchronisierter API-Aufruf. Eine Hilfsprogramm-App versucht, zu ermitteln, ob Ermittlungsergebnisse für die eSIM verfügbar sind. Sie erstellen eine Funktion namens HasAvailableEventsToDiscover(). Es wird garantiert im Threadpool der App ausgeführt, und das Ergebnis soll synchron zurückgegeben werden.

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

Hinweise

Der Profilermittlungsvorgang umfasst die Kontaktaufnahme mit einem Remoteserver. Dieser Server kann entweder der Ermittlungsserver sein, dessen Adresse in der eSIM voreingestellt ist, oder eine Serveradresse, die von einem Mobilfunkanbieter (Mo) bereitgestellt wird. Der Server kann eine Liste von Ereignissen zurückgeben, die die Informationen des nächsten Serverhops enthalten, oder er kann profilmetadaten herunterladen. Sobald Ihre Anwendung die Profilmetadaten abgerufen hat, können Sie das Profil basierend auf Ihrer eigenen Geschäftslogik installieren oder ablehnen. Die Profilermittlung ist seriell, d. h. bis Ihre Anwendung die Installationsentscheidung für das aktuelle Profil trifft, ist es nicht zulässig, andere Profile zu ermitteln.

Für jeden Hop muss Ihre Anwendung den Hop besuchen, um zu wissen, welche Art von Daten vom Server zurückgegeben wird. Profilmetadaten können jedoch Downloadzeitlimits aufweisen. Daher sollte Ihre Anwendung unnötiges Herunterladen anderer Profilmetadaten vermeiden, wenn sie einen Hinweis darauf hat, wo sich das profil von Interesse befinden soll.

Gilt für:

Discover(String, String)

Führt einen eSIM-Profilermittlungsvorgang für die angegebene RSP-Serveradresse und die übereinstimmende ID aus.

Hinweis

Diese Funktionalität ist nur für Apps von Mobilfunkanbietern und UWP-Apps verfügbar, die privilegierten Zugriff von Mobilfunknetzbetreibern erhalten.

Wenn Sie diese API verwenden und Ihre App im Microsoft Store veröffentlichen möchten, müssen Sie eine spezielle Genehmigung anfordern, um die benutzerdefinierte Funktion Microsoft.eSIMManagement_8wekyb3d8bbwe verwenden zu können. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen.

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

Parameter

serverAddress
String

Platform::String

winrt::hstring

Eine Zeichenfolge, die eine RSP-Serveradresse enthält. Wenn serverAddress leer ist, verwendet die API die SMDS-Standardadresse.

matchingId
String

Platform::String

winrt::hstring

Eine Zeichenfolge, die die übereinstimmende ID enthält.

Gibt zurück

Ein ESimDiscoverResult-Objekt , das das Ergebnis des Vorgangs darstellt.

Attribute

Windows-Anforderungen

Gerätefamilie
Windows 10, version 1903 (eingeführt in 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v8.0)
App-Funktionen
Microsoft.eSIMManagement_8wekyb3d8bbwe

Beispiele

Codebeispiele finden Sie unter Ermitteln .

Hinweise

Weitere Informationen finden Sie unter Ermitteln .

Gilt für: