メインコンテンツまでスキップ

エンタイトルメント取り消し入門

Last updated on July 14, 2026

注釈:本資料はAI技術を用いて翻訳されています。

Overview

この記事では、エンタイトルメントの取り消しに使用される Extend Override アプリの API コントラクト (Protobuf) について説明します。

service Revocation {
/**
Revoke
Currently, only Third-Party DLC Refund and Refund Order will trigger this grpc revocation.
*/
rpc Revoke(RevokeRequest) returns (RevokeResponse);
}

API コントラクト

Revoke

Revoke は、ゲームや仮想経済システム内の特定のイベントによってトリガーされる取り消しリクエストの処理を可能にします。これは、エンタイトルメントを管理するロジックを実装するために使用され、返金や取り消し注文が適切に処理されることを保証します。

この例では、現在サポートされている 3 種類のエントリタイプ (ITEMENTITLEMENTCURRENCY) に対して、いくつかのカスタムレスポンスを生成します。

トップレベルの Revoke 関数は、リクエストから取り消しエントリタイプを取得し、対応する関数を実行します。

アプリでは、次の関数が src/AccelByte.PluginArch.Revocation.Demo.Server/Services/RevocationFunctionService.cs にあります。

public override Task<RevokeResponse> Revoke(RevokeRequest request, ServerCallContext context)
{
var response = new RevokeResponse();
response.Status = "SUCCESS";

string revokeType = request.RevokeEntryType.Trim().ToUpper();
if (revokeType == "ITEM")
{
...
}
else if (revokeType == "CURRENCY")
{
...
}
else if (revokeType == "ENTITLEMENT")
{
...
}
else
{
response.Status = "FAIL";
response.Reason = $"Revocation type [{revokeType}] is not supported.";
}

return Task.FromResult(response);
}

取り消しエントリタイプが ITEM の場合、次の関数が実行されます。

response.CustomRevocation.Add(new Dictionary<string, string>()
{
{ "namespace", request.Namespace },
{ "userId", request.UserId },
{ "quantity", request.Quantity.ToString() },
{ "itemId", request.Item.ItemId },
{ "sku", request.Item.ItemSku },
{ "itemType", request.Item.ItemType },
{ "useCount", request.Item.UseCount.ToString() },
{ "entitlementType", request.Item.EntitlementType }
});

取り消しエントリタイプが CURRENCY の場合、次の関数が実行されます。

response.CustomRevocation.Add(new Dictionary<string, string>()
{
{ "namespace", request.Namespace },
{ "userId", request.UserId },
{ "quantity", request.Quantity.ToString() },
{ "currencyNamespace", request.Currency.Namespace },
{ "currencyCode", request.Currency.CurrencyCode },
{ "balanceOrigin", request.Currency.BalanceOrigin }
});

取り消しエントリタイプが ENTITLEMENT の場合、次の関数が実行されます。

response.CustomRevocation.Add(new Dictionary<string, string>()
{
{ "namespace", request.Namespace },
{ "userId", request.UserId },
{ "quantity", request.Quantity.ToString() },
{ "entitlementId", request.Entitlement.EntitlementId },
{ "itemId", request.Entitlement.ItemId },
{ "sku", request.Entitlement.Sku },
});
備考

gRPC リクエストの処理に関する詳細情報はこちらで確認できます。