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

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

Last updated on February 4, 2026

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

概要

この記事では、エンタイトルメント取り消しのための 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 関数は、リクエストから revoke エントリタイプを取得し、対応する関数を実行します。

In the app, the following function can be found in 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);
}

revoke エントリタイプが 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 }
});

revoke エントリタイプが 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 }
});

revoke エントリタイプが 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 リクエスト処理の詳細については、こちらをご覧ください。