デスティネーションとグループプレゼンスの実装 デスティネーションとは、アプリ内のソーシャルな集いの場であり、レベル、マップ、マルチプレイヤーサーバー、またはアクティビティの特定の構成などによって表されます。
デスティネーションは、ユーザーのアクティビティと参加の可否に基づき、最も関連性の高いコンテキストを提供するように設定できます。例えば、デスティネーションは、1対1のゲームでマッチを探すユーザーをサポートしたり、アプリのロビーにユーザーを誘導するハブとなったりします。
アプリに1つ以上のデスティネーションを定義することで、グループプレゼンス機能を実装し、そこにディープリンクさせることができます。
アプリのコードによってユーザーのデスティネーションが設定されます。ユーザーはそのデスティネーションを自分のオンラインプレゼンスとして友達や任意の人に共有できます。
ユーザーがグループプレゼンスを介して別のユーザーのプレイに参加する場合や、特定のデスティネーションに直接起動する場合は、
ディープリンク を使用してアプリを起動してもらいます。起動ステータスを確認してユーザーを正しいデスティネーションに転送するアプリコードを用意します。
ステップ1 - 開発者ダッシュボードでデスティネーションを作成する Best Practices
ユーザーが興味を持ち参加したいと思う、有意義で興味深いデスティネーションを作成します。 ユーザーが期待できるものについての詳細な説明をデスティネーションの説明に含めます。 アプリのデフォルト画像を再利用するのではなく、エクスペリエンスを最も良く表す画像を使用します。 オプション1: 一括アップロード機能により一度に複数のデスティネーションを作成する
アプリまたはアプリグループを見つけ、[Engagement (エンゲージメント)] > [Destinations (デスティネーション)] に移動します。 [Destinations (デスティネーション)] ページで、[Create Multiple Destinations (複数のデスティネーションを作成)] を選択します。
[Create Multiple Destinations (複数のデスティネーションを作成)] ウィンドウが表示されます。
ウィンドウで、[template (テンプレート)] ハイパーリンクをクリックして、テンプレートTSVファイルをダウンロードします。
TSVには以下のヘッダーが含まれていなければなりません。
api_name - コード内でデスティネーションを参照するために使うユニークな名前。英数字とアンダースコア(_)文字を使用できます。スペースやその他の特殊文字は含めることはできません。display_name_en_us - デスティネーションの表示名。英数字とアンダースコア(_)文字を使用できます。スペースやその他の特殊文字は含めることはできません。各言語の表示名のための新しい列(display_name_enGBなど)を追加してください。サポートされる言語については、下記をご覧ください。description_en_US - ユーザーが移動先について理解できるようにするためのデスティネーションの説明を追加します。英数字とアンダースコア(_)文字を使用できます。スペースやその他の特殊文字は含めることはできません。各言語の表示名のための新しい列(description_en_GBなど)を追加してください。サポートされる言語については、下記をご覧ください。deeplink_type (デフォルト: ENABLED (有効))
ENABLED (有効) - デフォルト - デスティネーションに特定のユーザーがいなくてもこのデスティネーションを起動でき、アプリがユーザーをこのデスティネーションに正しくルーティングできる場合、[ENABLED (有効)] を選択します。例えば、ロビーのデスティネーションを対象にディープリンクすると、ユーザーはアプリのロビーに移動します。さらに、ダイレクトディープリンクを有効にすると、関連度や人気に基づいてアプリでデスティネーションを紹介することができます。DISABLED (無効) - アプリがこのデスティネーションへのディープリンクを解決できない場合や、デスティネーションを紹介したくない場合は、[DISABLED (無効)] を選択します。例えば、デスティネーションが友達同士の参加を許可するプライベートルームであり、宣伝すべきでない場合は、ダイレクトディープリンクを無効にします。TUTORIAL (チュートリアル) - デスティネーションがチュートリアルであり、ダイレクトディープリンクをサポートしていない場合は、デスティネーションの種類に[TUTORIAL (チュートリアル)] を選択します。deeplink_message (任意) - ユーザーをアプリ内の正しい場所に導くのに役立つ追加のデータを指定します。必要に応じてフォーマットできますが、スペースを含めることはできません。これを追加するのは、API名とロビー/マッチセッションIDを使用してもデータとして不十分な場合だけにしてください。audience (オーディエンス) (デフォルト: EVERYONE (全員)) - デスティネーション承認後にそれを表示できる人を定義します。
EVERYONE (全員) - 全員がデスティネーションに移動できるようにします。DEVS (開発者) - チーム内の開発者だけがデスティネーションにアクセスできます。これは、開発中のデスティネーションをテストするために使います。デスティネーションがリリースされたら、その時点で[Everyone (全員)] に切り替えてください。min_supported_group_launch (任意) - グループ起動の場合、一緒に起動するために必要な最小ユーザー数。max_supported_group_launch (任意) - 一緒に起動できるユーザーの最大数を指定します。この値を設定すると、アプリはパーティーのおすすめとして表示されます。テンプレートに記入して、[Create Multiple Destinations (複数のデスティネーションを作成)] ウィンドウにアップロードします。
[次へ] をクリックします。オプション2: 開発者ダッシュボードから単一のデスティネーションを作成する
Meta Horizon開発者ダッシュボード に移動します。アプリまたはアプリグループを選択します。 左側のナビゲーションで、[Engagement (エンゲージメント)] > [Destinations (デスティネーション)] をクリックします。 [Destinations (デスティネーション)] ページで、[Create Single Destination (単一のデスティネーションを作成)] を選択します。[New Destination (新しいデスティネーション)] ページが表示されます。
以下の情報を指定します。
Api Name (API名) - コード内でデスティネーションを参照するために使うユニークな名前。英数字とアンダースコア(_)文字を使用できます。スペースやその他の特殊文字は含めることはできません。
注: API名は常にユーザーをそのデスティネーションに誘導する必要があります。
Deep Link Type (ディープリンクのタイプ) ENABLED (有効) - デフォルト - デスティネーションに特定のユーザーがいなくてもこのデスティネーションを起動でき、アプリがユーザーをこのデスティネーションに正しくルーティングできる場合、[ENABLED (有効)] を選択します。例えば、ロビーのデスティネーションを対象にディープリンクすると、ユーザーはアプリのロビーに移動します。さらに、ダイレクトディープリンクを有効にすると、関連度や人気に基づいてアプリでデスティネーションを紹介することができます。DISABLED (無効) - アプリがこのデスティネーションへのディープリンクを解決できない場合や、デスティネーションを紹介したくない場合は、[DISABLED (無効)] を選択します。例えば、デスティネーションが友達同士の参加を許可するプライベートルームであり、宣伝すべきでない場合は、ダイレクトディープリンクを無効にします。TUTORIAL (チュートリアル) - デスティネーションがチュートリアルであり、ダイレクトディープリンクをサポートしていない場合は、デスティネーションの種類に[TUTORIAL (チュートリアル)] を選択します。Deep Link Message (ディープリンクメッセージ) (任意) - ユーザーをアプリ内の正しい場所にナビゲーションするのに役立つ追加のデータを指定します。必要に応じてフォーマットできますが、スペースを含めることはできません。これを追加するのは、API名とロビー/マッチセッションIDを使用してもデータとして不十分な場合だけにしてください。Audience Configuration (オーディエンスの設定) - デスティネーションの承認後にデスティネーションを表示できる人を定義します。
Everyone (全員) - 全員がデスティネーションに移動できるようにします。Developers Only (開発者のみ) - チーム内の開発者のみがデスティネーションにアクセスできます。これは、開発中のデスティネーションをテストするために使います。デスティネーションがリリースされたら、その時点で[Everyone (全員)] に切り替えてください。[Minimum Supported Group Launch(最小サポートグループ起動)] (任意) - グループ起動の場合、一緒に起動するために必要な最小ユーザー数。Maximum Supported Group Launch (グループ起動の最大サポート数) (任意) - 一緒に起動できるユーザーの最大数を指定します。この値を設定すると、アプリはパーティーのおすすめとして表示されます。
注: グループ起動の場合は必須です。これが設定されていない場合、または[Deep Link Type (ディープリンクのタイプ)] が[ENABLED (有効)] ではない場合、デスティネーションは表示されません。
[General Settings (一般設定)] セクションで[Manage Languages (言語を管理)] ボタンをクリックし、言語と各言語のローカライズされた名前を追加します。デフォルトでは、[Submit Your App (アプリの申請)] ページの[Translations (翻訳)] セクションでアプリ用に選択したデフォルト言語が設定されています。
[Language (言語)] カテゴリを選択し、以下を入力します。
その言語のローカライズされた[Display Name (表示名)] 。この名前は、表示(ユーザーのステータスなど)、Oculusプラットフォーム音声コマンド(「[アプリ]で[デスティネーション]を開く」など)に使用されます。
デスティネーションの音声コマンドエクスペリエンスの品質を高いものとするには、ユーザーが音声コマンドで容易にそのデスティネーションへのテレポートを直接リクエストできるようにするため、デスティネーションを発音しやすい表示名で登録する必要があります。 デスティネーションに難易度やゲームモードなどの修飾子がある場合、ハイフンを使ってください。
デスティネーションが「Combat」でゲームモードが「Public」なら表示名は「Combat-Public」になります。 表示名には複数の修飾子を追加できます。デスティネーションが「Crab Rave」で、修飾子として難易度「Hard」、条件「No Arrows」がある場合、デスティネーションの全体は「Crab Rave-Hard-No Arrows」になります。 ハイフンはすべての単語間に入れるのではなく、表示名と各修飾子の間にのみ入れます。 その言語のローカライズされた[Description (説明)] 。このデスティネーションに移動するとどうなるかについての説明を含めます。入力した言語ごとに繰り返します。 最後に、任意で以下を入力します。
Image (画像) - デスティネーションを表す画像。画像は、アスペクト比16x9、深度24または32ビット、解像度2560 x 1440のPNGでなければなりません。画像はトリミングされる可能性があるため、エッジの周囲に空白を残す必要があります。 終わったら、[Submit for Review (レビューを申請)] をクリックします。 デスティネーションのコンテキストメニューにアクセスして、デスティネーションの共有可能なURLを編集または取得できます。手順は次のとおりです。
アプリを見つけ、[Engagement (エンゲージメント)] > [Destinations (デスティネーション)] に移動します。 共有または編集するデスティネーションを見つけ、右端の列にある省略記号[...] をクリックします。 [Go to Destination (デスティネーションに移動)] を選択してデスティネーションにアクセスし、ブラウザーのアドレスバーからURLを取得して、ソーシャルメディアやマーケティング資料でデスティネーションを共有します。URLの形式は、https://oculus.com/vr/[app_id]/[destination_api_name] です。[View/Edit(表示/編集)] を選択してこのデスティネーションのフィールドを表示および編集するか、[Delete(削除)] を選択して削除します。 デスティネーションをリーダーボードに関連付けることもできます。 ステップ2 - デスティネーションの申請が送信され、レビューチームがそのデスティネーションを承認する ユーザーがデスティネーションを利用できるようになるには、事前にレビューチームによる承認を受ける必要があります。
承認申請したら、開発者ダッシュボードでデスティネーション表の[Submission State(申請状態)]列の値を確認することにより、その申請のステータスを追跡できます。
そのデスティネーションに過去の承認バージョンがある場合、それは有効のままであり、そのデスティネーションに設定したオーディエンスから引き続きアクセス可能です。新しい提出が承認されると、ユーザーは新たに承認された提出にリダイレクトされます。最新の提出情報は、その時点で審査中のものであり、他のオーディエンスが見ているものとは若干違っている可能性があるということに注意してください。
新しい提出情報に関連した[Submission Status(申請ステータス)]フィールドと[Publish Status(公開ステータス)]フィールドの例を以下の図に示します。
デスティネーションがレビューチームによってすでに承認されて公開されている場合は、「試合」デスティネーションの場合のように、[Publish State(公開状態)]と[Submission State(申請状態)]がいずれも[Published(公開済み)]になっているはずです 以前承認されたデスティネーションを更新すると、そのデスティネーションの[Submission State(申請状態)]が[Pending Review(承認待ち)]に設定されます。[Publish State(公開状態)]は、「ロビー」デスティネーション行の場合のように、[Published(公開済み)]のままになっているはずです 新たに追加されたデスティネーションでレビューチームによるレビューがまだのものについては、「ボス戦」デスティネーション行の場合のように、[Submission State(申請状態)]と[Publish State(公開状態)]がいずれも[Pending Review(承認待ち)]に設定されています タイトル、説明、画像はすべて、Meta Questのコミュニティの標準ガイドライン の規定に従う必要があります。 外部ディープリンクが有効になっている場合、ユーザーは最終的にアプリ内のデスティネーションに移動することが期待されます。
チュートリアルに設定されている場合、ユーザーは最終的にチュートリアルに移動することが期待されます。 グループ起動が有効になっている場合、ユーザーの数が最小/最大グループサイズの範囲内であれば、それらのユーザーはすべて、最終的にデスティネーションに移動して同じインスタンス内にいることが期待されます。 ステップ3 - ディープリンクに基づいてユーザーを移動する デスティネーションを追加してユーザーのグループプレゼンスを設定したら、最後のステップとして、参加意向確認メッセージの受信を確認し、ユーザーをアプリ内の正しい場所に移動させます。
メッセージキューにタイプ
ovrMessage_Notification_GroupPresence_JoinIntentReceivedの参加意向確認メッセージがないかチェックします。
ovrMessage_Notification_GroupPresence_JoinIntentReceivedは、コールドスタートまたはウォームスタートで新しい参加意向確認を受信した時点で送信されます。
Meta XRプラットフォームSDK を使用すると、プラットフォーム統合でこの通知タイプを処理できます。
以下のようにして、DestinationApiName、LobbySessionId、MatchSessionId、そして任意でDeeplinkMessageの、メッセージペイロードをチェックします。
シナリオ フィールドの例 アクションの例 ユーザーを参加させる: ヘッドセットで、ユーザーがパーティーパネルから別のユーザーの[Go To (移動先)] をタップします。
"destination_api_name": "level3","lobby_session_id":"team-blue-5678","match_session_id":"session-1234"
相手のユーザーは、現在session-1234にいます。2人が合えるように、このユーザーをlevel3 & session-1234に移動させます。2人のユーザーを、同じグループのteam-blue-5678に配置します
直接起動: レベル5は、大勢が集まる人気のデスティネーション に表示されます。ユーザーがHorizonフィードパネルを使ってアプリを起動します。
"destination_api_name":"level5"
ユーザーをlevel5で立ち上げます。
グループ起動: 2人のユーザーから成るグループが、利用可能な場所のリストから[Boss Level (ボスレベル)] を選択し、両方のユーザーが[Travel (移動)] をタップします。
"destination_api_name": "bossLevel","lobby_session_id": "d8317ae7-8970-4c55-8e1a-0b46b3f5ea9d"
lobby_session_idが生成されます。bossLevelの新しいインスタンスを作成し、このIDと関連付け、lobby_session_idを使用して、ユーザーをboss_levelと同じインスタンスに対して起動します。
Best Practices
期待どおりにならない場合はそのことをユーザーに明確に示し、ユーザーに他の機会を提供するようにします。次にシナリオの例を示します。 ある人がすでに満員のインスタンスに参加しようとしている場合は、エラーメッセージを表示し、参加できる代わりのインスタンスを紹介します。 ある人が友達とつながれない場合は、友達にそのことを知らせたうえで、その人につながりを再度試行してもらいます。 まだチュートリアルを完了していない人であれば、友達にその人が現在チュートリアルを実行していることを知らせ、後からその人をインスタンスに参加させます。