Money2::TakeOverSubscriptionStatus で複数サブスクリプション復元時に subscription.transaction.myself が発生する

107 views
Skip to first unread message

hirokawa

unread,
Mar 11, 2026, 5:41:54 AM (6 days ago) Mar 11
to GS2 ユーザグループ
お世話になっております。

Unity iOS アプリでサブスクリプション復元を実装している中で、Money2::TakeOverSubscriptionStatus の挙動について確認したく投稿しました。

現在、同一アプリ内にサブスクリプションプラン A / B の 2 つが存在しています。
この 2 つは異なるサブスクリプショングループとして設定されています。

この状態で Money2::TakeOverSubscriptionStatus を用いてサブスクリプション状態の引き継ぎを行ったところ、購入状況の組み合わせによって一部のみ復元できず、以下のエラーが発生しました。

  BadRequestException: [{"component":"userId","message":"money2.subscription.transaction.userId.error.myself","code":"subscription.transaction.myself"}]

再現条件

以下の条件で確認しています。

  1. サブスク A のみ購入し、TakeOverSubscriptionStatus 実行

    • 復元成功
  1. サブスク B のみ購入し、TakeOverSubscriptionStatus 実行

    • 復元成功
  1. サブスク A / B の両方を購入

    • TakeOverSubscriptionStatus を A → B の順で実行

    • A の復元は成功

    • 続けて B の復元を行うと、上記エラーが発生


こちらの挙動について、以下を確認したいです。
  • TakeOverSubscriptionStatus は、iOS の receipt に複数のサブスクリプション情報が含まれている場合、1 回の実行で関連する契約状態もまとめて現在ユーザーへ引き継ぐ仕様でしょうか

  • その結果、1 回目の引き継ぎ後に 2 回目対象のサブスクリプションもすでに同一 userId に紐づいた状態となり、subscription.transaction.myself が返っている、という理解で正しいでしょうか

  • もしこの挙動が仕様であれば、異なるサブスクリプショングループの複数サブスクリプションを安全に復元するための推奨フローをご教示いただけますでしょうか


お手数ですが、ご確認いただけますと助かります。

よろしくお願いいたします。

丹羽一智

unread,
Mar 12, 2026, 7:00:07 AM (5 days ago) Mar 12
to GS2 ユーザグループ, hirokawa
対応を入れましたのでご確認ください

Kazutomo Niwa
2026年3月11日 18:41 +0900、hirokawa <fine.t....@gmail.com> のメール:

hirokawa

unread,
Mar 12, 2026, 11:27:42 PM (4 days ago) Mar 12
to GS2 ユーザグループ, 丹羽一智, hirokawa

ご対応のご連絡ありがとうございます。

対応いただいたとのことでしたので、こちらで改めて動作確認を行いました。

しかしながら、こちらの環境では 以前と同じ事象が引き続き再現しており、現時点では解消を確認できておりません。


確認結果

以下の条件で再検証を行いました。

  • Unity iOS アプリ

  • 異なるサブスクリプショングループのサブスクリプション A / B を使用

  • Money2::TakeOverSubscriptionStatus による復元を実施

再現内容
  • サブスク A のみ購入 → 復元成功

  • サブスク B のみ購入 → 復元成功

  • サブスク A / B の両方を購入し、A → B の順で TakeOverSubscriptionStatus を実行

    • A の復元は成功

    • B の復元時に以下のエラーが発生(BadRequestException: [{"component":"userId","message":"money2.subscription.transaction.userId.error.myself","code":"subscription.transaction.myself"}])


なお、Androidアプリでは問題は起こっておらず、iOSアプリでのみエラーが発生しています。
必要であれば、こちらでも追加ログや実装内容、検証手順を提示可能です。
お手数をおかけしますが、引き続きご確認のほどよろしくお願いいたします。  


コード内容
// StoreController.OnPurchasesFetchedのコールバック
private void OnPurchasesFetched(Orders orders)
{
    UniTask.Create(async () =>
    {
        foreach (var order in orders?.ConfirmedOrders)
        {
            var domain = gs2.Money2
            .Namespace("game-data")
            .Me(gameSession);

            // 異なるサブスクリプショングループのレシートを受け取ると、2回目に「"money2.subscription.transaction.userId.error.myself"」が起きる
            var result = await domain
                .TakeOverSubscriptionStatusAsync(order.Info.Receipt);

            var item = await result.ModelAsync();

            // 復元情報を元に更新する

        }
    });
}

2026年3月12日木曜日 20:00:07 UTC+9 丹羽一智:

丹羽一智

unread,
Mar 13, 2026, 7:00:11 AM (4 days ago) Mar 13
to GS2 ユーザグループ, hirokawa, hirokawa
自分自身の契約のサブスクリプショングループAを発見した段階で早期リターンしていたのが原因でしたので修正しました。

Kazutomo Niwa
2026年3月13日 12:27 +0900、hirokawa <fine.t....@gmail.com> のメール:
Reply all
Reply to author
Forward
0 new messages