Share via


ESim.Discover Metode

Definisi

Overload

Discover()

Melakukan operasi penemuan profil eSIM menggunakan alamat SMDS default.

Catatan

Fungsionalitas ini hanya tersedia untuk aplikasi operator seluler dan aplikasi UWP yang diberikan akses istimewa oleh operator jaringan seluler.

Jika Anda ingin menggunakan API ini dan menerbitkan aplikasi Anda ke Microsoft Store, maka Anda harus meminta persetujuan khusus untuk menggunakan kemampuan kustom Microsoft.eSIMManagement_8wekyb3d8bbwe. Untuk informasi selengkapnya, lihat Kemampuan kustom.

Discover(String, String)

Melakukan operasi penemuan profil eSIM untuk alamat server RSP yang disediakan dan ID yang cocok.

Catatan

Fungsionalitas ini hanya tersedia untuk aplikasi operator seluler dan aplikasi UWP yang diberikan akses istimewa oleh operator jaringan seluler.

Jika Anda ingin menggunakan API ini dan menerbitkan aplikasi Anda ke Microsoft Store, maka Anda harus meminta persetujuan khusus untuk menggunakan kemampuan kustom Microsoft.eSIMManagement_8wekyb3d8bbwe. Untuk informasi selengkapnya, lihat Kemampuan kustom.

Discover()

Melakukan operasi penemuan profil eSIM menggunakan alamat SMDS default.

Catatan

Fungsionalitas ini hanya tersedia untuk aplikasi operator seluler dan aplikasi UWP yang diberikan akses istimewa oleh operator jaringan seluler.

Jika Anda ingin menggunakan API ini dan menerbitkan aplikasi Anda ke Microsoft Store, maka Anda harus meminta persetujuan khusus untuk menggunakan kemampuan kustom Microsoft.eSIMManagement_8wekyb3d8bbwe. Untuk informasi selengkapnya, lihat Kemampuan kustom.

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

Mengembalikan

Objek ESimDiscoverResult yang mewakili hasil operasi.

Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10, version 1903 (diperkenalkan dalam 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v8.0)
Kemampuan aplikasi
Microsoft.eSIMManagement_8wekyb3d8bbwe

Contoh

Skenario 1

Temukan profil dengan alamat SM-DP+ tertentu dan ID yang cocok. Operator seluler memberi aplikasi alamat SMDP, yang merupakan FQDN server seperti smdp.contoso.com dan MatchingID abcd1234 untuk menemukan profil. Asumsinya adalah bahwa klien telah mendapatkan objek ESim dari 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";
    }
}

Skenario 2

Temukan profil tanpa info server. Operator seluler tidak memberikan informasi server apa pun tentang profil yang akan diunduh. Dalam hal ini, aplikasi masih dapat memulai proses penemuan. Aplikasi ini melintasi semua profil yang tersedia untuk eSIM. Ini dapat menyebabkan profil menyentuh yang bukan milik operator seluler jika ada lebih dari satu profil yang dapat ditemukan oleh eSIM. Namun, tanpa informasi dari operator seluler, ini adalah teknik yang dapat Anda gunakan.

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

Skenario 3

Temukan profil dengan subfiks alamat server yang diberikan. Operator seluler menghosting banyak server profil tetapi menolak untuk memberikan alamat server profil ke aplikasi karena alasan keamanan. Aplikasi ini diminta untuk memeriksa profil yang disimpan di server dengan nama domain yang diakhir dengan contoso.com. Beberapa logika sama dengan Skenario 2. Contoh kode di sini memanggil fungsi 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;
}

Skenario 4

Intip hasil penemuan yang tersedia. Aplikasi utilitas eSIM menunjukkan daftar hasil penemuan untuk pengguna. Pengguna nantinya dapat memilih lompatan mana yang berikutnya berdasarkan minat mereka. Untuk mendapatkan daftar, aplikasi memanggil API penemuan tanpa parameter apa pun.

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

Skenario 5

Panggilan API yang disinkronkan. Aplikasi utilitas mencoba melihat apakah ada hasil penemuan yang tersedia untuk eSIM. Mereka membuat fungsi bernama HasAvailableEventsToDiscover(). Ini dijamin berjalan di threadpool aplikasi, dan ingin hasilnya dikembalikan secara sinkron.

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

Keterangan

Operasi penemuan profil melibatkan kontak server jarak jauh. Server tersebut dapat berupa server penemuan yang alamatnya telah diatur sebelumnya di eSIM, atau alamat server yang disediakan oleh operator seluler (MO). Server dapat mengembalikan daftar peristiwa yang berisi informasi hop server berikutnya, atau dapat mengunduh metadata profil. Setelah aplikasi Anda mendapatkan metadata profil, Anda dapat memilih untuk menginstal atau menolak profil berdasarkan logika bisnis Anda sendiri. Penemuan profil bersifat serial, yang berarti bahwa sampai aplikasi Anda membuat keputusan penginstalan untuk profil saat ini, tidak diizinkan untuk menemukan profil lain.

Untuk setiap lompatan, aplikasi Anda harus mengunjungi hop untuk mengetahui jenis data mana yang dikembalikan oleh server. Namun, metadata profil dapat memiliki batas waktu pengunduhan. Dengan demikian, aplikasi Anda harus menghindari unduhan metadata profil lain yang tidak perlu jika memiliki beberapa petunjuk di mana profil yang diinginkan harus.

Berlaku untuk

Discover(String, String)

Melakukan operasi penemuan profil eSIM untuk alamat server RSP yang disediakan dan ID yang cocok.

Catatan

Fungsionalitas ini hanya tersedia untuk aplikasi operator seluler dan aplikasi UWP yang diberikan akses istimewa oleh operator jaringan seluler.

Jika Anda ingin menggunakan API ini dan menerbitkan aplikasi Anda ke Microsoft Store, maka Anda harus meminta persetujuan khusus untuk menggunakan kemampuan kustom Microsoft.eSIMManagement_8wekyb3d8bbwe. Untuk informasi selengkapnya, lihat Kemampuan kustom.

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

String yang berisi alamat server RSP. Jika serverAddress kosong, API menggunakan alamat SMDS default.

matchingId
String

Platform::String

winrt::hstring

String yang berisi ID yang cocok.

Mengembalikan

Objek ESimDiscoverResult yang mewakili hasil operasi.

Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10, version 1903 (diperkenalkan dalam 10.0.18362.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v8.0)
Kemampuan aplikasi
Microsoft.eSIMManagement_8wekyb3d8bbwe

Contoh

Lihat Menemukan untuk contoh kode.

Keterangan

Lihat Menemukan untuk informasi selengkapnya.

Berlaku untuk