iPhoneの月額課金で直面するマニュアルにないルール自己紹介と過去ログプログラマをゆる募。ヘルプ作成のお手伝いも募集。Guidelinesが変更されていて、新聞とか雑誌以外でも自動継続課金(Auto-renewable)のルールがちょろっと更新されたみたい。iPhoneの自動継続の月額課金がサービス系のアプリでも使えるようになったかしかし、実際のところ、どんなアプリがOKかはあいまいな部分もあるとは思うし、やってみないとわからなかったりするので、SaaS系で承認された人いましたらぜひコメント欄とかで教えてくれると嬉しいです。ちなみに、アップストアのレビュー通ってもリリース時期を遅らせたらストアには公開されないので、レビュー通るかよくわからない時は、凄くシンプルな実装でとりあえずレビュー通るかまずサブミットして様子みるのも手です。昔はInstapaperとかリジェクトされたとブログに書いてたけど、今もっかい自動継続課金を実装したら承認されるのかなー。Subscriptionsはマニュアルに書かれてないルールが多すぎる。マニュアルを何度も読んだり、WWDCのビデオチェックしたり、WebやStackOverFlowを調べまくったり、実際にアップルのレビューワーとやりとりして、ようやく分かった事がたくさんあった。これから月額課金を実装してアプリを出す人は、マニュアル読んで普通にサブミットしたら謎ルールのせいでリジェクトされる可能性が高い。リジェクト連発で発生する数週間の待ち時間と無駄な開発コストを節約するため、ぜひ参考にしてください。余談だけど、有料アプリは無料アプリの圧力で売れなくなってるし、広告モデルで儲けるのはニッチサービスでは大変だ。ゲームはガチャやアイテム課金という必勝法が確率されているが、サービス系のアプリは今後、月額課金制を使った息の長いサービスがちょっとづつ増えていくんじゃないかなあと思っている。ユーザも良質なサービスにはお金を払うようシフトしていく気がするし。TumblrとWordPressで迷って、ネットサービスは無料が当たり前な時代の終焉を感じたというわけで、アップルの月額制アプリ内課金の全体像は子供からお年寄りまで知っておいて損はないのでしょうか!SaaS系サービスは自動継続課金が使えないいきなり残念なお知らせがこれ。(Auto-Renewable-Subscriptions)がSaaS系のサービスは使えない!自動で継続しない非継続課金(Non-Renewing-Subscriptions)を使わないといけない。”自動継続課金は新聞とか雑誌系アプリなどメディア向けのシステムであり、Webサービス系のアプリはダメだぜ!”らしい。これは、僕もアップルのレビューワに言われました。※追記:一部例外あるようで混乱します。実際、サービス系のアプリで自動継続課金を実装してサブミットしたらこう言われる可能性高い。僕もせっかく頑張って書いたコードと時間を無駄にしました。え、なんで、、だったら、月額課金をアプリに実装しても、毎月ユーザは購入ボタンを押さないといけないの。それって月額課金の意味ないやん。思ったんですが、現時点ではこういうルールなので、涙をこらえて我慢するしかないようです。SaaS系のサービス、EvernoteもDropbox、Instapaperのサブスクリプションなど、すべて自動継続しないNon-Renewsing-Subscriptionsです。※追記:Twitter上で@niwさんに指摘して頂いたのですが、Evernoteはいつの間にか、Non-RenewingからAuto-Renewableに変わっていた!数ヶ月前まではNon-Renewingだったのですが、最近変わったようです。これは僕が現在のEvernoteの動きをしっかりと確認してなかった責任です、猛反省。アップルさんは最近になって審査基準を変えたのか、いまだに一部のアプリだけの例外処置なのか。Evernoteの購入画面。(Non-Renewing-Subscriptions)は昔のやり方だから、これからは自動継続課金(Auto-Renewable-Subscriptions)を使えと書いているんですよ。※追記:以前は上記のように書いてあったのですが、今はドキュメントが変わってそのようには書いてなかったです。これも@niwさんに指摘して頂いた。(英語)サービス系のアプリは非継続課金を使えと強く書いてるわけでもない。普通にマニュアル読んだら自動継続課金を選ぶだろう。実際に素直に自動継続課金を実装してサブミットしたら”サービス系は非継続課金使えよな”と言ってリジェクトしてくるわけです。Instapaperの作者も、この件について昔、ブログを書いております。(英語)SaaS系でも自動継続課金使ってるアプリあるよ?実は、たまにWebサービス系でも自動継続課金のIn-App-Purchasesを使えているアプリがある。このアップル側のレビューワの気まぐれっぽいところがiOSアプリ開発者を混乱させるんだけど、このアプリがOKのようだから、Webサービス系だけど俺も試してみるぞというのはお勧めできない。※追記:Evernoteが最近使えるようになっているのでこの短期間にレビューワーのポリシーが変わった可能性もあるけど、今までの慣例から要注意だと思います。有名アプリだから例外枠に入っただけかも。俺オッケーだったぜとか、俺ダメだったぜっていう方は教えて欲しいです。SaaS系だけど自動継続課金が使えているのは、たまたまな場合が多いし、最初OK出ても、後からやっぱりリジェクトとなるリスクもある。Ycombinator出身のGreplinというアプリは、SaaS系だけど以前は自動継続課金を使えていた。いまはCueというサービスに名前が変わっているけど、課金制度は非継続課金に変わっていた。途中からシステムを変えるのは非常に面倒だと思う。SaaSだから自動継続課金使えない、悲しい。悲観する事ばかりではなかったりもします。最初は僕も、”自動継続しない月額課金システムなんてクソじゃねーか、ウンコ!”って思っていましたが、実は非継続課金を使ったほうが上手くアップルの30%手数料をスルーする事が出来る場合もあるのです。Evernoteが用意する、アプリ内課金からクレカ登録に誘導する流れ※追記:Evernoteは最近Auto-Renewableに変わったようで、こういう動きはしなくなりました。iPhoneアプリ内で月額課金を使うと、開発側はアップルから30%の手数料を毎月取られてしまう。Evernoteは毎月ユーザが購入しなおさないといけない非継続課金システムの不便さを逆手にとって上手いやり方をしている。iPhoneアプリ内で月額のアプリ内課金を購入してしばらくすると、有効期限が切れる一週間前に”もうすぐ切れますよ。購入しますか?”というメッセージをメールで通知してくる。その購入画面はもちろんEvernote側にとって手数料が少ないクレジットカードを使った購入画面。ちなみに、アップルの手数料30%を回避するため、アプリ内で有料月額会員に登録する部分だけWebviewベースで購入する仕様を思いつくかもしれませんが、この方法はアップルに発見されるとリジェクトされます。非継続課金(Non-Renewing-Subscriptions)を実装する時の注意点ちなみに、EvernoteとかDropboxみたいに、Webサービスから始まっていて、ユーザ登録システムがすでにWeb側で用意されている場合は特に問題ありません。問題は、モバイルファーストで、iPhoneアプリしかないけど月額課金をやりたいというケース。ここが本当に複雑で、この記事のポイントなんだけど、細かく説明していると長くなりすぎるので、出来るだけ簡単に書いてみる。サーバサイドでユーザ登録システムを用意するユーザ登録なしでも購入可能にする1.サーバサイドでユーザ登録システムを用意するアップルのサーバ側で全部やってくれる自動継続課金(Auto-Renewable-Subscriptions)に比べ、非継続課金(Non-Renewing-Subscriptions)は実装のハードルが高い。サーバサイドのユーザ登録システムを用意して、ユーザの管理システムをWeb側で用意する必要がある。UserDefaultとかKeychainとか、iCloudだけで対応しようとしたらリジェクトされます。Webサービスでユーザ登録システムが出来上がっていて、アプリ版を作ろうっていう場合は特に問題ないのだけど。最近はモバイル版から作り始める場合も多いので、非継続のアプリ内課金を使うだけのためにWeb側のユーザ管理システムを作ったというiPhoneアプリ開発者の話もたまに聞きます。最近はParseという素晴らしくお手軽にアプリのサーバサイドを構築できて、objecive-Cで連携できるサービスがある。Parse.comのUXデザイナーは超一流だと思う課金システムを使ったモバイルアプリサービスを素早く実験したい場合、最初はParseでささっとユーザ登録システム用意して、上手くいけば後から独自サーバに移行するやり方もある。僕もParse使ってささっとやりました。2.ユーザ登録なしでも購入可能にするここが本当に混乱する部分。StackOverFlowでも混乱している開発者の方がたくさんいた。ユーザ登録のシステムをWebベース用意し、アプリ内からログインできるようにするのは必須であるが、ユーザ登録をしなくてもアプリ内課金を購入できるようにしないといけない。いう事なのか最初はよくわからなかったが、アップルのレビューワーとやりとりしていると、そういう仕様にしないといけないらしい。ユーザが月額課金の購入ボタンを押す前、もしく購入した後に、ユーザ登録・ログインできるようにしないといけない。それと同時に、ユーザがサービスへのユーザ登録を無視しても、月額課金の購入を可能にしないといけない。月額課金に使う、非継続課金タイプのアプリ内課金は、ユーザがデバイスをなくしたりした時もちゃんとカバーできるように、Web側でユーザ登録必須というのは分るんですよ。なると、開発者側としては、トラブルを防ぐために、ユーザ登録をしないと月額制のアプリ内課金を購入できない設計にしたい。それをするとリジェクトされるんです。StackoverFlowでも似たような事例がEvernoteとかDropboxみたいな、アカウントがないとそもそもアプリの起動画面から進めないアプリだとこのルールは適用されないみたいだ。アカウント登録しなくても使い始められるアプリで、月額課金を導入しようと思っているアプリなら要注意の部分となります。ちなみに、iCloud使えばいいじゃないかと最初は思うんだけど、iCloud切っているユーザもいるし、iCloudオンリーでユーザを管理したらリジェクトされる。アップルが用意しているWWDC2011でのIn-App-Purchaseのビデオを見ると、Non-Renewing-SubscriptionsではiCloud使う方法とサーバサイドの方法を紹介してた。僕はユーザがアプリを削除しても記録が残るKeychainと、サーバサイドのユーザ登録を併用しました。サーバサイドのユーザ登録を用意しないとリジェクトだし、iCloudオフにしているユーザもいるから、iCloudは使いませんでした。ちなみに、In-App-Purchaseのデバイス側の記録でUserdefault使うと簡単にハックされるし、アプリを削除したら消えるから注意。補足として、Non-Renewing-Subscriptionsはややこしいから、Non-Consumableプロダクトタイプのアプリ内課金システムを使おうとしても、月額課金にプロダクトタイプのアプリ内課金を使うとリジェクトされます。*作ってるアプリと人気記事はこちら。情熱をテストする最近の投稿テレビ番組でアプリが紹介されたらどれぐらいDL数が増えるか?3時のヒロイン、かなでさんがZenyを2年使ってくれてた。Clarkという歌手のライブにアムステルダムまで観に来たら、オランダ語の漫談が半分で言葉がわからない孤立感を体験でき、みんなデカすぎて泣きそうなりました。自己紹介と過去ログプログラマをゆる募。ヘルプ作成のお手伝いも募集。