[Unity] iOSアプリ内でのレシート検証に失敗した時の原因[IAP]

iPhone

 先日、外国の人から「アプリを購入したいんだけど、購入を済ませても購入されたことにならなくて困っている」とサポートに連絡がありました。

 iOSのUnity IAPで課金を実装しているのですが、少し前にモジュールのバージョンをアップデートしたので、それが原因か!?と非常に焦りました。

 しかし、全く違うところに原因がありましたので、共有の意味も込めて記事に残しておきます。IAPの実装についてはこちらの記事を参照してください。




購入してもエラーとなる理由

 サポートに連絡をもらい、早速Macでデバッグ環境を立ち上げ、まずは実際にストアに上がっているアプリから自分のアプリを購入してみました(泣)すると、問題なく購入できるではないですか。。お金損した。。。

 続いて、Sandboxで購入処理を試してみました。すると以下のような振る舞いになり、購入を完了することができませんでした。

  • Restore OK
  • 購入処理 チャリーンとなり、OK
  • 購入後のポップアップ OK
  • 購入完了画面(自身のアプリで遷移させています) NG

 購入は完了しているのですが、アプリ内で何かしらが原因で購入完了の判定となっていませんでした。Sandboxではたまに購入がおかしい動きをすることがあり、それが原因かなぁと思いログを眺めていると。

 Receipt is valid. Contents

 のログが。。。iOSでは購入の際のレシートの検証をアプリで行い、検証できれば購入済みという判定を入れているのですが、そこでNGとなっていました。普段の評価であればSandboxのせいにして無視し、しばらくたって再評価とするのですが、問い合わせが来ているのでもう少し調べてみることにしました。

以前にもあったiOSアプリの購入エラー

 購入エラーについて調べていると、以前にも大規模な購入エラーにより課金できないことがあったようです。それはAppleのサービスが原因で、Appleからも公式に報告が行われるレベルのものだったようです。

ディベロッパーサイトを見てみる

 ディベロッパーサイトに詳細が報告されることがあるようなので、初めて障害情報を得るために見てみました。

 こちらのサイトの下の方にあるシステムステータスです。

出てました。Receipt Verification Outage(レシート検証サービス停止中)

 原因はアップルのサービスが止まっていることが原因でした。しかも全てのユーザーではなく、一部のユーザーが対象でした。

まとめ

 一瞬自分の実装のせいかと思い肝を冷やしましたが、Appleのせいでした。ただ、Appleから公式に発表がないせいで、全てベンダーに問い合わせが来るのは辛いものがあります。

 そして、Statusもディベロッパーサイトでしか確認できないことから、公式TwitterやInstaがない個人の開発者はユーザーへの説明もなかなか大変ですね。

 Appleさんは是非、ちょっとした影響度の小さな障害でもサービスを止めるような障害については公式で発表いただきたいものです。。無駄に自分のアプリをテストのために買ってしまった。。。。

コメント