ウォレットを管理する
注釈:本資料は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 Storeがある場合は、その中に仮想通貨用のアイテムを作成する必要があります(まだ存在しない場合)。仮想通貨用のアイテムが既に存在するかどうかを確認するには、Storesメニューのゲーム内Draft storeの横にある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のウォレットがフロントエンドに表示されます。