for Unity 2025.1.17
クエスト完了後にトランザクションの実行完了を待つ方法について教えてください。
これはDistributor.TransactionResult で実行完了を待つ理解で合っていますか?
その場合、domain.EndFuture で発行される TransactionId を指定する必要があるかと思うのですが、
以下ドキュメントでは Result に TransactionId が含まれると記載されていますが、domain.EndFuture の Result には TransactionId が含まれていません。
代わりに、Progress で取得した TransactionId を TransactionResult に設定しましたが、トランザクションの実行結果は待たれず、future.Result が null になってしまいます。(エラーにもならないですが)
GS2-Quest SDK for Game Engine API リファレンス | Game Server Services | Docs
var domain = Define.mDomain.Quest.Namespace(
namespaceName: questNamespaceName
).Me(
gameSession: Define.mSession
).Progress(
);
var future2 = domain.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
EzProgress progress = future2.Result;
transactionId = progress.TransactionId; /
var future = domain.EndFuture(
isComplete: isComplete,
rewards: rewards,
config: config
);
yield return future;
if (future.Error != null)
{
if (!future.Error.ToString().Contains("stampSheetResult.error.notFound"))
{
if (future.Error.ToString().Contains("error.unknown."))
{
Debug.Log("報酬設定されていません");
}
onError.Invoke(
future.Error, null
);
yield break;
}
}
}
//以下はnullが返ってしまう
{
var domain = Define.mDomain.Distributor.Namespace(
namespaceName: "XXXX_Distributor"
).Me(
gameSession: Define.mSession
).TransactionResult(
transactionId: transactionId
);
var future = domain.ModelFuture();
yield return future;
if (future.Error != null)
{
onError.Invoke(
future.Error, null
);
yield break;
}
//mAcquireActions = future.Result.SheetRequest;
//onSuccess.Invoke();
//yield break;
}
後、ドキュメントに、「Gateway のネームスペースに対して通知を受け取るためにユーザーIDを設定必要」とあったので、ログイン後に以下のコードも入れています。namespaceはコンソール上で
Distributorに関連ついています。
Debug.Log("プッシュ通知設定");
{
var domain = gs2.Gateway.Namespace(
namespaceName: "XXXXX_Gateway"
).Me(
gameSession: Define.mSession
).WebSocketSession(
);
var future = domain.SetUserIdFuture(
allowConcurrentAccess: null
);
yield return future;
if (future.Error != null)
{
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.ModelFuture();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
}
Game Engine | Game Server Services | Docs