デベロッパーのよくある質問
注釈:本資料はAI技術を用いて翻訳されています。
この記事には、AccelByte Gaming Services (AGS) を使用してゲームを構築する際のよくある開発者の質問と回答が含まれています。
Admin Portal
-
ネームスペース内のすべてのプレイヤーを表示するにはどうすればよいですか?
Admin Task > Admin Management に移動し、Search User エントリを by Creation Date に変更します。次に、ネームスペースが作成される前の日付に設定します。
-
Admin Portal に他の人を追加するにはどうすればよいですか?
AGS Admin Portal のスーパー管理者である場合は、パブリッシャーのネームスペースに移動し、Admin Task > Admin Management に移動します。そこから、招待者のメールアドレスを入力し、スーパー管理者、ゲーム管理者、またはその他の利用可能なロールのいずれかとして設定します。
-
Fulfillment と Entitlement Grant の違いは何ですか?
Fulfillment は実際に Entitlement Grant を呼び出しますが、主な違いは、Fulfillment には Admin Portal の Fulfillment タブにトランザクション情報が記録されることです。これにより、付与されているすべてのエンタイトルメントを追跡できます。
-
Access Logs Viewer とは何ですか?
Access Logs Viewer は、Admin Portal に組み込まれたツールで、バックエンドに対して行われた API 呼び出しを確認できます。Trace ID、User ID、Response Status Code などを調べるためのフィルターがあります。フィルターは相互に組み合わせて使用することもできます。Admin Portal で Development Utilities > Access Logs に移動することでアクセスできます。
-
Server Image をアップロードするときに、アップロードの進行状況と残り時間を確認できますか?
Server Image のアップロード進行状況と残り時間を確認する機能は現在利用できません。ビルドステータスのみ表示可能です。
-
ユーザーが Lobby から切断されるとすぐに、ユーザーのプレゼンス可用性は Offline に変わりますか?
はい、Admin Portal の Lobby 設定で
keepPresenceActivityOnDisconnectが有効になっていない限り、即座にリセットされます。
AGS アーキテクチャと動作
-
サービスがアクセストークンの取得または更新に失敗した場合、期待される動作は何ですか?サービスを終了して Kubernetes に再起動させるべきですか、それとも再試行を続けるべきですか?
サービス側にエラーをスローする前に、少なくとも 1 回は再試行することをお勧めします。
-
AGS OSS は Blueprints をサポートしていますか?
設計上、AGS OSS は Blueprints をサポートしていません。Blueprints で OSS を使用するには、プラグインを使用したり、独自のラッパーを作成したりして、カスタム構成が必要になります。
-
Lobby 通知がクライアントに正常に送信されたかどうかを知るにはどうすればよいですか?
Service Logs を確認して、Lobby 通知が正常に送信されたかどうかを確認できます。成功通知は「info」ログが利用可能な場合にのみ記録されます。ただし、対象ユーザーがオフラインの場合は、該当しません。
-
プレイヤーが持つことができるフレンドの数に上限はありますか?
現在、プレイヤーが持つことができるフレンドの数に制限はありません。
-
クラウドベースのバックエンドシステムは初めてです。用語の説明はどこで見つけられますか?
用語集 には、一般的な AGS とオンラインゲームの用語とその定義のリストが記載されています。定義してほしい用語がさらにある場合は、AccelByte にお問い合わせください。
API エンドポイント
-
すべてのプレイヤーレポートをクエリするための Admin API は何ですか。また、この呼び出しを行うために OAuth クライアントに必要な権限は何ですか?
クエリが Tickets または Reports のどちらに基づいているかによって、2 つのエンドポイントがあります。
Tickets に基づいてクエリする場合:
GET /reporting/v1/admin/namespaces/{namespace}/ticketsReports に基づいてクエリする場合:
GET /reporting/v1/admin/namespaces/{namespace}/reports必要な関連権限は次のとおりです:
Permission: ADMIN:NAMESPACE:{namespace}:TICKET [READ]Ticket は、報告された単一のオブジェクトを表すモデルであることに注意してください。開いているか閉じているかを示すステータスが含まれています。新しく報告されたオブジェクトに対してチケットが作成されます。同じオブジェクトを含む後続のレポートは、報告されたオブジェクトに対して開いているチケットがない場合を除き、同じチケットを使用します。
Report は、単一のオブジェクトに関するユーザー送信のレポートです。Category は、レポートが対象とする機能を定義します(例:Chat、Matchmaking、UGC など)。Object は、報告されているタイプ(例:ユーザーまたはコンテンツ)を定義し、オブジェクト ID レコードはその一意の ID です。
-
API 呼び出し
queryUserIAPOrdersは、Admin Portal の機能またはメニューによって呼び出されますか?いいえ。
-
API コマンドを呼び出したり、ログインしようとしたりすると、次の警告が表示されます:
LogAccelByte: INVALID RSP HTTP。これはどういう意味で、どうすれば修正できますか?このエラーは通常、HTTP 400 エラー応答とともに発生し、API 呼び出しが不正な形式であることを示します。これが Unreal Engine である場合、呼び出している API コマンドの形式に問題がある可能性があることを意味することがよくあります。API 呼び出し URL に二重スラッシュ(
//)がないこと、およびdefaultEngine.iniが適切に構成されていることを確認してください。BaseUrl に末尾のスラッシュがないことを確認して、以下の例のようになっている必要があります:[/Script/AccelByteUe4Sdk.AccelByteSettings]
ClientId=<client_id>
ClientSecret=
Namespace=<namespace>
PublisherNamespace=<publisher_namespace>
RedirectURI="http://127.0.0.1"
BaseUrl=<base_url>
AppId=<app_id>
[/Script/AccelByteUe4Sdk.AccelByteServerSettings]
ClientId=<client_id>
ClientSecret=<client_secret>
Namespace=<namespace>
PublisherNamespace=<publisher_namespace>
RedirectURI="http://127.0.0.1"" -
現在のフルアカウントからヘッドレスアカウントにリンクされている場合、
Get競合結果でlinkedGamesパラメーターは何を返しますか?linkedGamesパラメーターはゲームネームスペースを返します。 -
現在のフルアカウントからヘッドレスアカウントにリンクされている場合、
oneTimeLinkCodeパラメーターは何を返しますか?oneTimeLinkCodeパラメーターはゲームネームスペースを返します。 -
プレイヤーのフレンドで、2,000 の制限がある
queryパラメーターを使用する場合、プレイヤーが 64 人を超えるフレンドを持っている場合、これは過負荷になりますか?はい、各プレイヤー ID には 32 文字が必要なため、制限は約 64 ID です。回避策は、フレンド ID の数を制限するか、複数のリクエストを行うことです。
-
エンタイトルメントを一括で付与または取り消すことはできますか?
Admin Portal と API の両方で、複数のエンタイトルメントを付与または取り消すことができます。Commerce > User Entitlements に移動して、Entitlements 設定を見つけます。API 呼び出しは
grantUserEntitlementとrevokeUserEntitlementsです。
認証と認可
-
IAM サービスと Steam による認証について、
steamopenidに関する情報はどこで見つけられますか?Steam の Web サイトの User Authentication and Ownership を参照してください。
-
ユーザーが未検証のメールアドレスを持っている場合、メールとパスワードでログインしてアクセストークンを取得できますか?
はい。
-
未検証のメールユーザーが取得したアクセストークンは、他のサービスへのアクセスに使用できますか?
はい。
-
ユーザーの IP アドレスからユーザーの国を自動入力する機能はありますか?
これは現在、サードパーティログインの機能ですが、ユーザー名とパスワードのログインでは使用できません。サードパーティログインでは、国フィールドが空白の場合、IAM は IP アドレスに基づいてユーザーの国を自動的に設定します。
専用サーバー
-
専用サーバーが作成されていません。何が間違っている可能性がありますか?
考えられる理由の 1 つは、構成です。Admin Portal の Dedicated Server Management > Configurations で、デプロイメントを確認して、最大値が 0 に設定されているかどうかを確認します。次に、Pod 構成を確認します。
これらが少なすぎると、サーバーに十分なリソースがありません。多すぎると、サーバーを実行している仮想マシンがそれを実行できなくなります。通常、AGS が使用する仮想マシンには 5GHz の CPU と 8GB のメモリ(AWS EC2 インスタンス m5a.large)があるため、これらの仕様を念頭に置いて Pod 構成を調整してください。
場合によっては、特に本番環境では、会社がより優れた EC2 インスタンスを要求することがあります。そのため、これをリクエストする方法については、組織または AccelByte の担当者にお問い合わせください。
-
サーバーが作成されているとき、またはユーザーが使用しているときに、サーバーが終了するようです。これは、しばらく時間が経過した後によく発生します。何が間違っている可能性がありますか?
これは、タイムアウトが原因である可能性があります。作成タイムアウトとセッションタイムアウトが適切であることを確認する必要があります。タイムアウトは、専用サーバービルダー、または専用サーバー自体が無期限に実行されないようにするために必要です。これは、問題が発生した場合のためです。作成タイムアウトには、少なくとも 300 秒(5 分)をお勧めします。新しいサーバーイメージがアップロードされると、ビルダーと仮想マシンがサーバーイメージをダウンロードしてキャッシュするのに時間がかかります。セッションタイムアウトには、ゲームセッションが通常終了するのにかかる時間の少なくとも 2 倍をお勧めします。
エラーと例外
-
Lobby Server にアクセスしているときにエラーコードが表示されました。そのコードの関連する説明はどこで見つけられますか?
Lobby Error Codes のエラーリストを検索してください。
-
エラーコード 401
invalid_clientはどういう意味ですか?このエラーは、Client ID または Client Secret が正しくないことが原因です。使用しているネームスペースの正しい Client ID と Client Secret があることを確認してください。
-
IAM クライアントトークンを作成しようとしたときに、エラーメッセージ
unable to grant client tokenはどういう意味ですか?このエラーは、IAM Client の 間違ったシークレット を使用していることが原因です。詳細については、Manage access control for applications のガイドに従ってください。
-
エラーメッセージ
Docker file pushed to registry but unable to update DSM config. Please contact the Administratorは何を指していますか?このエラーコードは、DS Uploader バージョンと Environment バージョンの不一致が原因です。Admin Portal から最新バージョンの DS Uploader をダウンロードすると、このエラーが発生しなくなります。
-
エラーコード 720743
unable to create image patch, invalid request: patch version is emptyは何を指していますか?このエラーコードは、DS Uploader バージョンと Environment バージョンの不一致が原因です。Admin Portal から最新バージョンの DS Uploader をダウンロードすると、このエラーが発生しなくなります。
-
エラーメッセージ
"conflict image version" error=conflictはどういう意味ですか?このエラーは、アップロードしようとしている新しいイメージのバージョンが既に存在していることを意味します。同じバージョンを維持したい場合は、コマンドに
--patchフラグを追加できます。それ以外の場合は、アップロードコマンドのバージョンを変更する必要があります。 -
エラーコード 20013
access forbidden: insufficient permissionsはどういう意味ですか?このエラーは、特定の API を呼び出すときに正しくない権限が設定されていることが原因です。
-
PS4 および/または PS5 用の PlayStation Login を設定しましたが、ログインしようとすると、次のエラーが表示されます:
"unable to exchange auth code: unable to unmarshal error response: invalid character '\u003c' looking for beginning of value"。どのように解決すればよいですか?\u003cは<の数値コードで、HTML ページがレスポンスとして返されていることを意味します。通常、このページは Sony の環境への不正アクセスを指します。アクセスを取得するには、次の手順を実行して、Sony の環境に環境をホワイトリストに登録する必要があります:-
ホワイトリスト登録のために、環境の IAM サービスの静的 IP アドレスについて AccelByte にリクエストを送信します。
-
アクセスする Sony の環境を決定します(例:
sp-intまたはprod-qa)。 -
組織の Playstation Partners サポートページに移動します。
-
必要な環境でホワイトリスト登録が必要な IP アドレスをホワイトリストに登録するための一般サポートリクエストを送信し、PlayStation が概説するプロセスに従ってください。
-
-
publicBulkClaimUserRewardsエンドポイントがエラーメッセージ49124 Manual claim not supportedを返す場合、どうすればよいですか?このエンドポイントは、
Automaticallyclaim reward 構成に基づいてレスポンスを返します。有効になっている場合、手動で要求することはできず、エンドポイントは 49124 エラーメッセージを返します。 -
ゲームネームスペースからパブリッシャー(またはスタジオ)ネームスペースにゲームアイテムをクローンしようとすると、エラー
Default Region is requiredが表示されます。両方のネームスペースには既に同じリージョンと言語の設定があります。問題は何ですか?アイテムをクローンするときにパブリッシャーネームスペースが参照する基本価格を知ることができるように、ゲームネームスペースで指定されたアイテムのリージョナル価格を既に設定していることを確認してください。これを行うには、Stores に移動し、アイテムの詳細を開き、Pricing パネルで Add New をクリックします。
AGS SDK HTTP エラー自動再試行
AGS SDK は、次のエラーコードの自動再試行をサポートしています:
- 429 (Too Many Requests)
- 449 (Retry With)
- 500 (Server Error)
- 502 (Bad Gateway)
- 503 (Service Unavailable)
- 504 (Gateway Timeout)
再試行は指数バックオフ戦略を使用して実行され、試行間の遅延は指数関数的に増加し、最大タイムアウトは 60 秒です。
機能リクエスト
-
リージョンのチャットルームをサポートする予定はありますか?
現在、リージョン固有のチャットルームのサポートを開発する計画はありません。
インシデント復旧
-
AccelByte Multiplayer Servers (AMS) をセットアップしているときに、コード内のバグに遭遇し、V2 セッションがスタックしました。これにより、セッションを検索する関数が壊れます。クリーンアップするためにセッションを破棄しようとしましたが、ローカルでセッションを破棄できないというエラーが表示されました。テストを再開できるように、スタックした V2 セッションを破棄するにはどうすればよいですか?
参加しているすべてのセッションをクエリし、ゲームの起動時にそれぞれに対して
LeaveRestoredSessionを呼び出します。ユーザー数が 0 になるとセッションが削除されるため、DestroySessionを呼び出さないでください。
Player Portal
-
AccelByte Player Portal を、たとえば、顧客独自のバナーでリブランドすることは可能ですか?
はい。ただし、現在、これは AccelByte に連絡することで行う必要があります。Player Portal UI エディタは、将来のリリースのロードマップに含まれています。
ロールと権限
-
Admin Portal でユーザーに通貨を付与できるようにするロールに必要な権限は何ですか?
必要な権限は次のとおりです:
resource="ADMIN:NAMESPACE:{namespace}:USER:{userId}:WALLET", action=4 (UPDATE) -
必要な権限をどのように判断すればよいですか?
権限は、使用する予定の API エンドポイントによって異なります。
使用する API の API endpoints のリストを確認し、各呼び出しに必要な権限を見つけることができます。
備考- API が Public の場合、理想的には、User Role を介して Regular Player に権限が必要です。
- API が Admin の場合、権限は User Role を介した Admin User、または IAM/OAuth Client を介したゲームサーバーのいずれかに必要です。
-
ユーザーにどのロールを設定すればよいですか?
- AGS Shared Cloud
- AGS Private Cloud
デフォルトでは、Studio Admin と Game Admin ロールを使用することをお勧めします。Studio Admin ロールは、ユーザーにスタジオ内のすべてのネームスペースへの完全な管理者アクセスを提供します。これは、開発リーダーに適しています。Game Admin は、Studio Admin などのスタジオ全体のアクセスを必要とするものを除き、割り当てられたネームスペースに対する完全な管理者アクセスを持っています。
Shared Cloud で利用可能なロールについては、User Role セクションを参照してください。
デフォルトでは、Super Admin と Game Admin ロールを使用することをお勧めします。Super Admin ロールは、ユーザーにすべてのネームスペースへの完全な管理者アクセスを提供します。これは、開発リーダーに適しています。Game Admin は、Super Admin などの環境全体のアクセスを必要とするものを除き、割り当てられたネームスペースに対する完全な管理者アクセスを持っています。ローンチに近づいたら、モデレーターや非開発者向けにカスタムロールを作成することを検討することをお勧めします。
Private Cloud で利用可能なロールについては、User Role セクションを参照してください。
-
ユーザーにロールを付与するにはどうすればよいですか?
ロールは、Admin Portal でユーザーのプロファイルに移動し、Roles タブをクリックして、Add Role を選択することで、特定のユーザーに付与できます。
-
プレイヤーは他のプレイヤーの統計を表示するビューアクセス権を持つことができますか?
はい、デフォルトでは、すべての User ロールには以下に示す権限が付属しています。
"Action": 2は読み取りアクセスを意味するため、プレイヤーには自動的にビュー権限が付与されます。"Resource": "NAMESPACE:{namespace}:USER:*:STATITEM", "Action": 2
セキュリティ
-
dsm-controller には Cross-Origin Resource Sharing (CORS) ホワイトリスト登録機能がありますか?
CORS ホワイトリスト登録は、サーバーが特定の指定されたオリジンからのリソースの読み込みを許可できるようにするシステムです。これは、AccelByte dsm-controller でサポートされています。
-
疑わしいアクティビティがある場合に、指定されたユーザーに電子メール通知を送信できるメカニズムはありますか?
現在、この通知はすべてのユーザーに送信され、特定のユーザーセットに対して構成することはできません。
テスト
-
プレイテスト用に複数の App ID がある場合、どうすればよいですか?
この問題にアプローチする方法は 2 つあります:
-
このプレイテストに参加するユーザーの進行状況とエンタイトルメントを引き継ぎたい場合、最善の方法は、既に使用しているネームスペースで App ID を交換することです。
-
このプレイテストのためだけにユーザーの進行状況とエンタイトルメントを別々に保ちたい場合は、新しいネームスペースを作成し、すべての設定をインポートし、プレイテスト用に新しい App ID を設定する必要があります。これにより、すべてのデータが他のネームスペースから分離されます。
-
-
Nomad からログを取得するにはどうすればよいですか?
Commands: alloc logs を参照してください。
二要素認証
-
Backup Codes はどこで入手できますか?
Backup Codes 方式を使用して二要素認証(2FA)を最初に設定したときに、Backup Codes を受け取っています。
-
Backup Codes を紛失した場合はどうすればよいですか?
認証アプリを使用して 2FA を設定している場合は、ログインメニューに戻り、認証アプリを使用して認証できます。ログインしたら、Password & Security に移動し、Backup Codes を再生成して、これらのコードを安全な場所に保管してください。
-
Security Code はどこで入手できますか?
認証アプリを開き、プロンプトが表示されたらログインフォームに Security Code を入力します。
-
Security Code が無効な場合はどうすればよいですか?
セキュリティコードを再確認し、認証アプリをインストールした電話機の日付と時刻がコンピューターの日付と時刻と同期していることを確認してください。セキュリティコードが引き続き失敗する場合は、Backup Codes を使用してログインしてみてください。これらの手順が失敗した場合は、サポートチームに連絡してください。
Web 開発における CORS(Cross-Origin Resource Sharing)の処理
CORS は、異なるオリジン(ドメイン)からの Web リクエストをブロックまたは制限するセキュリティ機能です。セキュリティには不可欠ですが、ローカルで Web アプリを開発する際にはイライラすることがあります。CORS を管理またはバイパスする方法をいくつか紹介します。
サーバーで許可リストを設定する
AGS Private Cloud のお客様の場合、Web ドメインを許可リストに追加するようにリクエストできます。注意: この機能は AGS Shared Cloud ではまだ利用できません。
サーバーアクセスがある場合は、特定のオリジンからのリクエストを受け入れるようにサーバーを構成します。たとえば、http://localhost:3030 と http://example.com からのリクエストを許可できます。
ブラウザ機能または拡張機能を使用する(推奨されません)
ブラウザの設定または拡張機能を使用して CORS をバイパスできますが、この方法にはリスクがあります。Chrome の例を次に示します:
chrome.exe --disable-web-security --disable-gpu --user-data-dir="[directory]"
これにより、Chrome の Web セキュリティが無効になり、すべてのリクエストが CORS をバイパスでき、Cookie がドメイン間で永続化できるようになります。このアプローチはセキュリティと安定性を損なうため、お勧めしません。
または、ブラウザ拡張機能をプロキシとして機能させて、ターゲットサーバーにリクエストを転送することもできます。ただし、これは本番環境またはユーザー向けシナリオでは安全ではありません。
ローカルプロキシを使用する(開発者に推奨)
ローカルプロキシを設定することは、JavaScript 開発のための安全で効果的な方法です。設定方法は次のとおりです。
オプション 1: Vite の組み込みプロキシを使用する
Vite は、プロキシを設定するための簡単な構成を提供します:
export default defineConfig({
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://example.com',
changeOrigin: true,
cookieDomainRewrite: 'localhost',
configure(proxy) {
proxy.on('proxyReq', req => {
req.setHeader('Referer', 'https://example.com')
})
},
rewrite: path => {
return path.replace(/^\/api/, '')
}
}
},
},
})
説明:
- http://localhost:3000/api/test-route へのリクエストは https://example.com/test-route に転送されます。
- プロキシはオリジンを変更し、Referer ヘッダーを設定します。
- レスポンス内の Cookie は、元のドメインの代わりに localhost を使用するように書き換えられます。
オプション 2: Express で http-proxy-middleware を使用する
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const apiProxy = createProxyMiddleware({
target: 'http://example.com',
changeOrigin: true,
cookieDomainRewrite: 'localhost',
configure(proxy) {
proxy.on('proxyReq', req => {
req.setHeader('Referer', 'https://example.com')
})
},
rewrite: path => {
return path.replace(/^\/api/, '')
}
});
const app = express();
app.use('/api', apiProxy);
app.listen(3000);
Vite プロキシと同様に、このセットアップはリクエストを転送し、Cookie を書き換えます。
推奨事項
- 本番環境の場合: ドメインのサーバー側許可リストを設定します。
- ローカル開発の場合: ローカルプロキシ(例: Vite または http-proxy-middleware)を使用します。
- ブラウザ拡張機能またはセキュリティ設定の無効化は、リスクをもたらす可能性があるため避けてください。
これらの手順に従うことで、セキュリティを損なうことなく CORS を効果的に管理できます。