トランザクションとデバイスとAppleIDトランザクションの中断と再開について、もう少し詳しく見ていきましょう。購入トランザクションは、アプリが最後にfinishTransaction:を呼んだタイミングで完了となりますが、そこにたどり着く前にアプリケーションが終了してしまったりネットが切断してしまう可能性があります。その場合、トランザクションは未完状態になり、次回アプリケーションが起動したタイミングで再開されます。これを適切に処理しようとすると、結構厄介なことに気がつきます。支払いは完了したのにアイテムがアンロックされない、等の問題が起きないように、StoreKitにはトランザクションの機構があります。トランザクションの機構は絶対に必要なのですが、これがStoreKitによるアプリ内課金の組み込みを複雑にする大きな要素となってきます。基礎から見ていきましょう。前iPadStoreKitの支払いリクエストの作成と購入手続きの開始までStoreKitにおける課金は、支払い(ペイメント)のリクエストをStoreKitに投げることではじまります。ややこしい内容はでてきませんが、一つずつ確認していきます。前iPadプロダクト情報の取得StoreKitでは、支払いリクエストをする前にプロダクト情報を取得しにいくようにドキュメントに書かれています。プロダクト情報をAppStoreのサーバーに取りにいき、返ってきた情報を基にUIを更新し、また支払いのリクエストを発行するように指南されています。前iPadStoreKitの正常な決済の流れまずは、StoreKitを使った正常な購入の流れを確認していきます。前iPadStoreKitと闘う「iOSアプリの売り上げの72%はアプリ内課金から来ている」(このタイトルは若干誇張されていて、正確には「iOSアプリの売り上げの72%はアプリ内課金を搭載したアプリから発生したもの」です)というニュースがあるほど、近年アプリ内課金の存在は大きなものとなってきました。iOSの場合は規約の関係からアプリ内課金を実現する場合にはStoreKitを使うことになりますが、このStoreKitがなかなかの曲者で、僕は未だに取り扱いに苦労しています。