Google APIs and Services in Android

Androidはオープンな携帯電話プラットフォームなので、誰でもコアのAndroid OSが動作するデバイスを構築することが出来ます。これらの携帯電話においては、Googleのソフトウェアを含む必要や、そもそもGoogleと関係すること自体の必要がありません。

しかしながら、Googleによるユーザアプリケーションのライセンスを受けるグループもあるでしょう。これらを使うことで、開発者はGoogleのサービスに対して便利なアクセス手段を手にすることが出来ます。これらは通常、携帯電話に組み込まれて出荷されるベースシステムイメージに含まれるソフトウェア群となるはずです。[※1]

多くのデバイスでこれらのライブラリが含まれるようになるはずなので、これらのAPIに関する情報をここで述べますが、以下のAPIが全てのAndroidデバイスで利用可能とは限らないことに注意して下さい。Googleソフトウェアが存在しない場合、これらのライブラリやクラスは存在せず、それらのデバイス上でこれらのAPIを利用するアプリケーションを実行すると、インストール失敗や異常な動作をする可能性があります。

MapView

MapViewはサードパーティのコードからGoogle Mapの表示・操作を可能に刷るAndroid Viewです。これはGoogle Mapsアプリケーションにより提供されている、他のアクティビティから特定位置の地図表示を可能にするMapActivityと似た機能を提供します。以下の比較表で、それぞれのアプローチの違いを示します。

機能 MapActivity MapView
独自のレイアウト上に配置可能か? いいえ (地図表示設定のみ) はい
ユーザが操作出来るか? はい はい
コードで操作出来るか? (つまり、スクロール、ズーム等をアプリケーションコードから行えるかどうか) いいえ はい
独自コードからイベントを発生させられるか? いいえ はい

MapViewを利用する利点は、独自レイアウトと密に統合することが出来る点です。例えば、地図をカスタムコントロールの中に配置したり、デバイスの傾きセンサーにより地図のスクロールを行うといった、特殊なメカニズムを利用する際に有効です。欠点は、設定と利用において多くのコードを書く必要がある点です。単純にGoogle Mapを標準的なUI上に表示したい場合は、アクティビティを利用するのが簡単です。

XMPPを用いたP2Pサービス

アプリケーションがデバイス間で通信をするケースは多く存在します。例えば、メッセージを2つのデバイス間で送受信したり、チェッカーの対戦ゲームを作る場合、あるいは仲間にメッセージを送信するソーシャルアプリケーションを構築したい場合もあるでしょう。

このような場合に取りうる方法としては、単純に相手の携帯電話に対してSMSを送信するというものがあります。IntentReceiverにより着信SMSメッセージを取得して、その内容が当該アプリケーション向けのものであるか否かを調べた上で、他のアプリケーションや(もちろんユーザからも)直接見れないようにしてしまうことが可能です。この方法でもちろん動作するのですが、2つの大きな欠点があります。第一にSMSメッセージは相手側に届くまでに数分かかる場合があり、第二に送受信にユーザ負担のコストが発生することです。SMSメッセージパッシングを活用したオンラインゲームを構築すると、とても動作が遅くイライラし、またユーザにとってとても高いゲーム料金を強いるものになるでしょう。

代替手段としてGoogleではAPI that uses the XMPP protocol to pass messagesを提供しています。XMPPには携帯電話同士が互いにオンラインか否か、メッセージパッシングが可能か否かという情報の通知を行う機能が含まれています。また、SMSベースのメッセージパッシングに似た仕組みも提供しています。送信側ではサービス上のメソッドを呼び出すことによりメッセージを送信し、受信側ではIntentReceiverによりキャッチ出来るブロードキャストインテントによりメッセージが通知されます。しかしながらXMPPは永続的なソケット接続なので、レスポンス時間はSMSよりだいぶ早く、より良いユーザ体験を構成することが可能です。

現時点で、システムはサーバへの単一XMPP接続のみをサポートしており、標準XMPPインスタントメッセージも、ここで紹介したP2Pメッセージパッシングシステムも同一のコネクション上で配送されます。