サーバー間通信の基本
一部のプラットフォーム機能は、サーバー間(S2S) REST API呼び出しを使用して、クライアントデバイスから送信するのに相応しくないアクションを実行します。これらのAPIは、バックエンドサーバーとMeta Horizonプラットフォームの間のインタラクションをセキュアに保つために提供されています。
例えば、
アプリ内購入の安全性を強化したり、不正行為を防止したりするために使われます。
個々のS2S呼び出しの詳細については、
機能セクションのリンクを参照してください。
注: 旧バージョンのUnityには互換性の問題があります。旧バージョンのUnityでは.NET 3.5以前が使用されていますが、それらのバージョンの.NETではSHA2を使用するSSL証明書がサポートされていません。SHA1には脆弱性があるため、最新のSSL証明書にはSHA2が使用されています。UnityクライアントがS2S APIを直接使用しようとすると、APIで使用されているSHA2ベースのSSL証明書を復号化できないため、応答メッセージを信頼することができません。
サーバー間メッセージについて、いくつかの基本情報を理解しておく必要があります。
これらのAPIを呼び出すには、以下の要件を満たす必要があります。
すべてのサーバー間リクエストを、以下のエンドポイントに対して行います。
https://graph.oculus.com
有効なサーバーリクエストとして、または特定のユーザーに代わって認証するすべてのリクエストにアクセストークンを含めてください。アクセストークンは以下のいずれかです。
アプリ認証情報は、サーバーのバックエンドを信頼できるリソースとして認証します。この認証情報は、クライアント側のどのアプリとも共有しないでください。
アプリ認証情報が含まれるアクセストークンには、Meta Horizon開発者ダッシュボードの
APIのページにある
アプリIDと
app secretが、
OC|$APPID|$APPSECRETの形式で表されています。
認証情報が不正にアクセスされた場合、または新しいAPI認証情報が必要な場合は、新たにapp secretを生成してください。app secretを変更すると、以前のアクセス許可が取り消されます。app secretにアクセスするには、管理者アカウントが必要です。
注: 以前のバージョンのUnityはNET 3.5以前を利用しており、SHA2を利用するSSL証明書をサポートしておらず、サーバー間リクエストに利用することができません。
ユーザーアクセストークンは、ユーザーに代わって行われるリクエストが有効かどうかを認証します。このトークンタイプは、アクションが特定のユーザーに関連する場合に使います。例えば、サーバーでホストされたマルチプレイヤーマッチの結果を、クライアントが権限を持つリーダーボードに反映させる場合などです。各ユーザーに対して、リーダーボードを更新するリクエストをサーバーから送信する際には、そのユーザーのアクセストークンを使用してサーバーを認証します。
Users.GetAccessToken()メソッドでユーザートークンを取得します。
トークンは応答として返され、クライアントからサーバーに渡すことができます。ユーザーアクセストークンには、FRLまたはOCと、FRL12342GhFccWvUBxPMR4KXzM5s2ZCMp0mlWGq0ZBrOMXyjh4EmuAPvaXiMCAMV9okNm9DXdUA2EWNplrQのような長い英数字文字列が含まれます。
さらに、Meta Horizon開発者ダッシュボードの
APIのページの[User Token (ユーザートークン)]セクション(左のナビゲーションバーにある)で、テスト目的のユーザートークンを取得することができます。
一部のサーバー呼び出しにはアプリIDが必要です。これは、Meta Horizon開発者ダッシュボードの
APIのページで確認できます。
これは、ユーザーが獲得したクライアントが権限を持つアチーブメントをロック解除する方法を示すサーバーAPI呼び出しの一例です。この例では、すでにアチーブメントを作成し、フックをアプリに連携していると仮定します。詳しくは、
アチーブメントをご覧ください。
- ユーザーのIDを取得する - ユーザーの代わりにMeta Quest APIを呼び出すには、そのユーザーを識別するMetaアカウントを含める必要があります。Unityで
Platform.Users.GetLoggedInUserを呼び出して、IDを取得します。ユーザーのovrIDとして返されます。 - 信頼できるサーバーに情報を渡す - Metaアカウントを取得したら、更新またはロック解除するアチーブメントのアカウントと
api_nameをクライアントデバイスからサーバーに渡します。 - アプリアクセストークンを作成する - 開発者ダッシュボードの[開発] > [API]セクションから取得した次の資格情報を使用します。
- アプリID -
1234567898014273 - App Secret -
5f8730a4n51c5f8v8122aaf971b937e7
これで、アプリアクセストークンを、OC|1234567898014273|5f8730a4n51c5f8v8122aaf971b937e7として作成できます。
- APIを呼び出してアチーブメントのロックを解除する - クライアントデバイスから情報を取得して、アプリアクセストークンを作成したら、API呼び出しを送信してアチーブメントのロックを解除します。
curl -d "access_token=OC|$APP_ID|$APP_SECRET" -d "api_name=MY_SIMPLE_ACHIEVEMENT" -d "force_unlock=true" https://graph.oculus.com/$USER_ID/achievements
リクエストが成功した場合の応答は、次のとおりです。
{ "id":"$USERID", "api_name":"MY_SIMPLE_ACHIEVEMENT", "just_unlocked":true }
その後、アチーブメントが正常にロック解除されたことを示すメッセージをクライアントに返すことができます。
サーバーAPIを提供しているプラットフォームソリューションのリストを以下に示します
Meta Quest S2S REST APIは、標準のHTTPステータスコードをサポートしており、このコードによって問題を特定できます。
| コード | ステータス |
|---|
400 | Bad Request (間違ったリクエスト) |
401 | Unauthorized Request (無許可のリクエスト) |
403 | Forbidden Request (禁止されたリクエスト) |
404 | Not Found (未検出) |
500 | Internal Server Error (内部サーバーエラー) |