In-app Billingの問題点

正式に公開されたものの良い噂を聞かないですね。色々触ってみて発見した問題点を思いつく限り書いてみます。
2011年4月24日時点の情報です。進化が早いので最新情報は公式ドキュメントを参照して下さい。

情報が少ない

http://developer.android.com/guide/market/billing/index.html
ぺらっぺらの情報しかない上にデベロッパー向けで難解です。

デベロッパーコンソールが貧弱

これがアプリ内課金の管理画面です。

Googleなのに検索が出来ないです。ダウンロード数の把握も出来ません。一括ダウンロードやアップロードは出来ないし、数が増えると管理が大変でしょうね。今んとこ数十件くらいが限界でしょうか。ってか1つのアプリに登録出来るアイテム数のリミットっていくつなんでしょう。

機種によって挙動が違う

Androidに付きまとう厄介な問題ですが、billingでも健在です。
http://groups.google.com/group/android-group-japan/browse_thread/thread/8b9789d2e83421ef/
機種別に個別対応が必要になりそうな予感です。

テスト環境が無い

eclipseで実行してもまともに動かないですよ。ちゃんと署名してマーケットにアップロードして、そこからDLしたものをインストールして、クレジットカードを登録してCheckoutで購入して下さいね。(マーケットからDLしないと動かないはバグ?)
あと、これは有料アプリの販売も同じですが、販売アカウントのCheckoutと端末に登録したGmailアカウントが同じ場合は上手く動かないです。Androidに紐付いているGmailアカウントのサインアウトは不可能なので、「端末を初期化して」別のGmailアカウントでサインインしてね。って公式ドキュメントに書いてあって愕然としました。複数のアカウントでテストする時は何回も端末の初期化を行うのですね。1台しか持ってない人はもう1台買えば良いと思います。その端末がアプリ内課金をサポートしているはずのバージョンでも、ちゃんと動く保証は無いですけど。

外部のサーバから購入情報の取得が出来ない

認証はアプリでやったとしても、決済情報のやりとりはサーバ間でやるのが常識(だと思ってました。)
しかしアプリ以外からのアクセスを受け付けてくれないので、例えばポイントをアプリ内課金で販売する場合、ポイント管理サーバはアプリから送信された情報を信用するしかなく、何かしらの認証の仕組みを自前で用意してあげなくちゃいけません。

アイテムID、タイトル、説明、価格など、デベロッパーコンソールで登録した情報をアプリから取得出来ない

アプリ内課金は、購入したいアイテムIDを指定して処理を呼び出すことで開始します。
が、アプリに登録されているアイテムIDをサーバから取得することは出来ません。タイトルや説明や価格もです。
つまり、販売するアイテム情報は全てアプリに埋め込まなければいけません。アイテムを追加したい場合はアプリの更新も必要になりますね。またはコンテンツ管理のサーバを用意することです。

実装の難易度が高い

nonceとかdeveloperPayloadとか説明を読んだだけでは理解出来ない項目が出てきたり、簡単にクラック出来ちゃうのでソースの難読化のProguardを公式に勧めてきたり、ドキュメント読むと頭が痛くなる上にサンプルアプリを動かすだけでお腹いっぱいになっちゃいます。
トライ&エラーは仕方ないとしても、端末によって挙動がおかしかったり、マーケットにアップしたものを公開してDLしないと動かない機能があったり、テスト購入するにはクレジットカードが必要だしCheckoutで決済されたのをキャンセルしたり、場合によっては端末の初期化をしたりと非常に面倒です。

セキュリティを担保するのが難しい

実装の難易度が高いので、とりあえず動く状態で満足しちゃいますが、それでリリースするのは危険です。例えばnonceやsignatureの検証を一切行っていないとすると、3分でクラックされて偽の購入完了通知を送られることになります。この購入情報をサーバに送ってポイント追加してたりすると、ポイントの無限増殖されちゃいますね。
また、アプリ自体が有料であれば買わないといけませんが、無料でDLさせて追加ステージをアプリ内課金で販売してたとすると、敷居が低い分カジュアルハッカーに狙われる可能性が増えそうです。

以上!

まだ実用レベルじゃ無いですよね・・・。特にテスト環境が無いのが致命的です。端末の初期化て・・・とりあえず動くことは動くので、腕に自信がある人は挑戦しがいがあると思いますが、もう少し待てば状況も改善されるのでしょうか。One Passの状況も気になりますし。

コンテンツ配信やセキュリティでリモートサーバの利用がほぼ必須になりそうなので、そういったサービスが出てくることにも期待ですね。