WWDC Quick Look 💓 By SwiftGGTeam
Simplify sign in for your tvOS apps

Simplify sign in for your tvOS apps

元の動画を見る

ハイライト

tvOS 15 は、AuthenticationServices を介したシステム ログイン ビューを提供し、ユーザーが iPhone または iPad で iCloud キーチェーン、Face ID、または Touch ID を使用して Apple TV アプリのログインと購入認証を完了できるようにします。

主要内容

Apple TV にサインインするのはいつも面倒でした。

メディア アプリでは、多くの場合、ユーザーが電子メールとパスワードを入力する必要があります。ユーザーはセキュリティ上の理由から、長くてランダムなパスワードを使用します。テレビのリモコンでこのパスワードを入力するのは好ましくありません。ユーザーはコンテンツを表示する前にログイン ページでスタックします。

tvOS 15 の機能は、Apple TV と iPhone または iPad の間でログインプロセスを分割することです。ユーザーはクリックして Apple TV アプリにログインし、iPhone を手に取ると Apple TV からの通知が表示されます。通知をクリックすると、iPhone は iCloud キーチェーンの認証情報を推奨し、Face ID または Touch ID で確認します。確認後、認証情報が Apple TV に返され、アプリは引き続き独自のサーバーへのログインを完了します。

このプロセスでは、システム ログイン ビューが使用されます。ログイン ポータルを tvOS に統合し、ユーザーに iPhone または iPad の使用を継続するように指示します。アプリの場合、コア コードはまだ AuthenticationServices フレームワーク内にありますASAuthorizationController

ログイン ページには他の入り口も保持できます。たとえば、手動でログインし、TV サービス プロバイダーのアカウントを使用し、アプリ内購入を復元します。開発者パスcustomAuthorizationMethodsどの追加ボタンを表示するかをシステムに指示します。ユーザーがそれを選択すると、アプリは対応するカスタマイズ プロセスに入ります。

詳細

関連するドメインを構成する

(02:22) このエクスペリエンスでは、まずアプリと Web サイトのドメイン名でセキュリティ アソシエーションを確立する必要があります。 Apple TV と iPhone または iPad は、認証情報をユーザーに安全に推奨する前に、その認証情報がサービスに属していることを確認する必要があります。

そのままのドラフトでは、次の 3 つの構成手順が示されています。

1. 在域名托管的 apple-app-site-association 文件中,
   把 tvOS App 的 application identifier 写入 webcredentials key。
2. 在 Xcode 中为 tvOS App 添加 Associated Domains capability。
3. 在 Associated Domains 中加入带 webcredentials 前缀的域名。

キーポイント:

  • 1行目:apple-app-site-associationこのファイルはドメイン名の下に配置され、どのアプリがこのドメイン名の Web 認証情報を使用できるかを宣言するために使用されます。
  • 行 2: Xcode の関連ドメイン機能により、アプリがシステムレベルのドメイン名の関連付けに参加できるようになります。
  • 3行目:webcredentialsプレフィックスは、このドメイン名がパスワードとログイン資格情報の照合に使用されることをシステムに伝えます。

Apple TV のサインイン フロー中に iPhone または iPad が iCloud キーチェーン認証情報を安全に提案できるようになる前に、この手順を完了してください。

パスワード認証情報を要求する

(03:28) ログイン ボタンをクリックすると、アプリは認証コントローラーを作成し、パスワード要求を渡します。ここで使われているASAuthorizationPasswordProvider

import AuthenticationServices

final class SignInViewController: UIViewController, ASAuthorizationControllerDelegate {
    func beginSignIn() {
        let controller = ASAuthorizationController(authorizationRequests: [
            ASAuthorizationPasswordProvider().createRequest()
        ])

        controller.delegate = self
        controller.performRequests()
    }
}

キーポイント:

  • 行 1: AuthenticationServices (認証サービス) フレームワークの導入、後続の認可コントローラーとパスワード資格情報の種類はここから来ています。
  • 3行目: ビューコントローラーは従うASAuthorizationControllerDelegate、承認の成功または失敗のコールバックを受信するために使用されます。
  • 5 行目: 作成ASAuthorizationController、システムのログイン ビューと認証プロセスの開始を担当します。
  • 6行目:ASAuthorizationPasswordProvider().createRequest()このログインでは、保存されたユーザー名とパスワードが要求されることを示します。
  • 9 行目: 現在のオブジェクトをプロキシとして設定すると、後続の結果はこのオブジェクトに返されます。
  • 10行目:performRequests()ログイン要求を開始します。ユーザーは iPhone または iPad で認証情報を選択して確認します。

逐語草案では、同じことについて言及していますauthorizationRequests配列は複数のリクエストを保持できます。アプリが Apple でサインインをサポートしている場合は、そこに Apple ID リクエストを入力して、ユーザーが iPhone または iPad で使用する資格情報の種類を選択できるようにすることもできます。

資格情報を使用してログインを完了する

(04:19) ユーザーが iPhone または iPad で認証情報を選択すると、システムはdidCompleteWithAuthorization。返品された場合は、ASPasswordCredential、アプリはユーザー名とパスワードを読み取り、独自のログイン ロジックに任せることができます。

import AuthenticationServices

extension SignInViewController {
    func authorizationController(controller: ASAuthorizationController,
        didCompleteWithAuthorization authorization: ASAuthorization) {
        if let credential = authorization.credential as? ASPasswordCredential {
            // Use the credential to sign in
        }
    }
}

キーポイント:

  • 3行目: 認可コールバックを入れます。SignInViewController起動コードとは別に、拡張機能内にあります。
  • 4行目:authorizationController(_:didCompleteWithAuthorization:)認可が成功した場合のプロキシ方式です。
  • 6 行目: 置くauthorization.credentialに変換するASPasswordCredential、今度はパスワード認証情報を取得したことを確認します。
  • 7 行目: ここからアプリの既存のログイン プロセスにアクセスします。逐語的な指示は、userそしてpasswordプロパティでログインが完了します。

このコールバックでは、サーバー側の認証は完了しません。ユーザーが確認した認証情報をアプリに渡すだけです。アプリは引き続き、ユーザー名とパスワードを独自の認証サービスに送信し、セッション、サブスクリプション状態、またはコンテンツの権限を処理する必要があります。

キャンセルと失敗の処理

(04:43) ログインに失敗する場合があります。ユーザーは積極的にキャンセルすることもできます。 tvOS 15 の推奨事項は、キャンセルを通常のパスとして扱い、インターフェイスをメインのログイン入口に戻すことです。他のエラーの場合は、ユーザーは再試行するように求められます。

import AuthenticationServices

extension SignInViewController {
    func authorizationController(controller: ASAuthorizationController,
        didCompleteWithError error: Error) {
        if case ASAuthorizationError.canceled = error  { return }
        // Let the user know something went wrong
    }
}

キーポイント:

  • 4行目:authorizationController(_:didCompleteWithError:)認可が失敗した場合の代理方式です。
  • 6 行目: エラーが発生したかどうかを確認します。ASAuthorizationError.canceled。ユーザーがキャンセルした場合は、直接戻ってください。
  • 7 行目: その他のエラーでは、ログイン エラーがあったことをユーザーに通知し、再試行を許可する必要があります。

この分岐は非常に重要です。キャンセルは、ユーザーが現在のログインプロセスを終了したことを示します。アプリはエラー メッセージをポップアップ表示せずにメインのログイン インターフェイスに戻る必要があります。

カスタムログイン方法を追加する

(06:00) システム ログイン ビューには追加のボタンを表示できます。適切なシナリオには、手動ログイン、購入の復元、TV サービス プロバイダー アカウントの使用などが含まれます。

import AuthenticationServices

final class SignInViewController: UIViewController, ASAuthorizationControllerDelegate {
    func beginSignIn() {
        let controller = ASAuthorizationController(authorizationRequests: [
            ASAuthorizationPasswordProvider().createRequest()
        ])

        controller.customAuthorizationMethods = [
            // Sign in Manually
            .other,
            // Restore Purchase
            .restorePurchase
        ]

        controller.delegate = self
        controller.performRequests()
    }
}

キーポイント:

  • 5 行目: まだ最初に作成しますASAuthorizationController、主なプロセスはパスワード資格情報を要求することです。
  • 9行目: 設定customAuthorizationMethods、ログイン ビューに表示する追加アクションをシステムに指示します。
  • 11行目:.other手動でログインしたり、独自のログイン方法選択インターフェイスにジャンプしたりするために使用できます。
  • 13行目:.restorePurchaseユーザーがアプリ内購入を復元してログインまたはロック解除を完了できるようにするために使用されます。
  • 16 行目: プロキシを設定し、パスワード ログイン結果とカスタム メソッド選択結果を受信する準備をします。
  • 17 行目: リクエストを開始すると、システム ログイン ビューに iPhone/iPad ログイン ボタンとカスタム ボタンの両方が表示されます。

逐語版でも言及されています.videoSubscriberAccount。アプリが TV サービス プロバイダー アカウントでのログインをサポートしている場合は、この値を使用する必要があります。

ユーザーがカスタム ボタンをクリックすると、システムはdidCompleteWithCustomMethod。アプリは受信値を確認し、対応するプロセスを開始する必要があります。

import AuthenticationServices

extension SignInViewController {
    func authorizationController(controller: ASAuthorizationController,
        didCompleteWithCustomMethod method: ASAuthorizationController.CustomAuthorizationMethod) {
        switch method {
        case .other:
            // Start your manual sign-in flow
            break
        case .restorePurchase:
            // Start your restore purchase flow
            break
        default:
            break
        }
    }
}

キーポイント:

  • 4行目:didCompleteWithCustomMethodユーザーがカスタム ログイン方法を選択するとトリガーされます。
  • 6 番線: パスswitchユーザーがどの方法を選択したかを判断します。
  • 7行目:.other手動ログインまたはアプリ独自のログイン選択インターフェイスに対応します。
  • 10行目:.restorePurchase購入手続きの再開に対応しました。
  • 13 行目: デフォルトのブランチは、現在接続されていないカスタム メソッドを処理します。

短いログインエントリを設計する

(06:36) Apple が提供する tvOS ログインのベスト プラクティスは、明確な「サインイン」ボタンから始めて、システム ビューに限られたオプションを提供することです。

@IBAction func signInButtonPressed(_ sender: Any) {
    beginSignIn()
}

キーポイント:

  • 行 1: ログイン ボタンはユーザー アクションに応答することのみを担当し、ボタン イベントに複数のログイン ブランチをスタックしません。
  • 2 行目: 「unified」と入力します。beginSignIn()、によるASAuthorizationControllerシステムログインビューを表示します。

この利点は明白です。ユーザーは最初にどのログイン方法を選択するかを決める必要がありません。デフォルトのパスは、iPhone または iPad でログインすることです。追加のパスはシステム ビューに配置され、数は最小限に抑えられます。

重要ポイント

  1. やるべきこと: ビデオ アプリに「iPhone でログイン」入り口を追加します。 価値がある理由: tvOS 15 のシステム ログイン ビューでは、ユーザーが iPhone または iPad で iCloud キーチェーン認証情報を選択するように直接ガイドできるため、リモコン入力が軽減されます。 開始方法: 構成webcredentialsログイン ボタンで作成された関連ドメインASAuthorizationController、通りますASAuthorizationPasswordProvider().createRequest()

  2. 何をすべきか: 再開サブスクリプションをログイン ビューに追加します。 実行する価値がある理由: 多くのメディア アプリの「ログイン」と「購入の復元」は、コンテンツの許可の検証につながります。customAuthorizationMethods購入の復元は、システム ログイン ビューで明示的なオプションにすることができます。 開始方法: セットアップcontroller.customAuthorizationMethods = [.restorePurchase]、存在するdidCompleteWithCustomMethodで StoreKit 復元購入プロセスを開始します。

  3. やるべきこと: ホームシェアリング TV に手動でログインする準備をしてください。 価値がある理由: 一部のユーザーは、認証情報を iCloud キーチェーンに保存していないか、別のアカウントを使用したいと考えています。.otherシステム ビューからアプリ独自の手動ログイン インターフェイスにジャンプできます。 開始方法:.other参加するcustomAuthorizationMethods、コールバックでユーザー名とパスワードの入力ページを開きます。

  4. 対処方法: TV サービス プロバイダーのアカウントを同じログイン ポータルに接続します。 実行する価値がある理由: 逐語的な説明、TV プロバイダー アカウントをサポートするアプリを使用する必要があります.videoSubscriberAccount。ユーザーはホーム画面に複数のボタンが並んでいる必要がありません。 開始方法: カスタムモードで追加します.videoSubscriberAccount、ユーザーは選択後、既存の TV サービス プロバイダーの承認プロセスに入ります。

  5. 対処方法: ログインのキャンセルを通常の状態として UI プロセスに書き込みます。 実行する価値がある理由: ユーザーが認証をキャンセルすると、システムは元の状態に戻ります。ASAuthorizationError.canceled。この状態は、メインのログイン ページに戻るのに適しています。 開始方法:didCompleteWithError最初に判断するASAuthorizationError.canceled、キャンセルする場合はメインのログイン ページに戻り、他のエラーの場合は再試行プロンプトが表示されます。

関連セッション

コメント

GitHub Issues · utterances