ゲームサーバーにフルフィルメントを実装する
Last updated on February 4, 2026
注釈:本資料はAI技術を用いて翻訳されています。
概要
この記事では、コード引き換えの実装方法と、ゲームサーバーがプレイヤーにアイテムを付与できるようにする方法について説明します。
コード引き換え
プレイヤーはキャンペーンコードを引き換えて、ゲーム、ゲーム内アイテム、コインなどのエンタイトルメントを受け取ることができます。コードを引き換えるには、Fulfillment APIからRedeemCodeを呼び出します。次の条件下で、コードが引き換えられ、プレイヤーはエンタイトルメントを受け取ります:
- コードがゲームネームスペースに存在する
- 最大引き換え制限に達していない
- 引き換えの日時が引き換え期間内である
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
FString Code = FString("MyRedeemCode");
FString Region = FString("US"); // Leave it blank if you want to use the default value from user token
FString Language = FString("en"); // Leave it blank if you want to use the default value from user token
auto ApiClient = AccelByteOnlineSubsystemPtr->GetApiClient();
auto FulfillmentApi = ApiClient->GetFulfillmentApi().Pin();
FulfillmentApi->RedeemCode(Code, Region, Language, THandler<FAccelByteModelsFulfillmentResult>::CreateLambda([](const FAccelByteModelsFulfillmentResult& Result)
{
// Do something if RedeemCode succeeds
}),
FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if RedeemCode fails
UE_LOG(LogTemp, Log, TEXT("Error RedeemCode, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));
string code= "some-code";
string region = "US";
string language = "en";
AccelByteSDK.GetClientRegistry().GetApi().GetFulfillment().RedeemCode(code, region, language, result =>
{
if (result.IsError)
{
// Do something if RedeemCode fails
Debug.Log($"Error RedeemCode, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if RedeemCode succeeds
}
});
string userId = "<user-id>";
var response = sdk.Platform.Fulfillment.PublicRedeemCodeOp
.SetBody(new FulfillCodeRequest()
{
Code = "<some-code>",
Region = "US",
Language = "en"
})
.Execute(sdk.Namespace, userId);
if (response != null)
{
//do something if success
}
fulfillmentService := &platform.FulfillmentService{
Client: factory.NewPlatformClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
namespace := "mygame"
userId := "myuserid"
code := "somecode"
body := platformclientmodels.FulfillCodeRequest {
Code: &code,
Region: "US",
Language: "en",
}
input := &fulfillment.PublicRedeemCodeParams{
Body: &body,
Namespace: namespace,
UserID: userId,
}
result, err := fulfillmentService.PublicRedeemCodeShort(input)
Fulfillment fulfillmentWrapper = new Fulfillment(sdk);
String userId = "<user-id>";
FulfillmentResult response;
try {
FulfillCodeRequest reqBody = FulfillCodeRequest.builder()
.code("<some-code>")
.region("US")
.language("en")
.build();
response = fulfillmentWrapper.publicRedeemCode(PublicRedeemCode.builder()
.namespace("<namespace>")
.userId(userId)
.body(reqBody)
.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
import accelbyte_py_sdk.api.platform.models as platform_models
result, error = platform_service.public_redeem_code(
body=platform_models.FulfillCodeRequest()
.with_code("MyRedeemCode")
.with_language("en")
.with_region("US"),
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)
ゲームサーバーがプレイヤーにアイテムを付与する
**FulfillUserItem()**関数を使用すると、ゲームサーバーがフルフィルメントサービスをトリガーし、プレイヤーにアイテムを付与できます。これは、プレイヤーが特定のアチーブメントを獲得したときに即座にアイテムを付与したり、特定のゲームモードのマッチ内のすべてのプレイヤーに特別なアイテムを付与し、マッチが終了したらそのアイテムをプレイヤーのインベントリから消去したりするために使用できます。
- Unreal Engine
- Unity
- C# Extend SDK
- Go Extend SDK
- Java Extend SDK
- Python Extend SDK
#include "GameServerApi/AccelByteServerEcommerceApi.h"
...
FString UserId = FString("SomeUserId");
FAccelByteModelsFulfillmentRequest FulfillmentRequest;
FulfillmentRequest.ItemId = FString("SomeItemId");
FulfillmentRequest.OrderNo = FString("SomeOrderNo");
FulfillmentRequest.Language = FString("en");
FulfillmentRequest.Region = FString("US");
FulfillmentRequest.Quantity = 1;
FulfillmentRequest.Source = EAccelByteItemSource::ACHIEVEMENT;
auto ServerApiClient = AccelByteOnlineSubsystemPtr->GetServerApiClient();
ServerApiClient->ServerEcommerce.FulfillUserItem(UserId, FulfillmentRequest, THandler<FAccelByteModelsFulfillmentResult>::CreateLambda([](const FAccelByteModelsFulfillmentResult& Result)
{
// Do something if FulfillUserItem succeeds
}),
FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if FulfillUserItem fails
UE_LOG(LogTemp, Log, TEXT("Error FulfillUserItem, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));
using AccelByte.Server;
...
string userId = "SomeUserId";
FulfillmentRequest fulfillmentRequest = new FulfillmentRequest
{
itemId = "SomeItemId",
orderNo = "SomeOrderNo",
language = "en",
region = "US",
quantity = 1,
source = ItemSource.ACHIEVEMENT
};
AccelByteSDK.GetServerRegistry().GetApi().GetEcommerce().FulfillUserItem(userId, fulfillmentRequest, result =>
{
if (result.IsError)
{
// Do something if FulfillUserItem fails
Debug.Log($"Error FulfillUserItem, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if FulfillUserItem succeeds
}
});
string userId = "<user-id>";
var response = sdk.Platform.Fulfillment.FulfillItemOp
.SetBody(new FulfillmentRequest()
{
ItemId = "SomeItemId",
OrderNo = "SomeOrderNo",
Language = "en",
Region = "US",
Quantity = 1,
Source = FulfillmentRequestSource.ACHIEVEMENT
})
.Execute(sdk.Namespace, userId);
if (response != null)
{
//do something if success
}
fulfillmentService := &platform.FulfillmentService{
Client: factory.NewPlatformClient(&repository.ConfigRepositoryImpl{}),
TokenRepository: &repository.TokenRepositoryImpl{},
}
namespace := "mygame"
userId := "myuserid"
quantity := int32(1)
body := platformclientmodels.FulfillmentRequest {
ItemID: "SomeItemId",
OrderNo: "SomeOrderNo",
Language: "en",
Region: "US",
Quantity: &quantity,
Source: platformclientmodels.FulfillmentRequestSourceACHIEVEMENT,
}
input := &fulfillment.FulfillItemParams{
Body: &body,
Namespace: namespace,
UserID: userId,
}
result, err := fulfillmentService.FulfillItemShort(input)
Fulfillment fulfillmentWrapper = new Fulfillment(sdk);
String userId = "<user-id>";
FulfillmentResult response;
try {
FulfillmentRequest reqBody = FulfillmentRequest.builder()
.itemId("SomeItemId")
.orderNo("SomeOrderNo")
.language("en")
.region("US")
.quantity(1)
.source("ACHIEVEMENT")
.build();
response = fulfillmentWrapper.publicRedeemCode(FulfillItem.builder()
.namespace("<namespace>")
.userId(userId)
.body(reqBody)
.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
import accelbyte_py_sdk.api.platform.models as platform_models
result, error = platform_service.fulfill_item(
body=platform_models.FulfillmentRequest()
.with_quantity(1)
.with_item_id("SomeItemId")
.with_order_no("SomeOrderNo")
.with_language("en")
.with_region("US"),
.with_source("ACHIEVEMENT"),
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)