ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
tvOS Appにおける複数ユーザーのサポート
tvOS Appで、パーソナライズされた個々のエクスペリエンスを生み出す方法をご確認ください。プロファイルデータやゲームのセーブデータなどを保存するチェックボックスを提供して、各ユーザがiPhoneなどの個人用デバイスで同じレベルのデータ分離を利用できるようにする方法について解説します。また、新規ユーザに依存しないキーチェーンが、同じ世帯内の複数ユーザに対して、既存のサインオンエクスペリエンスを維持できる仕組みについても解説します。
リソース
関連ビデオ
WWDC22
WWDC21
WWDC20
-
ダウンロード
♪ ♪ こんにちは Felipeです tvOSチームの ソフトウェアエンジニアです 今日はAppで複数のユーザを 簡単にサポートするため tvOS 16で行われた 改善についてご紹介します Apple TVは誰もが 使えるように設計されています tvOS 13以降 Apple TVにおける 複数ユーザー体験の改善をしています tvOS 16では 新しい機能 があり 全Appで複数の ユーザをサポート することが容易になります まずApple TVの複数ユーザー機能 の概要から説明します 誰もが使う端末で 簡単にAppを パーソナライズできます ストリーミングAppのユーザごとの プロファイル選択を 保存することがいかに 簡単であるかを紹介します 自分のAppに最適な方法を考えます tvOS 16では 家族全員が Apple TVで楽しむのをより簡単にします Siri RemoteのTVボタンを 長押しすると コントロールセンターが 表示されます 一番上にあるのは このApple TVに 搭載されているユーザリストです tvOS 16の新機能として ユーザリストにまだ追加されていない iCloudファミリーの メンバーも含まれており これまで以上に簡単に家族全員で Apple TVを利用することができます
ここで Anneはまだ Apple TVにいません プラスアイコンは 推奨ユーザを示しています Anneを参加させるには 提案されたユーザを選択するだけです
AnneはApple TVと同じ部屋に iPhoneを持っていき iPhone上で接続を 確認するだけでいいのです それだけです Anneは Apple TVのデータに アクセスすることができます さて 少しAnneのiPhoneに 話を戻しましょう Anneのお気に入りの 動画配信Appをみましょう このAppは家族全員で使い 一人ひとりが自分の プロフィールを持つことができます Appを起動すると プロフィールピッカーが表示され Anneが自分の プロフィールを選びます 個人のデバイスで 動作するAppは 好みのプロファイルを NSUserDefaultsに保存するだけで CloudKitに入れれば 全デバイスに 同期させることも可能です
家族それぞれのiPhoneが その人の好みのプロフィールを 記憶しているのです Appを開いたとき どのプロファイルを 使うか何度も尋ねる必要はありません Apple TVは家族全員で 共有するデバイスで Apple TVを使用する すべての人が共有することが 重要だと考えています tvOS 14では カレントユーザとして Appを実行する仕組みを導入しました Runs as Current Userエンタイトルメントの チェックボックスを追加するだけで iPhoneと同じように 各ユーザーの データにアクセス できるようになります
APIを呼び出したiOSのコードは Apple TV上でそのまま動作し 一人一人が自分専用のApple TVを 使っているかのように振る舞います Appが起動したら 全てtvOSがやってくれます プライバシーやセキュリティは システムで対応します "runs as current user"エンタイトルメントは ゲームや個人の進捗に 関係するAppに最適です プロフィールのあるメディアAppは もう少し工夫が必要ですね 今までの例では サインインという 重要な部分をスキップしていました サインインはできるだけ簡単で 頻繁でない方がいいと考えています tvOS 15では iPhoneやiPadから tvOS Appにシームレスに サインインできる 機能を導入しました Apple TVで サインインする際に 最も便利な 方法を提供するために デバイスが連携したファーストクラスの サインインエクスペリエンスです iCloudキーチェーンの パスワードなど Apple TVでは直接利用できない機能も タップするだけで利用可能です 優れたサインイン体験を 構築する方法については WWDC 2021の「tvOS Appにおける サインインのシンプル化」をご確認ください
そして今年 tvOSでOAuthとパスキーの サポートを開始しました パスキーはAppやWebサイトで パスワードを置き換えるための 素晴らしい 新しい認証技術です パスキーについてもっと知りたい方は 「パスキーについて」をご確認ください しかし 手軽さや便利さだけが すべてではありません サインインは一度だけに しておくことが重要です この最適なユーザ体験を 実現するため tvOS 16では 「Runs as Current User」という シンプルで新しいAPIを導入しています これはKeychain Services の新しい定数で Appがユーザ非依存のキーチェーンに アクセスできるようにするものです この新しいキーを 使って保存されたアイテムは Apple Tvの 全ユーザから常にアクセス可能です 例を見てみましょう キーチェーンのアイテムを ユーザ名とパスワードで 保存するメソッドを 以下に示します ユーザ独立型のキーチェーンに アイテムを保存するには SecItemAdd関数に渡される attribute辞書に 新しいキーを 追加するだけです kSecUseUserIndependentKeychain というキーの値としてtrueを渡します
ユーザー非依存 キーチェーンが設定されると 読み書きする項目は 全ユーザに表示されます 新しいKeychain APIと Runs as Current User 機能の 組み合わせにより 顧客のAppは iPhoneとApple TVの良い箇所を 併せ持つことができます Apple TVでのシングルサインイン 経験を維持しながら 共有デバイス上でユーザごとの シンプルなデータ分離を実現します tvOS 16では TVUserManagerで プロファイルをシステムユーザに手動で マッピングするための メソッドを非推奨にしました ユーザとプロファイルのマップを 維持する必要はもうありません システムが処理してくれます iOSで使っているAPIを そのままApple TVで使えます とても楽です デモを交えてご紹介します Appのサンプルとしてプロフィール を持つメディアAppを紹介します 私のストリーミング ビデオのAppです 現状では お話したような機能は 一切使っていません 現在のユーザで実行されず 新しいKeychain APIも使用されません 先にサインインして お見せします
サインインすると プロフィールのリストが表示されます 今のユーザはMeiなので プロフィールを見てみます
プロフィールを選ぶと Meiが見たい パーソナライズされたコンテンツが表示されます
後でAnneがテレビを見るためソファに座り Siri Remoteの TVボタンを長押しして コントロールセンターを 起動します コントロールセンターの 上部にあるのがユーザリストです 緑色のチェックマークは 現在のユーザであることを示します Anne に切り替えて Appを開いてみます
予想通り 再びプロファイル ピッカーが表示されました Anneは自分のプロフィールを 選択することができます
しかし Meiに戻ると どうなるか見てみましょう
AppはAnneの プロフィールのままです Meiが好みのプロフィールを 選んだことは覚えていないのです tvOS 16の新機能により ユーザエクスペリエンスを より向上させることができます App使用者が 誰が見ているか 改めて選択の必要がないようにします Xcodeに移動して 簡単な方法を紹介します Appをカレントユーザで 実行させるのは簡単です あとはAppのターゲットに ケイパビリティを1つ追加するだけです Appのターゲットで Signing and Capabilities タブに移動します タブのすぐ下 左上にある 「Add Capability」 ボタンをクリックします ケイパビリティの一覧を開きます 私が興味を持ったのは 「User Management」というものです 「user」と入力して リストを絞り込むことにします
あとはAppに追加したいケイパビリティを ダブルクリックするだけです
この下にある「Runs as Current User」 チェックボックスは デフォルトで 選択されています それこそ 私に必要なことです この権限により 私のAppの プロセスは常に現在選択されている ユーザとして起動されます システムは 各ユーザデータを 区別することを確認します キーチェーンも 含めて全部です しかし 私のAppでは ユーザごとに 異なるキーチェーンを持つことは 予期せぬ副作用があります 各ユーザーが個別に サインインする必要があるのです tvOS 16では カレントユーザとして実行しながら 全ユーザに対して単一のアカウントを持つ 体験を維持することができます 新しいKeychain APIを使用することで ユーザに依存しないキーチェーン にアクセスできます KeychainControllerクラスで キーチェーンの読み書きをします キーチェーンの読み込みと 書き込みに使っています
ここではbaseQueryという プロパティがあり キーチェーンの App認証情報にアクセスするために 必要なキーを持っています 新しいキーチェーンを 使うようにアップデートするには 辞書に新しい要素を 追加するだけです 新しいkSecUseUserIndependentKeychain を追加して trueに設定します
Appが全ユーザと認証情報を 共有するために必要な変更は これだけです 他にはありません ただし その他のデータは ユーザごとに 区別されていることに 注意が必要です UserDefaultsと同じで ユーザごとに プロファイルの選択を 記憶するために使います
では ProfileDataクラスを 開いてみましょう このファイルはiOSとtvOSの プロジェクト間で共有されます 実は 私のAppのiOSバージョンは すでにUserDefaultsにプロファイルの 選択を保存していますが iOSで 実行しているときのみです それは iPhoneがパーソナル デバイスだからです しかし 私のAppが現在のユーザを 実行することで Apple TVは 個人的なものになるのです このiOS-checkを外すと Apple TVでも 同じように動作するようになります システムは 各ユーザに正しい UserDefaultsを使用するようにします 新バージョンのAppを起動すると カレントユーザーである Meiで起動されます Meiがサインインして プロフィールを選びます Appをカレントユーザーとして 起動すると その瞬間にApple TVが個人の デバイスのような 振る舞いをします Meiのデバイスです Meiのプロファイルの選択は UserDefaultsに保存されます Anneが見る時は コントロールセンターを 使ってユーザを切り替えます システムは ユーザの UIを切り替えながら プロセスが再スタートする前に 最後のタスクを 完了する時間を与えます tvOSでは AnneとしてAppを 再起動するようになりました 今 Apple TVは Anneのデバイスです また認証情報 はユーザから独立した キーチェーンに保存され すべてのユーザがアクセスできるため サインインプロンプトは省略されます しかし AnneはまだUserDefaultsに プロフィールの選択情報を持っておらず プロフィールピッカーが 表示されます Anneのプロフィールを選択すると その選択内容がUserDefaultsに保存されます さて この時点でMeiとAnneは両方 プロフィールを選択しました ユーザー切り替え時に Appがインタースティシャルプロンプトを 表示しないようになりました 常にコンテンツに直行し 各人に適したプロファイルを 自動的に選択します 毎回です そこで tvOS 16では ユーザごとの プロフィールを より覚えやすくしました ユーザごとに独立したキーチェーンに アクセスするシンプルな新しいAPIで 各ユーザデータをシステムで 分離して処理します ここまでで Apple TVで Appを利用する際に ユーザプロファイルを選択し サインインを必要としない 方法を確認しました Runs as Current Userエンタイトルメント を持たないAppは Default Userの リソースを使用します Apple TV自身のリソースを 利用していると考えてください ユーザの切り替えは Appの処理に影響を与えません ここでは 名入れをする場合の オススメポイントをご紹介します この表は tvOS App で使用する 機能に応じて利用できる 機能を示しています Appが メディアAppの場合 プロフィールを使ってパーソナライズされた コンテンツを表示します Apple TVを使用するすべての人が 1つのアカウントを共有しながら Runs as Current User エンタイトルメントを採用し ユーザに依存しない新しいキーチェーン APIを使用することができます ゲームのように個人の 進捗が重要なAppの場合 Runs as Current User を採用すれば あとはtvOSが処理します またそれ以外のApp 例えばレシピAppのように 全ユーザに同じコンテンツを 提供するAppは 何もする必要はありません XcodeでtvOS Appのプロジェクトを 新規に作成するだけです Runs as Current Userの詳細については WWDC 2020の セッションをご確認ください tvOS Appには合理的なdirect-to-content が最適であると信じています これらの機能が あなたのAppに素晴らしい 大画面体験を実装するのに 役立つことを願っています ご視聴ありがとうございました 他のセッションもお楽しみくだい ♪
-
-
5:25 - Save item in user independent keychain
func save(username: String, password: String) { guard let passwordData = password.data(using: .utf8) else { return } let attributes: [CFString: AnyObject] = [ kSecAttrService: "MyApp" as AnyObject, kSecClass: kSecClassGenericPassword, kSecAttrAccount: username, kSecValueData: passwordData, kSecUseUserIndependentKeychain: kCFBooleanTrue ] let status = SecItemAdd(attributes as CFDictionary, nil) if status == errSecSuccess else { self.credentials = (username, password) } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。