StoreKit トランザクションとデバイスとAppleID

トランザクションの中断と再開について、もう少し詳しく見ていきましょう。

トランザクションの中断と再開に関する基本的な挙動の復習

購入の確認ダイアログが表示された後、アプリケーションから正しくfinishTransaction:を実行されなかったトランザクションは未完状態となり、次回アプリケーションが起動した時に再開されます。

実験

前のポストに書いた通り、トランザクションはApple IDと紐づいています。なので、複数のデバイスで同じApple IDを使っていて、なおかつ未完のトランザクションがあった場合にどういった挙動になるのか、実験をしてみます。※この内容は、2011年10月時点で最新のOS 5.0を用いて行った結果です。状況/アップデートにより挙動は変わる可能性があるため、十分に注意してください。

Consumableプロダクトの場合

まず、あらかじめ二つのデバイスA, Bで同じApple IDを設定しておきます。
デバイスA(iPhone 3GS)の方で、Consumableなプロダクト「regular_mushroom」を購入しようとし、finishTransaction:しないままアプリケーションを終了してしまいます。念のため、アプリケーションを再起動してトランザクションが再開されることを確認しておきます。
その状態でデバイスB(iPhone 4S)の方で同じプログラムを起動してみます。同じApple IDを使用しているので、デバイスAで発生した未完トランザクションがこちらでも再開されるかと思ったのですが、予想に反していつまで待ってもトランザクションは再開されませんでした。試しに、そのまま同じくデバイスB上で「regular_mushroom」の購入リクエストを送ってみたところ、そのまま購入ができてしまいました。どうやら未完トランザクションはデバイスを跨いで共有されないようです。
ちなみに、もし未完状態のトランザクションがある状態で、同じデバイス上で再び同じプロダクトを購入しようとすると右図のようなダイアログが表示され、トランザクションはキャンセルされます。後ほど見ていきますが、前回のトランザクションと新しく作ったトランザクションの二つが動く事になりとてもややこしい流れになります。
なお、その後デバイスAでアプリを起動すると先ほどの未完トランザクションが再開されることになるので、ユーザはデバイスA、Bでそれぞれregular_mushroomを一つずつ、合計二つ購入することになります。

Non-Consumableプロダクトの場合

同様の手順をNon-Consumableなアイテム「eternal_mushroom」に対して行ってみたところ、基本的には同じような流れになったのですが、デバイスBで購入手続きを進めている中で右図のようなダイアログが表示されました。また、Bのデバイスで購入手続きが完了後、再びAのデバイスを起動するとトランザクションが再開されました。その際にこちらでは認証以外のダイアログは表示されませんでした。
以上のことから、Non-Consumableなプロダクトの場合もトランザクションの共有は行われませんが、二重課金は発生しないようになっているようです。

まとめ

  1. 同じApple IDを使っていても、端末が違う場合未完状態のトランザクションは共有されない
  2. Consumableなプロダクトをそれぞれのデバイスで買おうとすると、他方のデバイス上で未完のトランザクションがあったとしても関係なくそれぞれで購入手続きが行われる。
  3. Non-consumableなプロダクトの場合は、課金されない旨が書かれたダイアログが表示されるが、トランザクションはそれぞれの端末で発生/完了される。

 もう少し詳しく見ていきます。

Pocket

「StoreKit トランザクションとデバイスとAppleID」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です