ウォレットを管理する
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services (AGS) ウォレットサービスは、プレイヤーがプロファイル内に仮想通貨を保持する方法を提供します。このガイドでは、ゲーム内でウォレットを設定する方法と、設定後にプレイヤーのウォレットを管理する方法を説明します。
この記事では、以下の方法について説明します。
- 仮想通貨のオリジンを追加する
- 支払いルールを並べ替える
- プレイヤーのウォレットの表示、入金、出金を行う
前提条件
- サポートするサードパーティプラットフォームの仮想通貨ごとに、IAMクライアントを作成する必要があります。これは、IAMクライアントの作成時にPlatformフィールドに対象のサードパーティプラットフォームを入力することで設定できます。
-
サイドバーで、Game Setup > Games and Apps > IAM Clientsに移動します。
-
+Create Newボタンをクリックします。
-
フォームに入力し、Platformフィールドに対象のサードパーティプラットフォームを入力します。
-
ウォレットの操作を始める前に、Manage Virtual Currenciesで仮想通貨を作成する必要があります。管理ポータルのCurrencyページで、パブリッシャーネームスペースまたはゲームネームスペースに仮想通貨が既に存在するかどうかを確認できます。

-
(オプション) 仮想通貨をプレイヤーに直接販売することはできません。仮想通貨を販売する場合は、その通貨用にItem TypeをCoinに設定したアイテムを作成する必要があります。Coinを作成しなくても、プレイヤーのウォレットへの仮想通貨の入金と出金は可能です。
-
ゲーム内ストアがまだない場合は、まずDraftストアを作成し、その新しいストアで仮想通貨用のアイテムを作成する必要があります。詳細については、ストアのセットアップ、設定、準備を参照してください。
-
Draftストアが既にある場合は、その中に仮想通貨用のアイテムを作成する必要があります(まだ存在しない場合)。仮想通貨用のアイテムが既に存在するかどうかを確認するには、Storesメニューで対象のゲーム内Draftストアの横にあるActionメニューを開き、Viewをクリックします。次に、Itemsタブを開いてアイテムを検索します。ドロップダウンメニューでFilter by categoriesを選択し、2つ目のドロップダウンメニューでCoinsを選択します。検索でアイテムが表示されない場合は、作成する必要があります。

-
支払いルールを管理する
アプリ内購入プラットフォームでは、仮想通貨のソースを別のプラットフォームにまたがって追加できます。例えば、PlayStationとSteamをXboxの支払いソースとして追加すると、PlayStationまたはSteamの残高を使用してXboxで購入できるようになります。以下は管理ポータルのデフォルト設定の一覧で、これらはいつでも調整できます。
| プレイ中のプラットフォーム | 残高のソース |
|---|---|
| PlayStation | PlayStation + System |
| Xbox | すべて |
| Steam | すべて |
| Epic | すべて |
| Apple | すべて |
| Google Play | すべて |
| Nintendo | Nintendo + System |
| その他 | すべて |
仮想通貨のソースを追加した後は、これらのソースを並べ替えて、購入時にどの残高を優先的に使用するかを設定できます。例えば、PlayStationを最優先、次いでSteamの順に設定すると、購入代金はまずプレイヤーのPlayStation残高から引き落とされ、次にSteam残高から引き落とされます(PlayStation残高だけでは購入総額を賄えない場合)。
ウォレットは、永続残高と期限付き残高の2種類の残高を保持できます。期限付き残高には有効期限があり、その期限までに使用されない場合、プレイヤーはこの残高を失います。永続残高には有効期限がありません。
期限付き残高は購入時に優先され、そのソースが他の永続残高より優先順位が低い場合でも、購入に使用されます。つまり、PlayStationが仮想通貨の最優先ソースに設定されていても、プレイヤーがSteamウォレットに期限付き残高を持っている場合は、期限付きのSteam残高が先に使用され、残りの代金がPlayStationウォレットから引き落とされます。
期限付き残高は、実際の通貨を使用して購入した仮想通貨にのみ適用されます。日本ではデフォルトで有効になっていますが、その他の地域ではデフォルトで無効になっています。
AGS 2025.1リリースでは、日本地域で実際の通貨を使用して仮想通貨を購入する際に、期限付き残高を無効にできるようになりました。詳細については、本ドキュメントの組み込みの仮想通貨有効期限ルールセクションを参照してください。
ウォレットに仮想通貨のオリジンを追加する
プラットフォームウォレット設定では、Origin of Virtual Currencyを設定できます。プラットフォームに追加された仮想通貨のオリジンによって、プレイヤーがその特定のプラットフォームでウォレット内の仮想通貨を使用できるかどうかが決まります。例えば、PlayStationタブでEpicがOrigin of Virtual Currencyとして追加されている場合、プレイヤーはPlayStation上でEpic由来の仮想通貨残高を使用できます。

-
管理ポータルのサイドバーで、Commerce > Wallets > Configurationsに移動します。
-
ページ上部のタブから追加したいプラットフォームを選択します。
-
選択したプラットフォームで、Addボタンをクリックします。
-
Add Origin of Virtual Currencyフォームが表示されます。ドロップダウンから追加したい仮想通貨のオリジンを選択します。
注記上記の表にリストされていないアプリ内購入を追加したい場合は、Otherを選択してください。
支払いルールの順序を変更する
-
管理ポータルのサイドバーで、Commerce > Wallets > Configurationsに移動します。ページ上部のタブから選択したプラットフォームを開きます。

-
Sort Orderボタンをクリックし、各ソースをクリックしてドラッグすることで優先順位を調整します。上位にあるソースほど優先順位が高くなります(例:優先順位1は優先順位2より優先されます)。
-
Save Orderボタンをクリックして変更を保存します。
プレイヤーのウォレットを管理する
管理ポータルでは、プレイヤーの取引履歴の表示や、各ウォレットへの入金と出金を行えます。
プレイヤーのウォレット詳細を表示する
-
管理ポータルのサイドバーで、Commerce > Wallets > User Walletsに移動します。
-
手元にあるプレイヤーアカウント情報に応じて、ドロップダウンメニューから適切な検索フィルターを選択します。EmailまたはUser IDで検索できます。検索バーにこの情報を入力し、Enterを押して検索します。検索結果には、対象プレイヤーが所有するウォレットの一覧が表示されます。
-
ウォレットを選択すると、利用可能な仮想通貨オリジンの一覧が表示されます。

-
右側のHistory列にあるViewをクリックすると、選択したウォレットの取引履歴を表示できます。履歴は降順で表示され、最新の取引が一番上に表示されます。

プレイヤーのウォレットに入金する
-
Creditボタンをクリックします。Credit Walletフォームが表示されます。

-
フォームに必要な情報を入力します。
-
Currencyフィールドで、入金対象となる特定の通貨のウォレットを選択します。
-
Creditフィールドに入金したい金額を入力します。
-
Sourceドロップダウンメニューから入金のソースを選択します。これは入金元を記録しておくためのメモ用フィールドです。選択肢は以下のとおりです。
- Purchase: プレイヤーによる仮想通貨の購入に伴う入金
- Promotion: プロモーションの配布による入金
- Achievement: プレイヤーがアチーブメントを達成したことによる入金
- Referral_Bonus: 紹介ボーナスによる入金
- Redeem_Code: 引き換えコードによる入金
- Other: その他の入金ソース
-
ドロップダウンからOrigin of Virtual Currencyを選択します。
-
Expired Atフィールドで、入金の有効期限を設定します。このフィールドは任意です。空白のままにすると、入金は永続残高になります。
-
Reasonフィールドに入金の理由を入力します。
-
-
Creditボタンをクリックして、選択したウォレットに入金額を付与します。
プレイヤーのサブウォレットに入金する
ウォレットにVC1という種類の仮想通貨が含まれている場合、そのウォレットの中には、VC1のさまざまなソース/オリジンが存在できます。例えば、VC1がPlayStation由来である場合、PlayStationが仮想通貨のオリジンとして記録され、これをサブウォレットと呼びます。PlayStationをオリジンとするサブウォレットに入金する場合、それはPlayStationがこの仮想通貨のソースであることを意味します。
-
WalletsページのActions列で、選択したサブウォレットのCreditをクリックすると、特定のサブウォレットに入金することもできます。Credit Walletフォームが表示されます。

-
フォームに必要な情報を入力します。
- Creditフィールドに入金したい金額を入力します。
- Sourceドロップダウンメニューから入金のソースを選択します。選択肢は前のフォームと同じです。
- Expired Atフィールドで、入金の有効期限を設定します。このフィールドは任意です。空白のままにすると、入金は永続残高になります。
- Reasonフィールドに入金の理由を入力します。
-
Creditボタンをクリックして、選択したサブウォレットに入金額を付与します。
プレイヤーのサブウォレットから出金する
-
WalletsページのActions列で、選択したサブウォレットのDebitをクリックすると、特定のサブウォレットから出金することもできます。Debit Walletフォームが表示されます。

-
フォームに必要な情報を入力します。
- Amountフィールドに、プレイヤーのウォレットから出金したい金額を入力します。
- Reasonフィールドに出金の理由を入力します。
-
Debitボタンをクリックして、選択したサブウォレットから金額を差し引きます。
組み込みの仮想通貨有効期限ルール
仮想通貨の有効期限は、特定の地域の規制に準拠するために個別に設定できます。有効期限を有効または無効にすると、サポート対象のウォレット内の仮想通貨に影響します。ただし、それ以前に付与または入金された仮想通貨は影響を受けません。サポート対象のウォレットは次のとおりです。
- PlayStation
- Xbox
- Steam
- Epic
- Google Play
- Twitch
- Oculus
- Other
- Adyen
- Xsolla
- Stripe
- AGSプレイヤーポータルでの実際の通貨による支払い
- 現在、AGSは日本地域を発生源とする仮想通貨の有効期限ルールのみをサポートしています。
- 日本地域を発生源とする仮想通貨には、180日間の有効期限のみを設定できます。日本の法律、特に資金決済に関する法律(平成21年法律第59号)では、実際の通貨で購入されたゲーム内通貨(VC)およびアイテムは前払式支払手段の対象となり、所定の登録、届出、供託による保全が必要とされています(第3条、第5条、第7条、第14条)。日本地域を発生源とする仮想通貨に180日間の有効期限を設定することで、前払式支払手段の適用が免除されます(第4条)。
国または地域の組み込み仮想通貨有効期限を有効化または無効化するには、次の手順に従います。
- 管理ポータルのサイドバーで、Commerce > Wallets > VC Expiration Time Rulesに移動します。
- Country Listで対象の国または地域を見つけ、そのステータスを切り替えて、仮想通貨の有効期限設定を有効または無効にします。確認メッセージが表示されます。
- 確認メッセージでENABLEまたはDISABLEと入力し、変更を確定します。
AGS Game SDKを使用してウォレットを実装する
ウォレットデータを取得する
SDKを使用すると、ゲームクライアントからウォレットデータを取得することもできます。
マルチプラットフォームウォレットがサポートされています。GetWalletInfoByCurrencyCodeV2を呼び出すことで、使用する通貨に基づいてウォレットの取引データを取得できます。取得対象の通貨はCurrencyCodeパラメータで指定します。
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FString CurrencyCode = TEXT("SampleCurrencyCode");
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto WalletApi = ApiClient->GetWalletApi().Pin();
WalletApi->GetWalletInfoByCurrencyCodeV2(CurrencyCode,
THandler<FAccelByteModelsWalletInfoResponse>::CreateLambda(
[=](const FAccelByteModelsWalletInfoResponse& Result)
{
UE_LOG(LogTemp, Log, TEXT("Wallet Balance : %d"), Result.Balance);
}), FErrorHandler::CreateLambda([](int32 Code, const FString& Message)
{
UE_LOG(LogTemp, Error, TEXT("Code : %d, Message : %s"), Code, *Message);
});
var wallet = AccelByteSDK.GetClientRegistry().GetApi().GetWallet();
string currencyCode = "sampleCurrencyCode";
Result<WalletInfoResponse> getWalletInfoResult = null;
wallet.GetWalletInfoByCurrencyCodeV2(currencyCode, result =>
{
if (result.IsError)
{
// Handle API failure or error here
Debug.Log($"Error: {result.Error.Message}");
return;
}
// Handle API success here
getWalletInfoResult = result;
});
string currencyCode = "sampleCurrencyCode";
var response = sdk.Platform.Wallet.PublicGetMyWalletOp
.Execute(currencyCode, sdk.Namespace);
if (response != null)
{
//do something if success
}
walletService := &platform.WalletService{
Client: factory.NewPlatformClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
currencyCode := "sampleCurrencyCode"
namespace := "mygame"
input := &wallet.PublicGetMyWalletParams{
CurrencyCode: currencyCode,
Namespace: namespace,
}
result, err := walletService.PublicGetMyWalletShort(input)
Wallet walletWrapper = new Wallet(sdk);
String currencyCode = "sampleCurrencyCode";
PlatformWallet response;
try {
response = walletWrapper.publicGetMyWallet(PublicGetMyWallet.builder()
.namespace("<namespace>")
.currencyCode(currencyCode)
.build());
} catch (Exception e) {
// Do something when failed
return;
}
if (response == null) {
// Null response from server
} else {
// Do something when successful
}
import accelbyte_py_sdk.api.platform as platform_service
result, error = platform_service.public_get_wallet(
currency_code="sampleCurrencyCode",
user_id="********************************",
namespace=namespace, # optional, gets the value from the global instance if unspecified
sdk=sdk, # optional, gets the global instance if unspecified
)
if error:
exit(error)
トラブルシューティング
ウォレットを手動で作成する必要はありません。ウォレットは仮想通貨が追加されるたびに自動的に作成されます。ウォレットに仮想通貨を追加していない場合でも、残高0のウォレットがフロントエンドに表示されます。