ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
複数のウインドウでコンテンツのターゲットを設定する
このセッションでは、Appでコンテンツのターゲットを特定のウインドウに設定する方法を紹介します。通知、ショートカットアイテム、その他のユーザーアクティビティに応じて、システムでどのシーンを開くかを設定する方法についてご確認ください。
リソース
関連ビデオ
WWDC23
WWDC21
-
ダウンロード
(音楽)
(拍手)
僕はアレックス iOS System UIのエンジニアです 今日は コンテンツの 指定方法についてです まずはiOS 12の話から始めましょう
iOS 12ではアプリケーションとUIは 1対1でマッピング 通知が入るとします
タップするとアプリケーションが起動し UIがアップデートされます いいですね iOS 13では? 複数のUIが一度に動作するので 疑問が生じます
通知に対し どのシーンが アクティベートされるのか? こう思うでしょう “アプリケーション次第だ” そうですね でもアプリケーションが 動いてなければ? “起動すればいい” 待ってください
一番前でアクティベートするシーンを iOSは知りたいのです バックグラウンドで アプリケーションを立ち上げ シーンを選ぶには長い時間がかかります 望ましい状況とは言えません システムは止まってしまうでしょう どうすれば通知をタップして 先へ進めるのか?
システムに何をすべきか 考えてみましょう
アプリケーションがあります 起動しているかは不明です
アプリケーションは それぞれのシーンの性能を 把握しています システムが通知を受けます アプリケーションには頼れません 通知で該当シーンを 選ぶ方法が必要です 条件を踏まえ 解決策を見ていきます
まず通知に関連性を持たせましょう システムが理解できる通知を追加します
次にシーンが何を表示できるのか その性能を述べます
シーンの表示内容が分かり 通知にもヒントがあります もうアプリケーションは不要です
正しいシーンを選ぶのに 十分な情報がシステムに与えらます
この機能について 具体的に見ていきましょう UIKitクラスのUISceneActivation Conditionsにあります UISceneに付加さたオブジェクトです 数個のNSPredicateで構成され アクティベートするシーンを設定します APIを見ましょう
SceneActivationConditionsは canとprefersの述語で 構成されます
canの方がメインで シーンが何を表示できるかを 示します
prefersの方は― 特定のコンテンツを示すものです canは性能を― prefersは 選択すべきコンテンツを表します これらの述語が どう機能するのかも ご紹介します
Target Content Identifier上で 機能します 難しそうですが ただの文字列なんです しかし少しだけ複雑です これはモデル内のデータを表しています システムはモデルにアクセスしません SceneActivationConditionsを基に 構築していきます
iOS 13は Target Content Identifierを使い SceneActivationConditionsで 全シーンを確認します そして 該当するシーンを 決定します
Clown Townは現在位置周辺で ピエロを探すアプリケーションです
Target Content Identifierの 動作を見てみましょう
URLですね Clown TownはUniversal Linksを 使っています
Target Content Identifierには Universal Linksなどの 構造化されたフォーマットが最適です Universal Linksを使うのはお勧めです SDK内のどこに追加されるのか 見てみましょう
まずはUNNotificationContentです Apple プッシュ通知サービスに 送る前に iOS 13ではJSONのペイロードを 増やせるようになりました すると こうなります Target Content Identifierを同じく バックエンドServerにも構築でき どのシーンを開くか特定できます
次は2つ目 Target Content Identifierは ショートカットでも使えます iPad OSでもアイコンを長押しすると クイックアクションが 使えるようになりました 最後は―
NSUserActivityです データ回復やHandoffなども便利です Clown Townのシーンを 設定してみましょう
画面上部に Target Content Identifierがあります CrustyというピエロのURLですね なるほど
画面左はピエロを頼める場所です 全コンテンツが表示されています Crustyとの関連が弱いようです このシーンでは好みが偏らないように SceneActivationConditionsを 設定するのが理想的です このシーンから アプリケーションを使い始めるからです 新しいシーンはデフォルトになります UISceneActivationConditionsは 何でも選べるよう設定できますが 偏った選び方をしません
いいですね
画面右側に Crustyのシーンがあります
どのピエロでも表示できますが ユーザはCrustyと 関連付けるでしょう Crustyのシーンを アクティベートしたいので SceneActivationConditionsの中で 関連性を指定します
詳細シーンのSceneActivation Conditionsで試しましょう
細かく見ていきます
アクティベートするのは Crustyのシーンだけです まず渡された Target Content Identifierが Crustyのものであることを確認します いいですね ここでは canとprefersに 同じ述語を使います シーンを特定する場合に よく使うやり方です 他のピエロでも使えます これはシーンの一例です でも通知には Crustryのシーンを指定したいわけです
いい感じです
設定後はどうなるのでしょう? SceneActivationConditionsに 設定すると システムが述語をパッケージ化し OSに送ります
NSPredicateの使い方について 注意点を述べます
NSPredicateの使用には 3つの制約があります まずブロックベースの述語は使えません 稼働中のアプリケーションのコードは パッケージ化できないからです
次に正規表現をベースにした述語も 使えません 評価に要する時間の長さが不確実なので 認められません 規定値のLike演算子を 見てみると― ワイルドカードの一致が しやすくなるでしょう 正規表現の使い方に ユニークなアイデアがあれば フィードバックアシスタントで 知らせてください ぜひお待ちしています 最後に NSPredicateは 自身のキーパスしか参照できません つまり シーンのアクティベーションに 使う述語を 文字列の長さやTarget Content Identifierに設定したりしません 実際に使うコンテンツを 置いてください
次に見せるのは― 他のアプリケーションでのScene ActivationConditionsの使用例です
例えばSafariのような タブをベースしたもの 2つのタブにドキュメントが 開いています それぞれに Target Content Identifierが あると思うでしょう しかしTarget Content Identifierが 2つあったら 希望に応じSceneActivation Conditionsを設定できるでしょうか? まずはcanの述語を見ます
ドキュメントベースなら どんなドキュメントも開けます always trueの述語を指定し 渡されたコンテンツはすべて 表示させます では prefersは?
複数のタブがあるので サブプレディケートを集めるため CompoundPredicateを使うのが 理にかなっています SceneActivationConditionsと一緒に 使います 以上です 詳細はdeveloper.apple.comへ プレゼンで使った資料が ご覧になれます ご来場ありがとうございました 新しいAPIが活用されるのを 楽しみにしています ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。