リストア機能がうまく動作しない罠

アプリ内課金の機能の一つにリストアというのがあります。
iPhoneを買い替えた時など、リストアを行うと、アプリ内課金で購入済みのプロダクトをそのiPhoneでも購入済みの状態にするという機能です。


で、いろいろあり、あるページにリストアボタンを追加しテストしたところ、リストアボタンを押しても購入済みのプロダクトが復活しません!


調べると、本来、リストアで回るはずの下の箇所を通っていません。
ここ通らなきゃ、プロダクト復活するはずもなく。

  • (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions


にもかかわらず、リストア成功の場合の下のメソッドが呼ばれます。

  • (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue


ありゃ、どっかでエンバクしたかと、ソースを見ても判らない。。
仕方なく、配布したadHocをテストして、リストアが動かなくなった時点を特定していくと、最新で動くもののアプリ内課金関係のソースと、現在のソースは全く同じものと判明。


この間4〜5時間ほど。原因が全く判らず、途方に暮れてました。


ソースが同じと判ったところで、作業ログを見て、なんとなくプロダクト関係でやった事を思い出すと、すぐには使わないプロダクトを削除した事を思い出しました。


もしや! と思い、Sandbox テスターを新しく作って再テスト。
さっくり動きます!!!
なんてこった!


どうやら、Sandbox テスターの情報とプロダクト情報の間の関連付けが壊れたのが原因のようです。
あまり無いとは思いますが、似たような症状になったら、Sandbox テスターを新しく作って再テストしてみると良いかも知れません。