2012年5月22日TweetPocketTwitterで@naokitsさんに教えていただいたので検証してみました。以前この記事に書いた通り、今まではトランザクションが進行中にアプリがバックグラウンドに移行してしまうと、トランザクションオブザーバーがトランザクションのアップデート通知を受け取れなくなってしまうという問題があったのですが、最近この挙動に変更があったようです。4.3.3の端末があったのでそれぞれで検証してみました。元々の挙動2012年1月時点で検証した内容は下記の用になっています。purchasing.ログはこの状態で止まり、バックグラウンド状態ではObserverはSKPaymentTransactionStatePurchasedの通知を受け取れません。アプリケーションがバックグラウンドに入ってしまうと、トランザクション完了時のSKPaymentTransactionStatePurchasedの通知が受け取れず、トランザクションがどういう状態にあるのかアプリケーション側から把握できなくなってしまう問題がありました。ちなみにこの問題はバックグラウンドに入るときに一度observerをリムーブしてフォアグラウンドに戻ったときに再度observeし始めることで、回避できました。5.1.1で再検証してみました。ObserverのpaymentQueue:updatedTransactions:が呼ばれたタイミングでログを出力するようにし、バックグラウンドに入った時もobserveし続けるようにプログラムを変更してから実際に購入を試みてみました。1000000049329408以前と違って、バックグラウンドの間に進行したトランザクションの通知を受け取れるようになっていました。Reference」を見てみると、それぞれ更新日時が2012-02-16、2011-07-26となっていますが、古いAPIにdeprecatedがついたくらいでトランザクションオブザーバーの挙動についての記述の変更はありません。4.3.3の端末でも検証してみたところ、こちらでもバックグラウンド時のトランザクション進行の通知を受け取れるようになっていました。StoreKitの通信のパケットを分析するのは色々問題がありそうなのでやめておきますが、どうやらサーバーとの通信部分でなんらかの変更が行われた可能性が高そうです。例によって公式な情報がない状態なので、この挙動をどこまで信用してよいのかわかりませんが、この挙動が新しい仕様だとすると今までのようにバックグラウンドに入るタイミングでobserveを停止/再開する必要がなくなるので若干実装が楽になります。バックグラウンド時にobserveを停止/再開する方法も、公式なドキュメント等で指南されている方法ではなく、割と無理矢理な方法であったので、デベロッパから見ると今回の新しい挙動はある意味自然で歓迎すべき仕様と言えそうです。公式な資料での説明がほしい...。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイトご意見、ご感想をお願いします。その2ARを学ぶ10連休。折り返し地点までの記録。その110連休に改めてARを勉強することにした。1日目から3日目まで。