この記事は、iPhoneのアプリ内課金(In-App-Purchases)を使った、月額課金システムを実装した時の恐怖体験についてです。
※更新※
最近、App Store Review Guidelinesが変更されていて、新聞とか雑誌以外でも自動継続課金(Auto-renewable)のルールがちょろっと更新されたみたい。
iPhoneの自動継続の月額課金がサービス系のアプリでも使えるようになったか
しかし、実際のところ、どんなアプリがOKかはあいまいな部分もあるとは思うし、やってみないとわからなかったりするので、SaaS系で承認された人いましたらぜひコメント欄とかで教えてくれると嬉しいです。
ちなみに、アップストアのレビュー通ってもリリース時期を遅らせたらストアには公開されないので、レビュー通るかよくわからない時は、凄くシンプルな実装でとりあえずレビュー通るかまずサブミットして様子みるのも手です。
昔はInstapaperとかリジェクトされたとブログに書いてたけど、今もっかい自動継続課金を実装したら承認されるのかなー。あまり期待できないけど。
ここから、以前の経験の話
実は、iPhoneの月額課金システム、特にEverNoteやDropboxみたいなSaaSが使うNon-Renewing 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の購入画面。
開発者を混乱させるポイントとして、アップルのIn-App-Purchasesドキュメントを読むと、この非継続課金 (Non-Renewing-Subscriptions)は昔のやり方だから、これからは自動継続課金(Auto-Renewable-Subscriptions)を使えと書いているんですよ。
※追記:以前は上記のように書いてあったのですが、今はドキュメントが変わってそのようには書いてなかったです。 これも@niwさんに指摘して頂いた。本当に感謝。
※ In-App Purchase (英語)
サービス系のアプリは非継続課金を使えと強く書いてるわけでもない。普通にマニュアル読んだら自動継続課金を選ぶだろう。
でも、実際に素直に自動継続課金を実装してサブミットしたら”サービス系は非継続課金使えよな”と言ってリジェクトしてくるわけです。ひどい。
Instapaperの作者も、この件について昔、ブログを書いております。
※ The limited world of auto-renewable subscriptions (英語)
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でささっとユーザ登録システム用意して、上手くいけば後から独自サーバに移行するやり方もある。
僕もParse使ってささっとやりました。
2.ユーザ登録なしでも購入可能にする
ここが本当に混乱する部分。StackOverFlowでも混乱している開発者の方がたくさんいた。
ユーザ登録のシステムをWebベース用意し、アプリ内からログインできるようにするのは必須であるが、ユーザ登録をしなくてもアプリ内課金を購入できるようにしないといけない。
いったいどういう事なのか最初はよくわからなかったが、アップルのレビューワーとやりとりしていると、そういう仕様にしないといけないらしい。
つまり、ユーザが月額課金の購入ボタンを押す前、もしく購入した後に、ユーザ登録・ログインできるようにしないといけない。
それと同時に、ユーザがサービスへのユーザ登録を無視しても、月額課金の購入を可能にしないといけない。
月額課金に使う、非継続課金タイプのアプリ内課金は、ユーザがデバイスをなくしたりした時もちゃんとカバーできるように、Web側でユーザ登録必須というのは分るんですよ。
そうなると、開発者側としては、トラブルを防ぐために、ユーザ登録をしないと月額制のアプリ内課金を購入できない設計にしたい。
しかし、それをするとリジェクトされるんです。(実際に僕はそういわれてリジェクトされました)
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プロダクトタイプのアプリ内課金システムを使おうとしても、月額課金にプロダクトタイプのアプリ内課金を使うとリジェクトされます。
*家計簿と読み上げのアプリ作ってます。自己紹介と過去ログはこちら。