2011年5月12日木曜日

Androidの情報はここで入手しよう

Androidについてもっとよく知りたい方に役立つ情報を提供しているサイトをご紹介します。

 ・Google本家の人が受け答えしてるメーリングリスト(http://source.android.com/discuss
 ここが一番情報が早いです。初心者向けや、Androidを移植する人向けのメーリングリストまで多岐に亘っています。英語が理解できれば、かなりの情報を得ることができます。

 ・本家Androidブログ(http://android-developers.blogspot.com/
 Androidの公式ブログです。英語ですが、公式の最新情報が配信されるので、チェックしておくといいでしょう。

日本においては、以下のサイトでAndroidの最新情報をGETできます。

 ・日本Androidの会(http://www.android-group.jp/
 筆者も所属している日本Androidの会は、無料で誰でも入会できます。勉強会なども盛んに行っていますのでこの機会にぜひ入会してみてください。

 ・株式会社ブリリアントサービスのAndroid情報ブログ(http://d.hatena.ne.jp/bs-android/
 弊社のAndroid情報ブログです。ポーティングからアプリまで幅広くカバーしています。

 ・ザウルスをAndroidにしちゃうよ。安藤恐竜さん(http://androidzaurus.seesaa.net/
 Zaurus向けだけでなく、Androidのさまざまな情報が配信されています。英語の情報が早いです。

 ・Project Hews by 木南英夫(http://d.hatena.ne.jp/hkinami/
 日本Androidの会 木南さんのブログです。Androidのさまざまな情報や考察がつづられています。

・Android情報まとめwiki(http://www29.atwiki.jp/android/
 古い英語ドキュメントの和訳などがあります。最近はニュース配信のみになっているようです。情報の掲載はかなり早いです。

 ・Androidあぷぷhttp://www.android-app.info/
 毎日1個ずつAndoid Marketに流れているアプリがレビューされています。

 ・はてなブックマークでAndroidのタグがついた記事(http://b.hatena.ne.jp/keyword/Android
 これをチェックしておけば、Androidのニュースをほとんど網羅できるかもしれません。

JavaソースコードとXMLファイル

HelloProjectでは、XMLファイルを編集して、表示する文字列を変更しました。このように、Androidのアプリケーション開発は、JavaといくつかのXMLファイルで行います。図3-1は主要なJavaソースコードとXMLファイルの関係を示しています。
AndroidManifest.xmlにはアプリケーションの名前やアイコン、最初に起動するActivityなどを指定します。
HelloActivity.javaがプログラム本体です。1つのアプリケーションは複数のActivityを持つことができ、それぞれのActivityは複数のViewを持つことができます。
R.javaは画面のレイアウトや文字列などのリソースをJavaコードから参照できるようにするIDが記述されます。Eclipseで開発する場合は、IDは自動的に生成されるので、このファイルを編集する必要はありません。
main.xmlは表示する画面のレイアウトを記述します。レイアウトを編集するツールは、はっきり言ってとても貧弱です。そこで、DroidDraw(http://www.droiddraw.org/)のようなツールを使う開発者も多いようです。

Using the Android Asset Packaging Tool

Android applications rely on many different types of resources-such as text strings,
graphics, and color schemes-for user interface design.
These resources are stored in the /res directory of your Android project in a strict (but
reasonably flexible) set of directories and files. All resources filenames must be lowercase
and simple (letters, numbers, and underscores only).

If you use the Eclipse with the Android Development Tools Plug-In, you will find that
adding resources to your project is simple.The plug-in detects new resources when you
add them to the appropriate project resource directory under /res automatically.These
resources are compiled, resulting in the generation of the R.java file, which enables you to
access your resources programmatically.

If you use a different development environment, you need to use the aapt tool command-
line interface to compile your resources and package your application binaries to
deploy to the phone or emulator.You can find the aapt tool in the /tools subdirectory of
each specific Android SDK version.

Android Dev:Android service

You can use services for different purposes. Generally, you use a service when no input
is required from the user. Here are some circumstances in which you might want to implement
or use an Android service:
n A weather, email, or social network app might implement a service to routinely
check for updates. (Note:There are other implementations for polling, but this is a
common use of services.)
n A photo or media app that keeps its data in sync online might implement a service
to package and upload new content in the background when the device is idle.
n A video-editing app might offload heavy processing to a queue on its service in order
to avoid affecting overall system performance for non-essential tasks.
n A news application might implement a service to "pre-load" content by downloading
news stories in advance of when the user launches the application, to improve
performance.
A good rule of thumb is that if the task requires the use of a worker thread and might affect
application responsiveness and performance, consider implementing a service to handle
the task outside the main application lifecycle.

2011年5月11日水曜日

みずほ銀行、ドコモと共同でAR店舗検索アプリ『ATM・店舗検索』をリリース

みずほ銀行とドコモは10日、AR(拡張現実)技術を用いたAndroidアプリ『ATM・店舗検索』をリリースした。
このアプリを使えば、カメラごしの実際の映像の上に周囲のみずほ銀行のATMや店舗を表示することができ、みずほ銀行の店舗の位置を直感的に把握することが可能になる。

同アプリは、みずほ銀行の有人店舗約430店舗、無人店舗約1200店舗のデータを網羅しており、各店舗までの距離や住所の確認、電話発信などができる。今後は、営業時間などの情報を一目で確認できるようにするなど、ユーザーの要望に併せて拡充を行っていくという。
みずほ銀行は2010年6月にスマートフォン用サイトの提供を開始しており、それ以降スマートフォン向けバンキングのサービスをスタートするなど、積極的にスマートフォン対応を進めている。同アプリもその一貫として開発されたもので、金融業界では初の取り組みになるという。

Google I/O: AndroidとChrome OSの棲み分けはどうなるのか

Googleは、同社内部のプラットホーム戦争の、正念場に達しつつある。AndroidとChrome OSの定義と性格分けと将来像を明確にすべき時期が、迫っているのだ。おそらく内部的には固まっているし、ある種の中期計画のようなものもあるのだろうが、しかし遅かれ早かれ世の中にそれを知らしめなければならない。そして今日(米国時間5/10)のGoogle I/Oには、重要なヒントがあったようだ。
ヒントとは、今日の2つの発表だ: ひとつはGoogleとしては予想どおりのMusic、もう一つはOpen Accessory Toolkitというサプライズだ。GoogleはOSの二股戦略を、基本的に、次のように性格づけたと思われる: Chrome OSはあらゆるところに、そして、Androidはなんにでも。
人びとがAndroidを使ってファンやLEDなど…多様な外部機器…をコントロールできるようにする。そのどこが重要なのか? GoogleがAndroidを、携帯電話のOSではなく、汎用の小規模OS(対象機器は最大でもタブレットぐらい)と位置づけたことが、重要なのだ。今後のAndroidは、細かな改良は進むにせよ、今のHoneycombと大きくは変わらないだろう。最大がタブレットなら、最小は?…なんにでもだ。電子レンジ、車、メディアプレーヤー、ロボット、時計、玩具、ツール、顕微鏡、レントゲン装置、セットトップボックス、カメラ、…例は限りなく挙げられる。とにかくCPUがあってインタフェイスがあるものならなんでもAndroidでコントロールできる、とGoogleは考えている。そうそう、それに、Google語で言うなら、それらの機器は互いにお話しできる。キッチンの冷蔵庫からPandoraをコントロールしたいかな? ぼくはたまたましたくないが、それ的なことをしたい人は何億もいるだろう。
Androidはあと一回フォークして、大型で標準のHoneycombに対し、もっと相当小型のバージョンを作ってもよい。依存性を減らし、レガシーでベーシックな(BASICでもよい)コードを磨いて再利用し、苦労して削らなくても4MBのRAMと25MHzのプロセッサで十分動く。それはモバイルで急速に大きく普及したように、組み込みや不可視のコンピューティングに短期間で大々的に浸透するだろう。ドキュメンテーションが整備されていて、多用途、しかも安いからだ(基本的には無料だが製品に合わせるための調製は必要)。しかも、CPUをはじめ基本部品は、そこらの市販標準品が十分に使えるから、仕事の着手も早い。
今回発表された小さなアクセサリテストベッドにより、Googleは多種多様な世界に足を踏み込むことができる。人気のハッキングパートナーArduinoを味方につければ、健全なプラットホームに加えて健全なコミュニティを手に入れる。Rubinは、コミュニティに頼るなと言ったかもしれないが、最後の1マイルのためにコミュニティが必要なら、それもかまわない。しかもコミュニティは、正しいツールさえあれば、すばらしいものを作り出すことがある。Kinectとそのコミュニティが、好例だ。
一方、Chrome OSは近く安定版が出るようだ。でもそれは、Android 1.0が安定版だったのと同じような意味であり、クラッシュはしなくても、磨き上げにあと1〜2年はかかるだろう。その1年ないし2年に何が起きるか? Googleは、そのころ8000万から1億のタブレットが現役で使われている、と予想する。OSは、iOS、webOS、Android、Chrome OS、今後発表されるOSなどさまざまだが、すべてに共通しているものは、HTML5対応の強力なブラウザだ。
ブラウザさえあれば何でもできる、と悟った人なら、Chrome OS製品を使えばよい。しかも、ほかのタブレットを買った人も、Googleのサービスを大量に利用する。Chrome OS云々ではなく、業界が欲しいのは、低価格製品に使える安定性の良い、あまり自己主張をしないOSだ。さらに、エンドユーザにとっては、Chrome OSを使うこととChromeブラウザを使うことの区別はほとんどない。何を使っても、調べごとなどほとんどのコンピューティングが、ブラウザ内で行われるからだ。自分の音楽を聴くのも、ムービーをレンタルするのも、やはりブラウザ内だ。写真も、メールも。下の図で、矢印の数を増やすのはとても簡単だ:
このようなエコシステムは今の消費者にとっては先進的すぎるから、Googleはデベロッパ向けのI/Oを発表の場に選んだ。それは、Los Angeles GalaやKe$haなどをゲストに招く、派手な立ち上げイベントではない。Googleはただ、将来を見据えている。「アプリケーション国」から「ブラウザ国」に移行する道筋を。
少なくとも、Open Accessory Toolkiの発表の席で、Arduinoのボード(この記事の最初の写真)について話を聞いたかぎりでは、見えてくるのは以上のようなビジョンだ。しかもそれは、Appleの両目を突く戦略としてきわめて有効だ。モバイルとアプリに強くても(無敵で最強だが!)、そのほかの世界…クラウドなど…に関して弱いAppleは、攻めやすいともいえる。まず、Appleが参入できない領域(ハッカー的コンピューティングと組み込みコンピューティング)で勝利し、次にAppleが売るすべてのユニットを、Googleのユニットで置換していく。このハンニバルのような挟撃作戦は、Appleのサービスと製品群の脇腹を突く。しかもAndroidの成長は堅調に続くから、モバイルの中央最前線は安泰だ。
ただし問題は、消費者への売り方。それには時間がかかるし、元々Googleはマーケティングの名手ではない。敵たちは、そこを見逃さないだろう。Chrome OSはまだ、Googleが願ったような普遍的なプラットホームではないが、Androidは1年以内にハイエンドとローエンドの両方向で地位を確立するだろう。タブレット戦争が激化し、クラウドサービスはコンピューティングの主流に近づく。iPhone 5とNexus X(など)とNFCと、そのほかの予想もできない何百もの技術〜製品〜イベントが、その同時期に出現するはずだ。
その1年に起きる多くのクレージーなものごとによっては、この突飛な記事さえも、無に帰してしまうことすらありえるだろう。

「Android」、米市場で「BlackBerry」を抜き首位に--コムスコア調査

 スマートフォン市場で「Android」の優勢が続いている。調査会社comScoreが発表した最新データによると、Androidは「BlackBerry」を手がけるResearch In Motion(RIM)を抜き去り、スマートフォンOSの米国市場シェアでトップに立った。
 comScoreが発表した2011年第1四半期の米国市場データにおいて、Androidは2010年第4四半期から6ポイント増となる34.7%のシェアを獲得した。一方、RIMのシェアは前四半期の31.6%から4.5ポイント減の27.1%に落ち込んだ。その結果、BlackBerryは上位5位中で2番目のOSとなった。
 他社に目を向けると、Appleの「iOS」が第1四半期にシェアを0.5ポイント伸ばした一方で、Microsoftの「Windows Phone」とHewlett-Packard(HP)の「Palm OS」はいずれもシェアを約1ポイント落とした。米国市場全体では、第1四半期のスマートフォン所有者数は7250万人にのぼり、前四半期から15%増加したとcomScoreは報告している。
 携帯電話機メーカー(スマートフォンとフィーチャーフォンの両方を含む)のシェアを見ると、第1四半期に首位となったのはSamsungで、米国のユーザーが所有する全携帯電話の24.5%を占めた。第2位はLGで20.9%、第3位はMotorolaで15.8%だった。
 第4位のRIMは、前四半期とほぼ変わらない8.4%の市場シェアにとどまったが、続く第5位のAppleは、Verizon Wireless版「iPhone」が発売となったこともあり、1.1ポイント増となる7.9%の市場シェアを獲得した。
 comScoreはデータ収集にあたり、同社の「MobiLens」サービスを通じて、米国の携帯電話ユーザー3万人以上に調査を実施している。

Google、App Engine 1.5をリリース Androidアプリのホスティングも可能に

 米Googleは5月10日(現地時間)、開催中の年次開発者会議「Google I/O 2011」において、アプリのホスティング向けクラウドサービス「Google App Engine」の新版(Ver.1.5)をリリースしたと発表した。
 App Engineは、2008年5月にプレビュー版として公開されたWebアプリケーションのホスティングサービス。2010年にはビジネス向けの有料版もリリースしている。現在、毎月約10万人の開発者がこのPaaS(サービスとしてのプラットフォーム)を利用しており、20万以上のWebアプリがホスティングされ、1日当たり15億以上のサイトビューがあるという。
 新版では、利用できる言語として、これまでのPythonとJavaに「Go」が加わった。GoはGoogleが2009年11月に発表したオープンソースのプログラミング言語だ。また、CPUやメモリ消費が激しいアプリをホスティングするための「Backends」機能が追加され、イベント処理機能の「Task Queue」も強化された。
 App Engineは2011年下半期にプレビュー版から正式版に移行する。正式版では、99.95%のアップタイムを保証したSLA(サービス品質保証)、開発者サポート、オフライン支払いを提供する。利用ベースの新しい料金体系も近く発表する。
 Googleはまた、Androidアプリ開発向けのEclipseベースのJava開発ツール「Google Plugin for Eclipse(GPE) v2.4」のβ版をリリースした。このツールにより、開発者はApp EngineでAndroid向けアプリを開発・ホスティングできるようになる。例えばゲームアプリの場合、ユーザーの対戦データを端末ではなくクラウド側に保存できる。

Google、Androidの次期版「Ice Cream Sandwich」を第4四半期にリリース

 米Googleは、Androidの次のバージョン「Ice Cream Sandwich」を第4四半期にリリースすることを開発者イベントGoogle I/Oで明らかにした。
 Ice Cream Sandwichのバージョン番号は明らかにしていないが、「1つのOSがどこでも走る」を優先課題とし、あらゆる種類のスマートフォンとタブレットで動作する統一OSを目指すとしている。タブレット向けであるHoneycombの優れた点をあらゆるデバイスに対応させ、開発者向けに各種の機器に合わせてアプリを調整する技術などを盛り込むという。
 またUSBアクセサリ向けのAPIなどの新機能を盛り込んだAndroid 3.1もリリースした。

MM総研が2010年度通期国内携帯電話出荷状況を発表、Androidが逆転

MM総研は5月10日、2010年度通期(2010年4月〜2011年3月)の国内携帯電話の出荷状況の調査結果を発表した。これによると、総出荷台数は前年比9.3%増の3,764万台で、半期別では、上期の1,913万台(前年比12.3%増)に続いて、下期も1,851万台(前年比6.4%増)と回復傾向が続いた。
同社では、出荷台数回復の主な要因について、スマートフォン市場の拡大とau市場におけるトライバンド対応端末への買い替え台数好調の2点と分析している。
2010年度通期のスマートフォン出荷台数は855万台で前年比約3.7倍に拡大し、総出荷台数の22.7%を占めている。OS別出荷台数とシェアはAndroidが57.4%となり、iOSの37.8%を逆転した。
メーカー別出荷台数では、シャープが2005年度以降6年連続の首位を獲得した。同社の出荷台数は858万台(前年比5.0%減)、シェアは22.8%(前年比3.4 ポイント減)となった。MM総研では、シェア減少の要因として、ソフトバンク市場でのシェア低下が挙げられているが、下期には「IS03(au)」「LYNX 3D(SH-03C)/ドコモ)」「GALAPAGOS Softbank 003SH」など大手3キャリア向けに投入したAndroidスマートフォンがヒットしており、引き続き強い存在感を示したとしている。
第2位は昨年度第3位の富士通(富士通東芝モバイルコミュニケーションズ含む)で出荷台数が652万台(25.9%増)、シェアが17.3%(2.3ポイント増)だった。10 年度下期から東芝の携帯電話事業との合併効果により台数・シェアを伸ばして順位を1つ上げた。第3位は昨年度第2位のパナソニック モバイルコミュニケーションズ(以下パナソニックモバイル)で出荷台数が439万台(15.6%減)、シェアが11.7%(3.4 ポイント減)となった。
2011年度についても、スマートフォン市場のさらなる拡大やau市場のトライバンド対応に伴う買い替え促進など、2010 年度同様の傾向が継続すると予測されている。スマートフォン市場については、「最新OSやデュアルコアCPU などを搭載したハイエンド端末から機能を抑えたミドルからローエンド端末まで、国内・海外メーカーを問わず数多くのスマートフォンが投入されることが見込まれ、ターゲットの明確化と端末の差別化がより重要になる」としている。

2011年5月9日月曜日

アプリ内課金のセキュリティ管理

 アプリが送信したトランザクション情報の完全性を保証する補助として、Android MarketPURCHASE_STATE_CHANGEDブロードキャストインテントに含まれるJSON文字列に署名をします。

 Android Marketは、このシグネチャを作るために開発者アカウントにひも付けられたプライベートキーを使用します。開発者サイトはそれぞれの開発者のためにRSAキーペアを生成します。開発者は自分のアカウントのプロファイルページで、このキーペアの公開鍵を見ることができます。これは、Android Marketライセンスで使用する公開鍵と同じです。

 Android Marketは(暗号化されない)JSON文字列とシグネチャに署名し、課金レスポンスを行います。アプリが署名されたレスポンスを受け取ったとき、開発者のRSAキーペアの公開鍵を使用してシグネチャの検証ができます。シグネチャを検証することによって、レスポンスが改ざんされているかどうかを検出する補助になります。

 アプリで署名検証ステップを行うこともできますが、もしアプリがセキュアなリモートサーバに接続可能であれば、サーバ内での署名検証を推奨します。

 またアプリ内課金は、Android Marketから受け取った購入情報の完全性を検証する補助として「ナンス」(一度だけ使用されるランダムな数値)を使用します。アプリはナンスを作成し、GET_PURCHASE_INFORMATIONリクエストとRESTORE_TRANSACTIONSリクエストでナンス送信しなければなりません。

 Android Marketはリクエストを受け取る際に、ナンスをトランザクション情報に含まれるJSON文字列に追加します。JSON文字列は署名されアプリに戻されます。アプリがJSON文字列を受信したら、JSON文字列のシグネチャと同様にナンスを検証する必要があります。

 セキュリティ関連の最良の方法に関しては「セキュリティ・ベストプラクティス」を参照してください。

 

アプリ内課金のメッセージ処理

■ アプリ内課金のリクエスト

 すべてのアプリ内課金リクエストは、Android Marketアプリへのメソッド呼び出しによるプロセス間通信という形で送信されます。このAndroid Marketアプリへのメソッド呼び出しは、「Android Interface Definition LanguageAIDL)」ファイルによって定義されます。

 インターフェイスはキーと値を指定したバンドルを引数に取ります。以下は5つのキーとその説明です。

  • 1CHECK_BILLING_SUPPORTED

 このリクエストはAndroid Marketアプリがアプリ内課金をサポートするかどうかを検証します。大抵、このリクエストはアプリ開始時に送信されます。

 Android Marketアプリがアプリ内課金に対応していない場合で、もしアプリがアプリ内課金関連だけのユーザーインターフェイスと機能を無効にしたい場合、このリクエストは役に立ちます。

  • 2REQUEST_PURCHASE

 このリクエストはアプリ内課金で最も重要な、購入情報をAndroid Marketアプリに送信します。

 ユーザーがアプリ内で商品を購入した場合に、アプリはこのリクエストを送信します。Android Marketはその際、チェックアウトのユーザーインターフェイスを表示することで金融取り引きを処理します。

  • 3GET_PURCHASE_INFORMATION

 このリクエストは購入状態変更の詳細を受信します。購入リクエストが完了した場合、またはユーザーがチェックアウト時に購入をキャンセルした場合に、購入状態は変更されます。以前に購入された商品が払い戻しされることもあり得ます。

 Android Marketはアプリに購入状態の変更を通知し、アプリはそのトランザクション情報を受信するために、このリクエストを送信します。

  • 4CONFIRM_NOTIFICATIONS

 このリクエストは、アプリが購入状態変更の詳細を受信したことを通知します。Android Marketはこのリクエストを受信するまで、アプリに対し購入状態変更通知を送り続けます。

  • 5RESTORE_TRANSACTIONS

 このリクエストは「アカウント単位で管理」された購入のためのユーザーのトランザクション情報を受信します。アプリはユーザーのトランザクション状況を受信する必要があるときだけ、このリクエストを送るべきで、それは大抵アプリがインストールまたは再インストールされたときだけです。

■ アプリ内課金のレスポンス

 Android Marketアプリはアプリ内課金リクエストに同期と非同期の両方でレスポンスを返します。同期レスポンスは以下の3つのキーを持つバンドルです。

  • 1RESPONSE_CODE

 このキーはリクエストに対するステータス情報とエラー情報を提供します。

  • 2PURCHASE_INTENT

 このキーはアプリがチェックアウトアクティビティを起動するために使用するPendingIntentを提供します。

  • 3REQUEST_ID

 このキーは、アプリがリクエストに対する非同期レスポンスを特定可能にするリクエストIDを提供します。

 これらのキーは必ずしもすべてのリクエストに対して返されるものではありません。詳細については後述する「購入リクエストのメッセージシーケンス」を参照してください。また次回記事の「表4 アプリ内課金リクエストタイプで戻されるバンドルキーの詳細」も参照してください。

 非同期レスポンスは以下を含むブロードキャストインテントの形式で送信されます。

  • com.android.vending.billing.RESPONSE_CODE

 このレスポンスはAndroid Marketサーバのレスポンスコードを含み、アプリがアプリ内課金リクエストを作成した後に送られます。サーバレスポンスコードは課金リクエストがAndroid Marketに送信成功したこと、または課金リクエスト中にいくつかのエラーが発生したことを表します。

 このレスポンスは(払い戻しや購入情報などの)購入状態変更通知には利用されません。このレスポンス時に送信されるレスポンスコードの詳細については、「Android Marketサーバレスポンスコード」を参照してください。

  • com.android.vending.billing.IN_APP_NOTIFY

 このレスポンスは購入状態が変更されたこと(購入成功、キャンセル、払い戻し)を表します。このレスポンスは1つ以上の通知IDを含みます。それぞれの通知IDはサーバ側の特定のメッセージと一致し、それぞれのメッセージは1つ以上のトランザクション情報を含みます。

 アプリがIN_APP_NOTIFYブロードキャストインテントを受信した後、アプリは詳細情報を取得するために通知IDと一緒にGET_PURCHASE_INFORMATIONリクエストを送信します。

  • com.android.vending.billing.PURCHASE_STATE_CHANGED

 このレスポンスは1つ以上のトランザクション情報の詳細を含みます。トランザクション情報はJSON文字列に含まれます。JSON文字列は署名され、シグネチャは(暗号化されていない)JSON文字列と一緒にアプリに送信されます。アプリ内課金のセキュリティを堅牢にする補助として、アプリはJSON文字列のシグネチャを検証できます。

 PURCHASE_STATE_CHANGEインテントで返されるJSON文字列は1つ以上の課金トランザクションの詳細をアプリに提供します。以下はJSON文字列のサンプルです。

{ "nonce" : 1836535032137741465,
  "orders" :
    { "notificationId" : "android.test.purchased",
      "orderId" : "transactionId.android.test.purchased",
      "packageName" : "com.example.dungeons",
      "productId" : "android.test.purchased",
      "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
      "purchaseTime" : 1290114783411,
      "purchaseState" : 0 }
}

 

アプリ内課金のアーキテクチャ

 アプリ内課金は、アプリとAndroid Marketサーバ間で課金リクエスト課金レスポンスによる通信で成り立ちます。ただし、アプリとAndroid Marketは直接通信をすることはなく、間にAndroid Marketアプリが仲介する形です。

 アプリ内課金の典型的な実装は、以下の3つのコンポーネントから構成されます。

1.     ユーザーの購入メッセージを処理し、課金リクエストをAndroid Marketアプリに送信するサービス

2.     Android Marketアプリから非同期に送信されるブロードキャストインテントを受信するブロードキャストレシーバ

3.     署名検証や"なりすまし"防止などのセキュリティ関連タスクを処理するセキュリティコンポーネント

 また、必要に応じて、以下の2つのコンポーネントを導入するのもよいでしょう。

1.     アプリ固有の購入通知、エラー、その他のメッセージを処理するレスポンスハンドラ

2.     アプリへの購入情報や状態をコールバックすることでユーザーインターフェイスを更新可能にするオブザーバ

 これらのコンポーネントに加え、アプリはある種のユーザーの購入情報を保存する方法と、購入する商品を選択させるユーザーインターフェイスを提供しなければなりません。チェックアウトのためのユーザーインターフェイスはAndroid Marketアプリによって提供されるため、アプリで用意する必要はありません。

 また、アプリによってはコンテンツ配信するためにリモートサーバを使用するかもしれませんが、アプリ内課金としてリモートサーバは必須ではありません。ただし、アプリ内で可能なセキュリティ関連のタスクをリモートサーバで行うことは、アプリをより堅牢にします。

 

アプリ内課金を始めるための条件とは

 アプリ内課金は、それを行うために特別なAPIが必要なわけでも、特別なハードウェアが必要なわけでもありませんが、以下の条件を満たす必要があります。

  • Android Market開発者アカウントを持っていること
  • Googleチェックアウトアカウントを持っていること
  • デバイスがAndroid 1.6APIレベル4)以上であること
  • デバイスがAndroid 3.0ならMyAppsアプリのバージョンが5.0.12以上、そうでない場合はAndroid Marketアプリのバージョンが2.3.4以上であること
  • Android Marketでアプリが配布されること
  • デバイスがネットワークに接続されていること

 Android Marketの役割は決済であり、アプリ開発者は購入された商品が音楽や画像などのデジタルコンテンツであるなら、それらをユーザーに配送する責任があります。アプリ内課金で販売可能な商品は、音楽や写真、ゲーム難易度やアイテムなどのデジタルコンテンツのみで、実在する商品、サービス、その他物理的な配送が必要な商品を販売できません。

 なお、アプリ内課金はテストを含めエミュレータでは動作できません。

 

Android Marketのアプリ内課金サービスとは

 アプリ内課金サービスとは、アプリ内でデジタルコンテンツを販売するためのAndroid Marketのサービスです。このサービスを利用することで、音楽や画像などのダウンロード可能なファイル、ゲーム難易度やポーションなどの架空のアイテム(俗に言う「アイテム課金」)など、幅広いコンテンツを販売が可能です。

 アプリ内課金の特徴は、以下のとおりです。

  • 決済はAndroid Marketが代行してくれる
  • 決済方法はAndroid Marketでアプリを購入する方法と同じでユーザーフレンドリー
  • 決済手数料はアプリ販売と同じ30