2012年08月10日

iOSアプリ内課金、リストア機能なしはなぜリジェクトされるのか

 今年の6月くらいに、アプリ内課金を実装したアプリがリジェクトされるようになった。リジェクトされる理由はリストアボタンを実装していないということである。もともとリストアの機能はXcodeにはあったらしいが、設定が面倒なためか、ほとんど使われていなかった。それを強制的に実装させるために、リジェクト対象になった。既存のアプリ課金を利用したアプリはアップデート時にリストア実装がチェックされる。

  リストアとはアプリ内課金情報を再取得するための機能である。同じApple IDを使っていれば、アプリは別のデバイスはインストールすることができる。iPhoneで有料で買ったアプリは、同じアカウントであればiPadでもそのままインストールできる。アカウントが同じであれば、二重課金されないことになる。

 アプリの場合も以前は購入ボタンをタップしたあとにログインを入力するので、購入したアプリを覚えておいて購入の金額ボタンをタップするしかなかった。しかし現在(iOS 5.1)は購入済みのアカウントでサインインしていると、購入済みのアプリは[購入]ではなく[インストール]と表示される。リストアはアプリ内課金コンテンツを[購入]ではなく[インストール]もしくは[ダウンロード]するためのものである。

 SakuttoBookも実はすでにサーバ版を運用していただいている。まだ全面的にセールスするまえに、サーバでアプリ内課金で運用したいとお聞きしたので先行してSakuttoBookでサーバを構築した。ところがやはり6月になってリストア未実装を理由にリジェクトされてしまった。すぐにリストア機能を組み込んで再申請するとリジェクトは回避された。

120810-09.gif 実際のリストア処理をSakuttoBookのサーバ機能を実装したくまがい印刷さんの「あきこみ」でその違いを見てみよう。あきこみ」は秋田発信のコミックをiOSで配信するためのアプリである。コミックの場合はデータサイズが大きくなるので、組み込み型では限界がある。そこでサーバ型になった。iPhoneでサーバ内の課金コンテンツを購入し、同じアカウントのiPadでサーバにアクセスした。

 まず「あきこみ」を開いて[Store]を選択する。そうすると、サーバにある課金コンテンツがリストされる。リストをタップすると価格と[購入する]が表示される。[購入する]と[アドオンを入手]というウィンドウが現れるので[購入する]をタップすると、購入済みというアラートが表示される。[OK]すると無料でサーバコンテンツがダウンロードされる。これがリストアしないときの処理である。

購入履歴をタップ
120810-01.gif

   ↓

[購入する]をタップ
120810-02.gif

   ↓

アドオンを入手すると購入済みと表示
120810-03.gif

120810-04.gif
*従来は購入しないとダウンロード済みかどうかわからなかった。

 リストアする場合は、まず[購入履歴]ボタンをタップする。[Restore]ボタンをタップすると[購入情報の復元]を行う。購入情報が復元されると、すでに購入済みのコンテンツは[再ダウンロード]できるようになる。[Restore]によってアプリ内コンテンツは購入済みとなり、再ダウンロードするだけでよい。

[Store]ボタンをタップ
120810-05.gif

   ↓

[Restore]ボタンをタップ
120810-06.gif

   ↓



購入情報を復元すると再ダウンロード可能になる
120810-07.gif


120810-08.gif

*リストアすると、購入ページでダウンロード済みがどうかがわかる。

 アプリ再購入対応はiOSのアップデートで可能だが、アプリ内課金コンテンツで購入済みかどうかをチェックするには、iOSの機能では無理がある。そこでアプリ内課金する場合は、アプリ側で課金情報を再取得することにした。別のデバイスにアプリをインストールした場合、アプリ内課金情報を取得するために用意された機能が[リストア(Restore)]である。

 リストア機能はユーザーにとってはわかりやすい機能だ。アプリ内のコンテンツが購入済みかどうかを確実に知ることができる。しかしそれは強制的に実装しなければならない機能なのかというと、多少疑問を感じない訳ではない。


 さてここからは憶測になることを了解して読んでいただきたい。[Restore]したとき、アプリはどのような処理を行うのだろうか。当然ここでは、課金情報を取得するわけだから、Appleのサーバ(iTunes Connect)にアクセスしている。アクセスするとき、当然Apple IDでログインし、そのアカウントが持つアプリ内課金コンテンツを調べて、購入済みの場合は領収書をアプリに発行するということになる。リストアすると、アプリのアカウントのみで課金コンテンツをチェックするわけである。

 最近iOSのアプリ内課金サーバを偽装する「エクスプロイト」というハッキングが露見したが、「エクスプロイト」が公になったのは7月に入ってからである。したがってリストアリジェクト問題と「エクスプロイト」は直接関係がないと考えてよい。

 リストアしないアプリをリジェクトするようになった原因は「エクスプロイト」てせはなく、昨年世間を賑わしたiTunesアカウントの大量盗難事件が原因ではないか。盗難された不正なアカウントでアプリ内課金コンテンツを購入したときの対策ではないと思われるのである。

 盗難されたiTunesアカウントは中国のネットショップで販売されていたといわれる。iTunesアカウント(Apple IDのアカウント)の偽装アプリ購入は、まず該当するiTunesアカウントの停止を行い、クレジットカードを無効化、次いで新しいデバイスでの有料アプリの購入するとき、アプリ購入時にクレジットカードのセキュリティコードを入力しなければならなくなった。セキュリティコードは本人しかわからないので、カードにひも付けされたアカウントを持っていてもアプリは買えなくなった。

 しかし盗難されたiTunesアカウントでは、アプリ内課金コンテンツだけをダウンロードしているケースもあり、アプリ本体のアカウントとアプリ内課金のアカウントが違っていてもアプリ内課金コンテンツは動作する。そのためダウンロードしていないアプリの高額なアプリ内課金コンテンツが、盗難アカウントで不正にダウンロードされたのである。つまりアプリ購入時のアカウントとアプリ内課金はひも付けされていないことが考えられる。

 アプリのアカウントとアプリ内課金のアカウントを一致させたるめの機能が実はリストア機能であると考えるのは穿ちすぎだろうか。リストアするとAppleのサーバに課金情報のあるアプリ内課金のみをライブにし、それ以外のものがあれば、それはデッドにすることができるはずだ。そうすると盗難アカウントで不正に取得したアプリ内コンテンツは利用できなくなる。

 日本でiTunesアカウント盗難が大きく騒がれたのは、2011年の秋頃だが、盗難は2009年の年末あたりから問題になっていた。新規デバイスでセキュリティコードの入力が必要になったのは今年に入ってから(セキュリティ担当者もクビになったし)だと記憶しているので、Appleの対応は出遅れていた。しかし、対応が始まると徹底した方策を講じた。その一つがリストアリジェクトなのではないかと思うのである。もちろんあくまで憶測。証拠はないことを重ねて申し添えておこう。

 なおSakuttoBookの2.0ではリストア機能に対応した。


◆Non consumableプロダクトとRestoreボタン
http://nantekottai.com/2012/07/20/restore-button/


◆盗まれたiTunesアカウント、ネット競売サイトに氾濫 中国
http://bit.ly/OOWykd



◆Xcode 4でする実機インストールの動画チュートリアルをアップ
http://bit.ly/JEofvK

◆Xcode 4でiOSアプリの設定と申請を最短距離でする方法
http://bit.ly/Jk88Bc

◆SakuttoBook(サクッとブック)でiPhoneアプリを作る方法
http://bit.ly/mhgjCG

◆SakuttoPubliパーソナル:iPhoneブックアプリ開発・申請代行はお任せ下
さい。
http://bit.ly/swjdFW

◆Xcode 4対応のSakuttoBook Lite版ならぬTrial版、無料ダウンロード開始
http://denshi-shoseki.seesaa.net/article/263470895.html

 


posted by @jink0222 at 15:08 | Comment(0) | TrackBack(0) | SakuttoBook日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック