ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Appleでサインインの紹介
Appleでサインインは、ユーザーがすでに持っているApple IDでAppに迅速かつ簡単にサインインできる方法です。このセッションでは、Appleでサインイン ボタンをAppやWebサイトに追加して新しいお客様を獲得し、Appleでサインインに組み込まれたセキュリティ、不正防止、プライバシー保護機能を活用する簡単な方法について説明します。
リソース
関連ビデオ
WWDC21
WWDC20
WWDC19
-
ダウンロード
(音楽)
(拍手) こんにちは 私はゴークルです 今日は ディマやジョナサンと一緒に Sign In with Appleについて お話しします
まず 主要機能の概要を説明し 次に Appへの実装方法 そして デモを行います 最後は クロスプラットフォームと ベストプラクティスの話です
Sign In with Appleでは アカウント設定と サインインが簡単にできます とても安全で 機密性を維持できます ユーザにとっても プライバシーの面からもです あなたのAppとユーザとの関わりには Appleは一切 関知しません ですからAppleからの追跡を 心配することなく Sign In with Appleを実行できます
ボタンをタップすると どうなるか見てみましょう 情報が事前に入力された シートが出ます 名前やメールなどの情報です どのメールを共有するか 選択できます “Continue”をタップすれば
完了です アプリケーションに サインインします
Appが 固有のIDを取得します
名前と確認済みメールアドレスも取得し ユーザに連絡できます そして 何よりもすばらしいのは 安全な2ファクタ認証アカウントです こんなに簡単です
さらに すべてのデバイスで シームレスに動作します
新しいデバイスでは タップだけで 既存のアカウントが使えます これで利用できます とても速く 簡単です
このように アカウント設定が 非常に簡単です フォームの入力はなく タップだけです ユーザはApple IDを使って あなたのAppを 既にダウンロードしています だから タップだけで 完全に連携できるのです
また 確認済みのメールアドレスも 取得できます このメールアドレスは Appleが連絡に使用するものです 確認用のメールを送って リンクをクリックさせるなどの 二度手間を省くことができます Appleがすでに行っています Sign In with Appleでは すぐに― 使えるメールが届きます 追加の認証は不要です
アドレスの共有に 抵抗を感じるユーザもいます 偽のメールを 受け取るかもしれません Sign In with Appleが解決します Hide My Emailオプションでは 秘匿されたメールアドレスを利用して 確認ずみの受信ボックスに 転送します すごいですね
Appleの Private Email Relayシステムが ユーザの確認済みメールアドレスに メールを転送します 返信もできるので 双方向で有効です
あらゆる種類の 商用通信に使用できます ユーザに届くメッセージを Appleは 一切保持しません 要約すると Appで すぐ使える 確認ずみメールです
Sign In with Appleでは パスワードを覚える必要も ありません
これは安心ですね さらに 受け取るアカウントはすべて 2ファクタ認証で保護されています 最適なアカウントです パスワードなし 2ファクタ認証 コストもなし ユーザへのあつれきもありません 優れたビルトインセキュリティです
アカウント詐欺は 難しい問題ですが Appleは独自の支援をしています
Sign In with Appleでは 新しい方法で ユーザが本物であるという 確信を得られます 高度なインテリジェンスと
アカウント情報から それを実在か不明かの 2値に抽象化します 本物のユーザには 最高の待遇を与えましょう これは信頼度の高い指標です
不明の場合 ユーザか Botのいずれかです このようなユーザは 新規アカウントと 同じように扱います
これが アカウント詐欺対策の Real User Indicator = リアルユーザー判定指標です
最後に Sign In with Appleは クロスプラットフォームです すべてのプラットフォームで 利用できます 例えば iOS macOS watchOS tvOSです
それぞれに合った形で サインインできます JavaScript APIを使用すると Web上だけでなく WindowsやAndroidでも使用できます あとで詳しく説明します (拍手) 簡単なアカウント設定 確認済みメール ビルトインセキュリティ 詐欺対策 クロスプラットフォーム 以上が Sign In with Appleの 主要機能です 次は ディマが登壇し Appへの 実装方法を話します ディマ (拍手) ありがとう こんにちは すばらしい機能ですね さて 実装に何が必要か?
始めるには 4つのポイントが必要です まず Sign In with Appleボタン
次に認証要求 ユーザがUIを見て 一瞬のFace IDチェックの後 認証結果が返されます
この時点で 結果を確認し アカウントを作成します
認証情報の状態は 変更される可能性があり 適切に処理する必要があります
まず Sign In with Appleボタンです
たった数行のコードで ボタンを追加できます
初期化したら
アクションを追加 これだけです
このボタンは カスタマイズが可能です 表示スタイルやラベルが選べます 有効なAPIを使用していれば それに似ています
ユーザがアクションを実行したら リクエストを構成して 認証を実行します
こうします
Apple IDの承認要求を初期化します コード一行です これだけでアカウントを作成できます
ベストなユーザー体験のために フルネームとメールアドレスが必要であれば requestedScopesを 設定します
この情報は 本当に必要な場合のみ 最小限を要求してください
リクエストを構成したら ASAuthorizationControllerを 初期化し
結果を取得する為の デリゲートを設定します 最後に リクエストを実行します ユーザに提示される 認証用のUIが開始されます Face IDチェックの後 認証結果が返されます この処理を説明します
メソッドを実行すると 認証オブジェクトが取得されます これにはAppleIDCredentialの プロパティがあります 処理する前に確認が必要です アカウント作成に必要な情報が 含まれています
キャンセルやエラーの際は didCompleteWithErrorを介し Appに通知されます
いずれも メインキューで行われます
では 結果について 見ていきましょう
まず ユーザIDです チームを対象とした固有のIDです
すごいですね 情報は異なるプラットフォームや システム WebやAndroidから取得できます いずれもデベロッパアカウントの チームIDに 関連付けられています これがキーです 次に 認証データやIDトークン 認証コードを返します Apple IDサーバーで更新できるのは 有効期間が短いトークンです 既存の認証システムに 簡単に導入できます
必要に応じて アカウント情報― 名前と確認済みメールアドレスを返します メールアドレスはAppleが確認済みなので 他の確認は必要なくなります
最後に 前述した― Real User Indicatorです サインイン操作が簡素化されます
アカウントが作成されました Appを使用中に 認証状態が変わることがあります 適切な処理が必要です
Apple IDの使用中止や サインアウトが考えられます このような場合も 適切に処理します このため 状態を照会できる高速APIを 公開しています
Apple ID Credentialより 返されたユーザーIDを使用し GetCredentialStateの呼び出しを チェックして― 現在の状態を取得できます 高速なAPIです 3つの状態を返します ユーザが認証されれば 使用を継続させます
取り消された場合は―
ユーザをサインアウトさせ 再度サインインを誘導します
notFoundは 確立された関係が ないことを意味します
このAPIは高速です 起動時に呼び出して 状態に合わせた操作を提供します
さらに NSNotificationCenterを通じて 状態が失効になった際に 通知します ユーザをサインアウトさせ 再びサインインさせます
ユーザはAppとの関係を確立しました アカウントを作成し Appを使っています ユーザが別のデバイスを入手した時も Sign In with Appleが有用です 新しいデバイスでは
ワンタップサインインが 表示されます Face IDでログインできます
既にあなたのシステムにアカウントを 所有しているケースも考えられます その場合 同じAPIで iCloud Keychainのパスワードも使えます Apple IDとiCloud Keychain 両方で認証を要求します ユーザは 既存のクレデンシャルを 使い続ける様示唆されます エラーの場合は 通常のサインインとします 既存のローカルアカウントが ない場合は この起動関数を呼び出します 実装は簡単です
まず Apple IDの認証リクエストと パスワードリクエストの リクエスト配列を初期化します たったこれだけです
配列を渡し 実行します
既存のSign in with Appleのログインがあれば AppleIDCredentialが返ります
iCloudキーチェーンパスワードが あれば その認証情報が返されます それを使用して ユーザをサインインさせます
認証情報がなければ 標準のログインフローを表示します
これらのリクエストにより アカウントの重複を防ぎます 再度 使用する際の操作の 合理化もできます
では ジョナサンに デモをしてもらいます
(拍手) 皆さん こんにちは Sign In with Appleを使えば サインインや アカウント作成が簡単です パスワードのAutoFillと 自動保存は有用ですが さらに改良しました Sign In with AppleのネイティブAPIを使って パスワードのAutoFillもー 統合することができます Apple IDを使ったサインインに関する― 3つのトピックを紹介します まずログインフォームに Sign In with Appleボタンを追加します 次に 既存のクレデンシャルに ワンタップでサインインできる― Quick Sign in Flowの 実装方法を紹介します 最後に ユーザが 確実にサインインできるよう 認証状態を確認する方法を 話します
Juiceという テストAppを使います これは 一般的なログインフォームです Sign In with Appleを追加します
始めましょう 前提条件として必要なのは Sign In with Apple機能の追加です
プロジェクト設定で アプリケーションを選択し “Signing & Capabilities”に 移動します すでに追加してあります
追加するには “Capability”ボタンで検索します
Xcodeが適切なエントリーを追加します Apple IDに機能が追加されたかが Developer のポータルで確認されます
まだ行っていない場合は サインインして 確認してください
ここでは Associated Domains Capabilityを説明します
ASAuthorizationPasswordRequestを 行った時 パスワードが戻され ユーザに提示されます リクエストの追加は あとでデモします 正確な認証情報を 提供させる方法は 2017年のPassword Autofill for Appsを 見てください 今年のWhat's New in Authenticationも 参考になります Xcodeに戻り Juiceを見てみましょう
APIの主要機能を見せる 単純なデモAppです ラベルの下に Login Provider Stack Viewがあります ここにボタンを追加します
ボタンの追加は 3つの手順で行います Provider Stack Viewに ボタンを追加し タップしたときに実行する 関数を定義します 最後に 必要なプロトコルを使用し 結果を返します
では まず UIにボタンを追加します LoginViewController.swiftファイルを 見てみましょう
“AuthenticationServices” モジュールをインポートします
“setupProviderLoginView”という 関数を定義し ASAuthorizationAppleIDButtonを 初期化しています 次に“handleAuthorizationAppleID ButtonPress”関数を アクションとして追加します LoginProviderStackViewに ボタンを追加し UIに表示します viewDidLoad関数を オーバーライドしているので “setupProviderLoginView”を呼び出し 追加します では実行してみます
ボタンが表示されました 次のステップで ボタンのアクションを定義します
この関数の説明をします
ASAuthorizationAppleIDRequestを 初期化します AppleIDProviderを使用します 次に requestedScopesプロパティを フルネームとメールを含む 配列に設定します
ここは重要です この設定に応じて ユーザに情報共有を求めます 情報は Apple ID Credentialに― 戻されます 必要な物だけリクエストします アクションに戻ります
コントローラを初期化し
デリゲートと presentationContextProviderを “self”に設定します “performRequest”を呼び出します
定義できたので 実行しましょう
ボタンをタップすると―
requestedScopesが 要求されます 設定どおりです
キャンセルします
このデリゲートのpresentationContextProviderを覚えていますか? これに必要なauthenticationServicesプロトコルに準拠します
下に書き出しました
ASAuthorizationControllerDelegateには 2つの関数があります 認証を返す関数と エラーを返す関数です
AuthorizationControllerdidの CompleteWithAuthorizationを―
定義しましょう
戻ってくる認証をチェックして 認証情報のクレデンシャルを確認します appleIdCredentialの場合 ユーザーIDにクレデンシャルの ユーザープロパティを設定します
デモ用に ユーザIDを キーチェーンに保存しておきます
そしてResultViewController appleIdCredentialの プロパティを処理する― 定型的なコードです
このすぐ下に didCompleteWithError関数があります フローが完了しない場合や 認証情報がない場合に 呼び出されます
もう1つのプロトコルです ASAuthorizationController PresentationContextProvidingです 関数presentationAnchorを定義します ここで 認証サービスに UIを表示させたいウィンドウを 返す必要があります
実行します
ボタンをタップして
メールを共有します
ワンタップで認証できます
少々問題があるようですが バックアップビデオがあります
始めましょう メールアドレスを共有します すると― ResultViewControllerが 結果を表示します ユーザID フルネーム メールアドレスがあります
(拍手)
これは うまくいったようです
はい 終わりです (拍手)
トピックに戻ります ここまでで UIにボタンを追加し ボタンのアクションと 関数を定義しました 結果を返し 表示場所を指定する― 認証サービスプロトコルの関数です
ボタンによるアカウント作成の次は 素早いサインインです ユーザに 既存の認証情報がある時に 表示するUIを定義します つまり Apple IDか キーチェーンパスワードの いずれかがある場合です
performExistingAccountSetupFlows関数を定義します Apple IDと パスワードのリクエストを 両方 含む配列がここにあります
AuthorizationControllerを初期化し デリゲートと presentationContextProviderを設定します そしてperformRequestを 呼び出します クレデンシャルリクエストに もう一つ パスワードリクエストを追加します この結果は デリゲートで 処理します
ASPasswordCredentialの “case”を設定します
この場合 ユーザプロパティと パスワードプロパティがあります 返された時 サーバに対し 認証を行います UIを示す必要はありません
最後に performExistingAccountSetupFlows関数を呼び出します
クラスに戻ります
“viewDidAppear”を上書きして performExistingAccountSetupを呼びます
実行します
LoginViewControllerを表示すると ユーザには 既存の認証情報が表示されます これがQuick Sign in Flowです 最後のトピックでは Apple IDのユーザIDの 認証状態をチェックします
先ほど ユーザIDを キーチェーンに保存しました このIDを使って サインイン状態を チェックすることができます AppDelegateで―
これを行います
これを取り除きます
まず キーチェーンに ユーザIDがあるか調べます あれば ASAuthorizationAppleIDProviderを初期化し AppleIDProviderを使ってユーザIDを渡して 認証状況を問い合わせます
異なる3種類のケースがあります 1つ目はauthorizedー認証された場合 ユーザが適切に認証されていると 想定され 通常のApp操作を 続行できます revokedー取り消された場合は 既存のサインアウトロジックを呼び LoginViewControllerを表示する notFoundのケースに進みます
では実行します
ResultViewControllerに ユーザIDが表示されています ユーザは認証済みだからです ResultViewControllerは StoryBoardのイニシャルビューコントローラです 以上です
簡単でしょ? (拍手) ログインフォームに ボタンを追加する方法 既存のクレデンシャルを使用する Quick Sign in Flowの実装 ユーザIDを使用して 認証情報の状況をチェックし 確認する方法を説明しました 次は マルチプラットフォームです ゴークル (拍手) ありがとう ジョナサン テストAppから始め ボタンを追加し リクエストとレスポンス 既存のアカウントを処理しました すべて実装が簡単で すばらしい操作です 簡単なデモでした 次は クロスプラットフォーム 重要なプラットフォームで シンプルなJavaScriptライブラリにより 実現されます WindowsやAndroidなどの プラットフォームで ユーザがサインイン できるようになります ボタンをクリックすると Appleにリダイレクトされ Apple IDを入力して サインインできます サインインすると リダイレクトされます
呼出方法と 返ってくる情報は ネイティブAPIに似ています ID トークン 名前やメールまで 要求すれば取得できます IDとトークンを取得したら Appのセッションに 変換できます
すばらしいのは Safariに 組み込まれていることです
ユーザがこのボタンを クリックすると
Apple Payに似たシートを表示します ユーザはTouch IDを使い 簡単にサインインして Webサイトをあっという間に 使い始めることができます Safariに組み込まれています
JavaScriptライブラリとの統合は 4ステップです
まず JavaScriptライブラリを HTMLに組み込みます
シンプルなdivで ボタンを表示します スタイルを設定し カスタマイズできます
名前やメールが必要かどうか リダイレクト先のURIなどの パラメータで設定します
サインインが完了すると 指定したリダイレクトURLに フォームエンコードされた値とともに 結果が戻されます トークンと認証コードを検証し アプリケーションセッションに 変換します セッションの有効期間を決定します
以上が クロスプラットフォームの 簡単な説明です
最後に 実装の際の ベストプラクティスを いくつか見てみましょう
一般的なガイドラインです App Storeのガイドラインに従って アカウントベースの機能を 必要としない限り ログインせずに 利用できるようにします 例えば 購入後にサインインするよう 指示することで 購入履歴を後で取得できるよう アカウントにリンクできます
単にユーザーを識別するためだけにユニークなIDが必要な場合は 名前やメールは収集すべきではありません Sign In with Appleにより メールを収集する場合は ユーザの選択を尊重します
APIの実装時に 留意すべき点もあります 初めて起動した時に APIで既存のアカウントを確認します キーチェーンパスワードであれ 既存のアカウントであれ 登録されているアカウントを すぐに使えます 重複アカウントはありません
Real User Indicatorが「人」のユーザに 最適な操作を提供します 不明の場合は 新しいアカウントと 同様に扱います
ボタンの描画は APIを使って行います
ボタンを描画するときは コード中でApple ID Providerを指定します
最後に Sign In with Appleを使ったユーザは すべてのプラットフォームで 同じことを期待します ですから すべてに導入してください
これがベストプラクティスです 要約すると Sign In with Appleは 迅速で簡単な アカウント設定とサインインを提供します 面倒なフォーム入力は必要なく ワンタップでアカウントを設定できます すぐにコミュニケーションを取れる 確認済みのメールアドレス 新しいパスワードは必要なく 2ファクタ認証の セキュリティ機能が組み込まれています アカウント詐欺対策の Real User Indicatorも提供します Sign In with Appleは クロスプラットフォーム対応なので あなたのAppが対応する 全てのプラットフォームで使えます 質問があれば 10時にラボまでお越しください 認証サービスフレームワークには ユーザの役に立つ機能が もっと あります 詳細はWhat’s New In Authenticationで ご紹介します Independent Watch Appsについても WWDC Appでご覧ください 以上です ご静聴ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。