Web アカウント マネージャーWeb Account Manager

この記事では、Windows 10 Web アカウント マネージャー API を使い、AccountsSettingsPane を利用して、ユニバーサル Windows プラットフォーム (UWP) アプリを外部の ID プロバイダー (Microsoft や Facebook など) に接続する方法について説明します。This article describes how to use the AccountsSettingsPane to connect your Universal Windows Platform (UWP) app to external identity providers, like Microsoft or Facebook, using the Windows 10 Web Account Manager APIs. ユーザーの Microsoft アカウントを使用するためにユーザーの許可を求める方法、アクセス トークンを取得する方法、アクセス トークンを使って基本的な操作 (プロファイル データの取得や OneDrive アカウントへのファイルのアップロードなど) を実行する方法を学習してください。You'll learn how to request a user's permission to use their Microsoft account, obtain an access token, and use it to perform basic operations (like get profile data or upload files to their OneDrive account). この手順は、ユーザーの許可を得て、Web アカウント マネージャーをサポートする ID プロバイダーにアクセスするための手順と似ています。The steps are similar for getting user permission and access with any identity provider that supports the Web Account Manager.

注意

完全なコード サンプルについては、GitHub の WebAccountManagement サンプルをご覧ください。For a complete code sample, see the WebAccountManagement sample on GitHub.

準備Get set up

まず、Visual Studio で新しい空白のアプリを作成します。First, create a new, blank app in Visual Studio.

次に、ID プロバイダーに接続するために、アプリをストアに関連付ける必要があります。Second, in order to connect to identity providers, you'll need to associate your app with the Store. これを行うには、プロジェクトを右クリックして、[ストア] > [アプリケーションをストアと関連付ける] を選択し、ウィザードの指示に従います。To do this, right click your project, choose Store > Associate app with the store, and follow the wizard's instructions.

3 番目に、シンプルな XAML ボタンと 2 つのテキスト ボックスから成る、非常に基本的な UI を作成します。Third, create a very basic UI consisting of a simple XAML button and two text boxes.

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <Button x:Name="LoginButton" Content="Log in" Click="LoginButton_Click" />
    <TextBlock x:Name="UserIdTextBlock"/>
    <TextBlock x:Name="UserNameTextBlock"/>
</StackPanel>

そして、コード ビハインドでイベント ハンドラーをボタンにアタッチします。And an event handler attached to your button in the code-behind:

private void LoginButton_Click(object sender, RoutedEventArgs e)
{   
}

最後に、次の名前空間を追加します。これにより、後で参照の問題について考える必要がなくなります。Lastly, add the following namespaces so you don't have to worry about any reference issues later:

using System;
using Windows.Security.Authentication.Web.Core;
using Windows.System;
using Windows.UI.ApplicationSettings;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Data.Json;
using Windows.UI.Xaml.Navigation;
using Windows.Web.Http;

アカウント設定ウィンドウの表示Show the accounts settings pane

システムには、ID プロバイダーを管理するための組み込みのユーザー インターフェイスと、AccountsSettingsPane という名前の Web アカウントが用意されています。The system provides a built-in user interface for managing identity providers and web accounts called AccountsSettingsPane. これを次のように表示することができます。You can show it like this:

private void LoginButton_Click(object sender, RoutedEventArgs e)
{
    AccountsSettingsPane.Show(); 
}

アプリを実行して「ログイン」ボタンをクリックすると、空のウィンドウが表示されます。If you run your app and click the "Log in" button, it should display an empty window.

アカウント設定ウィンドウ

システムは UI シェルのみを提供するため、このウィンドウは空になっています。開発者がこのウィンドウに ID プロバイダーをプログラムで入力します。The pane is empty because the system only provides a UI shell - it's up to the developer to programatically populate the pane with the identity providers.

AccountCommandsRequested への登録Register for AccountCommandsRequested

ウィンドウにコマンドを追加するには、まず AccountCommandsRequested イベント ハンドラーに登録します。To add commands to the pane, we start by registering for the AccountCommandsRequested event handler. これにより、ユーザーがウィンドウを表示するよう求めたとき (XAML ボタンのクリックなど) に構築したロジックをシステムが実行するようにできます。This tells the system to run our build logic when the user asks to see the pane (e.g., clicks our XAML button).

コードビハインドで、OnNavigatedTo イベントと OnNavigatedFrom イベントを上書きし、次のコードを追加します。In your code behind, override the OnNavigatedTo and OnNavigatedFrom events and add the following code to them:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    AccountsSettingsPane.GetForCurrentView().AccountCommandsRequested += BuildPaneAsync; 
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    AccountsSettingsPane.GetForCurrentView().AccountCommandsRequested -= BuildPaneAsync; 
}

ユーザーは頻繁にはアカウントを操作しないため、この方法でイベント ハンドラーを登録および登録解除することは、メモリ リークを防ぐために役立ちます。Users don't interact with accounts very often, so registering and deregistering your event handler in this fashion helps prevent memory leaks. この方法では、カスタマイズしたウィンドウは (ユーザーが "設定" ページや "ログイン" ページにいるなどの理由で) ユーザーが使う可能性が高いときにのみメモリ内にあります。This way, your customized pane is only in memory when there's a high chance a user is going to ask for it (because they're on a "settings" or "login" page, for example).

アカウント設定ウィンドウを構築します。Build the account settings pane

AccountsSettingsPane が表示されるたびに、BuildPaneAsync メソッドが呼び出されます。The BuildPaneAsync method is called whenever the AccountsSettingsPane is shown. ここに、ウィンドウに表示されるコマンドをカスタマイズするコードを記述します。This is where we'll put the code to customize the commands shown in the pane.

まず、遅延を取得します。Start by obtaining a deferral. これにより、構築が完了するまで AccountsSettingsPane の表示を遅延するようシステムに指示を出すことができます。This tells the system to delay showing the AccountsSettingsPane until we're finished building it.

private async void BuildPaneAsync(AccountsSettingsPane s,
    AccountsSettingsPaneCommandsRequestedEventArgs e)
{
    var deferral = e.GetDeferral();

    deferral.Complete(); 
}

次に、WebAuthenticationCoreManager.FindAccountProviderAsync メソッドを使ってプロバイダーを取得します。Next, get a provider using the WebAuthenticationCoreManager.FindAccountProviderAsync method. プロバイダーの URL はプロバイダーによって異なり、プロバイダーのドキュメントに記載されています。The URL for the provider varies based on the provider and can be found in the provider's documentation. Microsoft アカウントと Azure Active Directory では、"https://login.microsoft.com" です。For Microsoft Accounts and Azure Active Directory, it's "https://login.microsoft.com".

private async void BuildPaneAsync(AccountsSettingsPane s,
    AccountsSettingsPaneCommandsRequestedEventArgs e)
{
    var deferral = e.GetDeferral();

    var msaProvider = await WebAuthenticationCoreManager.FindAccountProviderAsync(
        "https://login.microsoft.com", "consumers"); 

    deferral.Complete(); 
}

文字列 "consumers" をオプションの authority パラメーターに渡すことにも注意してください。Notice that we also pass the string "consumers" to the optional authority parameter. これは、Microsoft は "消費者 (consumers)" 向けの Microsoft アカウント (MSA) と、"組織 (organizations)" 向けの Azure Active Directory (AAD) という、2 種類の認証を提供しているためです。This is because Microsoft provides two different types of authentication - Microsoft Accounts (MSA) for "consumers", and Azure Active Directory (AAD) for "organizations". "consumers" 権限は、MSA オプションを必要としていることを示します。The "consumers" authority indicates we want the MSA option. 企業向けのアプリを開発している場合は、代わりに文字列 "organizations" を使います。If you're developing an enterprise app, use the string "organizations" instead.

最後に、次のような新しい WebAccountProviderCommand を作成して、AccountsSettingsPane にプロバイダーを追加します。Finally, add the provider to the AccountsSettingsPane by creating a new WebAccountProviderCommand like this:

private async void BuildPaneAsync(AccountsSettingsPane s,
    AccountsSettingsPaneCommandsRequestedEventArgs e)
{
    var deferral = e.GetDeferral();

    var msaProvider = await WebAuthenticationCoreManager.FindAccountProviderAsync(
        "https://login.microsoft.com", "consumers");

    var command = new WebAccountProviderCommand(msaProvider, GetMsaTokenAsync);  

    e.WebAccountProviderCommands.Add(command);

    deferral.Complete(); 
}

新しい WebAccountProviderCommand に渡した GetMsaToken メソッドはまだ存在していないため (次の手順で構築します)、現時点では、このメソッドを空のメソッドとして自由に追加できます。The GetMsaToken method we passed to our new WebAccountProviderCommand doesn't exist yet (we'll build that in the next step), so feel free to add it as an empty method for now.

上記のコードを実行すると、ウィンドウは次のようになります。Run the above code and your pane should look something like this:

アカウント設定ウィンドウ

トークンの要求Request a token

Microsoft アカウントのオプションが AccountsSettingsPane に 表示されたら、ユーザーがこのオプションを選択したときに、どのような動作を行うかを処理する必要があります。Once we have the Microsoft Account option displaying in the AccountsSettingsPane, we need to handle what happens when the user selects it. ユーザーが自分の Microsoft アカウントを使ってログインしたときに GetMsaToken メソッドが発生するように登録しているため、ここでトークンを取得します。We registered our GetMsaToken method to fire when the user chooses to log in with their Microsoft Account, so we'll obtain the token there.

トークンを取得するには、次のような RequestTokenAsync メソッドを使います。To obtain a token, use the RequestTokenAsync method like this:

private async void GetMsaTokenAsync(WebAccountProviderCommand command)
{
    WebTokenRequest request = new WebTokenRequest(command.WebAccountProvider, "wl.basic");
    WebTokenRequestResult result = await WebAuthenticationCoreManager.RequestTokenAsync(request);
}

この例では、スコープ パラメーターに文字列 "wl.basic" を渡します。In this example, we pass the string "wl.basic" to the scope parameter. スコープは、特定のユーザーの提供サービスから要求する情報の種類を表します。Scope represents the type of information you are requesting from the providing service on a specific user. スコープには、名前やメール アドレスなど、ユーザーの基本情報のみへのアクセス権を与えるものや、ユーザーの写真やメールの受信トレイなど、機密情報へのアクセス権を与えるものもあります。Certain scopes provide access only to a user's basic information, like name and email address, while other scopes might grant access to sensitive information such as the user's photos or email inbox. 一般的に、アプリではその機能を実行するために必要な最も制限の多いスコープが使われます。Generally, your app should use the least permissive scope necessary to achieve its function. サービス プロバイダーからは、サービス プロバイダーのサービスで使うトークンを取得する場合に必要となるスコープについて示したドキュメントが提供されます。Service providers will provide documentation on which scopes are needed to get tokens for use with their services.

ヒント

必要に応じて、アプリは、(既定のメール アドレスを持つユーザー フィールドを設定する) にログイン ヒントを表示またはサインイン エクスペリエンスに関連するその他の特殊なプロパティを使用する場合は、 WebTokenRequest.AppProperties プロパティの一覧します。Optionally, if your app uses a login hint (to populate the user field with a default email address) or other special property related to the sign-in experience, list it in the WebTokenRequest.AppProperties property. これにより、キャッシュ内のアカウントの不一致ことを web アカウントをキャッシュする場合、プロパティを無視するように、システムは、なります。This will cause the system to ignore the property when caching the web account, which prevents account mismatches in the cache.

企業向けのアプリを開発している場合は、Azure Active Directory (AAD) インスタンスに接続し、通常の MSA サービスではなく Microsoft Graph API を使用します。If you're developing an enterprise app, you'll likely want to connect to an Azure Active Directory (AAD) instance and use the Microsoft Graph API instead of regular MSA services. このシナリオでは、次のコードを代わりに使います。In this scenario, use the following code instead:

private async void GetAadTokenAsync(WebAccountProviderCommand command)
{
    string clientId = "your_guid_here"; // Obtain your clientId from the Azure Portal
    WebTokenRequest request = new WebTokenRequest(provider, "User.Read", clientId);
    request.Properties.Add("resource", "https://graph.microsoft.com");
    WebTokenRequestResult result = await WebAuthenticationCoreManager.RequestTokenAsync(request);
}

この記事の残りの部分では、引き続き MSA シナリオについて説明しますが、AAD 用のコードもよく似ています。The rest of this article continues describing the MSA scenario, but the code for AAD is very similar. GitHub の完全なサンプルを含め、AAD/Graph について詳しくは、Microsoft Graph のドキュメントをご覧ください。For more info on AAD/Graph, including a full sample on GitHub, see the Microsoft Graph documentation.

トークンの使用Use the token

RequestTokenAsync メソッドは、要求の結果を含む WebTokenRequestResult オブジェクトを返します。The RequestTokenAsync method returns a WebTokenRequestResult object, which contains the results of your request. 要求が成功した場合には、トークンが含まれます。If your request was successful, it will contain a token.

private async void GetMsaTokenAsync(WebAccountProviderCommand command)
{
    WebTokenRequest request = new WebTokenRequest(command.WebAccountProvider, "wl.basic");
    WebTokenRequestResult result = await WebAuthenticationCoreManager.RequestTokenAsync(request);

    if (result.ResponseStatus == WebTokenRequestStatus.Success)
    {
        string token = result.ResponseData[0].Token; 
    }
}

注意

トークンを要求したときにエラーが発生した場合、最初の手順で説明したように、アプリを Microsoft Store に関連付けたかどうかを確認してください。If you receive an error when requesting a token, make sure you've associated your app with the Store as described in step one. この手順を省略すると、アプリでトークンを取得することはできません。Your app won't be able to get a token if you skipped this step.

トークンを取得したら、トークンを使って、プロバイダーの API を呼び出ことができます。Once you have a token, you can use it to call your provider's API. 次のコードでは、ユーザー情報のための Microsoft Live API を呼び出してユーザーに関する基本情報を取得し、UI に表示します。In the code below, we'll call the user info Microsoft Live API to obtain basic information about the user and display it in our UI. ただし、ほとんどの場合、取得したトークンは保存してから、別のメソッドで使用することをお勧めします。Note however that in most cases it is recommended that you store the token once obtained and then use it in a separate method.

private async void GetMsaTokenAsync(WebAccountProviderCommand command)
{
    WebTokenRequest request = new WebTokenRequest(command.WebAccountProvider, "wl.basic");
    WebTokenRequestResult result = await WebAuthenticationCoreManager.RequestTokenAsync(request);

    if (result.ResponseStatus == WebTokenRequestStatus.Success)
    {
        string token = result.ResponseData[0].Token; 

        var restApi = new Uri(@"https://apis.live.net/v5.0/me?access_token=" + token);

        using (var client = new HttpClient())
        {
            var infoResult = await client.GetAsync(restApi);
            string content = await infoResult.Content.ReadAsStringAsync();

            var jsonObject = JsonObject.Parse(content);
            string id = jsonObject["id"].GetString();
            string name = jsonObject["name"].GetString();

            UserIdTextBlock.Text = "Id: " + id; 
            UserNameTextBlock.Text = "Name: " + name;
        }
    }
}

さまざまな REST API の呼び出し方法は、プロバイダーによって異なります。トークンの使い方に関する情報については、プロバイダーの API ドキュメントをご覧ください。How you call various REST APIs varies between providers; see the provider's API documentation for information on how to use your token.

将来の使用に備えてアカウントを保存するStore the account for future use

トークンはユーザーに関する情報をすぐに取得するために便利ですが、通常はさまざまな有効期限を持ちます。たとえば、MSA トークンは数時間のみ有効です。Tokens are useful for immediately obtaining information about a user, but they usually have varying lifespans - MSA tokens, for instance, are only valid for a few hours. ただし、トークンの有効期限が切れるたびに AccountsSettingsPane を再表示する必要はありません。Fortunately, you don't need to re-show the AccountsSettingsPane each time a token expires. ユーザーが一度アプリを承認すると、将来使うためにユーザーのアカウント情報を保存できます。Once a user has authorized your app once, you can store the user's account information for future use.

これを行うには、WebAccount クラスを使います。To do this, use the WebAccount class. WebAccount は、トークンの要求で使ったメソッドと同じメソッドによって返されます。A WebAccount is returned by the same method you used to request the token:

private async void GetMsaTokenAsync(WebAccountProviderCommand command)
{
    WebTokenRequest request = new WebTokenRequest(command.WebAccountProvider, "wl.basic");
    WebTokenRequestResult result = await WebAuthenticationCoreManager.RequestTokenAsync(request);

    if (result.ResponseStatus == WebTokenRequestStatus.Success)
    {
        WebAccount account = result.ResponseData[0].WebAccount; 
    }
}

WebAccount インスタンスを取得すると、これを簡単に保存することができます。Once you have a WebAccount instance, you can easily store it. 次の例では、LocalSettings を使います。In the following example, we use LocalSettings. LocalSettings やユーザー データを保存するための他のメソッドの使用方法について詳しくは、「Store and retrieve app settings and data」(アプリの設定とデータを保存して取得する) をご覧ください。For more information on using LocalSettings and other methods to store user data, see Store and retrieve app settings and data.

private async void StoreWebAccount(WebAccount account)
{
    ApplicationData.Current.LocalSettings.Values["CurrentUserProviderId"] = account.WebAccountProvider.Id;
    ApplicationData.Current.LocalSettings.Values["CurrentUserId"] = account.Id; 
}

その後で、次のような非同期メソッドを使い、保存された WebAccount を利用して、トークンの取得をバックグラウンドで実行することができます。Then, we can use an asynchronous method like the following to attempt to obtain a token in the background with the stored WebAccount.

private async Task<string> GetTokenSilentlyAsync()
{
    string providerId = ApplicationData.Current.LocalSettings.Values["CurrentUserProviderId"]?.ToString();
    string accountId = ApplicationData.Current.LocalSettings.Values["CurrentUserId"]?.ToString();

    if (null == providerId || null == accountId)
    {
        return null; 
    }

    WebAccountProvider provider = await WebAuthenticationCoreManager.FindAccountProviderAsync(providerId);
    WebAccount account = await WebAuthenticationCoreManager.FindAccountAsync(provider, accountId);

    WebTokenRequest request = new WebTokenRequest(provider, "wl.basic");

    WebTokenRequestResult result = await WebAuthenticationCoreManager.GetTokenSilentlyAsync(request, account);
    if (result.ResponseStatus == WebTokenRequestStatus.UserInteractionRequired)
    {
        // Unable to get a token silently - you'll need to show the UI
        return null; 
    }
    else if (result.ResponseStatus == WebTokenRequestStatus.Success)
    {
        // Success
        return result.ResponseData[0].Token;
    }
    else
    {
        // Other error 
        return null; 
    }
}

上記のメソッドは、AccountsSettingsPane を構築するコードの直前に配置します。Place the above method just before the code that builds the AccountsSettingsPane. トークンをバックグラウンドで取得する場合は、ウィンドウを表示する必要はありません。If the token is obtained in the background, there is no need to show the pane.

private void LoginButton_Click(object sender, RoutedEventArgs e)
{
    string silentToken = await GetMsaTokenSilentlyAsync();

    if (silentToken != null)
    {
        // the token was obtained. store a reference to it or do something with it here.
    }
    else
    {
        // the token could not be obtained silently. Show the AccountsSettingsPane
        AccountsSettingsPane.Show();
    }
}

通知なしでのトークンの取得は非常に単純なため、(トークンの有効期限がいつ切れても大丈夫なように) セッション間でのトークンの更新には、既存のトークンをキャッシュするのではなく、このプロセスを使います。Because obtaining a token silently is very simple, you should use this process to refresh your token between sessions rather than caching an existing token (since that token might expire at any time).

注意

上記の例は、基本的な成功と失敗のケースのみを扱っています。The example above only covers basic success and fail cases. アプリは特殊なシナリオ (ユーザーによってアプリのアクセス許可が無効にされた場合や、Windows からユーザーのアカウントが削除された場合など) も考慮し、適切に処理する必要があります。Your app should also account for unusual scenarios (like a user revoking your app's permission or removing their account from Windows, for example) and handle them gracefully.

保存されたアカウントの削除Remove a stored account

Web アカウントを保持するとき、場合によっては、ユーザーが自分のアカウントとアプリの関連付けを解除できるようにする必要があります。If you persist a web account, you may want to give your users the ability to disassociate their account with your app. これにより、することが効果的に「ログアウト」アプリの: 起動時、アカウント情報が自動的に読み込まれるはなくなりました。This way, they can effectively "log out" of the app: their account information will no longer be loaded automatically upon launch. これを行うには、まず保存されたアカウントとプロバイダーの情報を記憶域から削除します。To do this, first remove any saved account and provider information from storage. 次に、SignOutAsync を呼び出してキャッシュをクリアし、アプリが保持している可能性がある既存のトークンをすべて無効にします。Then call SignOutAsync to clear the cache and invalidate any existing tokens your app may have.

private async Task SignOutAccountAsync(WebAccount account)
{
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserProviderId");
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserId"); 
    account.SignOutAsync(); 
}

WebAccountManager をサポートしていないプロバイダーの追加Add providers that don't support WebAccountManager

サービスからの認証をアプリに統合するときに、そのサービスが WebAccountManager をサポートしていない場合でも (Google+ や Twitter など)、そのプロバイダーを AccountsSettingsPane に手動で追加できます。If you want to integrate authentication from a service into your app but that service doesn't support WebAccountManager - Google+ or Twitter, for example - you can still manually add that provider to the AccountsSettingsPane. これを行うには、新しい WebAccountProvider オブジェクトを作成し、独自の名前と .png アイコンを指定してから、WebAccountProviderCommands リストに追加します。To do so, create a new WebAccountProvider object and provide your own name and .png icon, then and add it to the WebAccountProviderCommands list. いくつかのスタブ コードを次に示します。Here's some stub code:

private async void BuildPaneAsync(AccountsSettingsPane s, AccountsSettingsPaneCommandsRequestedEventArgs e)
{
   // other code here 

   var twitterProvider = new WebAccountProvider("twitter", "Twitter", new Uri(@"ms-appx:///Assets/twitter-auth-icon.png")); 
   var twitterCmd = new WebAccountProviderCommand(twitterProvider, GetTwitterTokenAsync);
   e.WebAccountProviderCommands.Add(twitterCmd);   

   // other code here
}

private async void GetTwitterTokenAsync(WebAccountProviderCommand command)
{
   // Manually handle Twitter login here
}

注意

この例では、アイコンを AccountsSettingsPane に追加し、指定されたメソッド (この場合は GetTwitterTokenAsync) をアイコンのクリック時に実行するだけです。This only adds an icon to the AccountsSettingsPane and runs the method you specify when the icon is clicked (GetTwitterTokenAsync, in this case). 実際の認証を処理するコードを提供する必要があります。You must provide the code that handles the actual authentication. 詳しくは、「(Web 認証ブローカー)[web-authentication-broker]」を参照してください。REST サービスを使った認証のためのヘルパー メソッドが提供されています。For more information, see (Web authentication broker)[web-authentication-broker], which provides helper methods for authenticating using REST services.

カスタム ヘッダーの追加Add a custom header

次のように、HeaderText プロパティを使ってアカウント設定ウィンドウをカスタマイズできます。You can customize the account settings pane using the HeaderText property, like this:

private async void BuildPaneAsync(AccountsSettingsPane s, AccountsSettingsPaneCommandsRequestedEventArgs e)
{
    // other code here 

    args.HeaderText = "MyAwesomeApp works best if you're signed in.";   

    // other code here
}

アカウント設定ウィンドウ

ヘッダー テキストを長くしすぎないでください。短く簡潔なテキストにします。Don't go overboard with header text; keep it short and sweet. ログイン プロセスが複雑で、詳しい情報を表示する必要がある場合には、カスタム リンクを使ってユーザーを別のページにリンクします。If your login process is complicated and you need to display more information, link the user to a separate page using a custom link.

サポートされている WebAccountProviders の下にリンクとして表示されるカスタム コマンドを AccountsSettingsPane に追加することができます。You can add custom commands to the AccountsSettingsPane, which appear as links below your supported WebAccountProviders. カスタム コマンドは、プライバシー ポリシーの表示や問題が発生したユーザーのためのサポート ページの起動などの、ユーザー アカウントに関連する単純なタスクに適しています。Custom commands are great for simple tasks related to user accounts, like displaying a privacy policy or launching a support page for users having trouble.

次に例を示します。Here's an example:

private async void BuildPaneAsync(AccountsSettingsPane s, AccountsSettingsPaneCommandsRequestedEventArgs e)
{
    // other code here 

    var settingsCmd = new SettingsCommand(
        "settings_privacy", 
        "Privacy policy", 
        async (x) => await Launcher.LaunchUriAsync(new Uri(@"https://privacy.microsoft.com/en-US/"))); 

    e.Commands.Add(settingsCmd); 

    // other code here
}

アカウント設定ウィンドウ

理論上は、あらゆることのために設定コマンドを使うことができます。Theoretically, you can use settings commands for anything. ただし、上記のような、直観的なアカウント関連のシナリオにのみ使うことをお勧めします。However, we suggest limiting their use to intuitive, account-related scenarios like those described above.

関連項目See also

Windows.Security.Authentication.Web.Core 名前空間Windows.Security.Authentication.Web.Core namespace

Windows.Security.Credentials 名前空間Windows.Security.Credentials namespace

AccountsSettingsPane クラスAccountsSettingsPane class

Web 認証ブローカーWeb authentication broker

Web アカウント管理のサンプルWeb account management sample

ランチ スケジューラ アプリLunch Scheduler app