有限会社アドリブのBlogです。 サービスや覚書などを掲載していきます。

2011年11月4日金曜日

Web Intent の使い方メモ

EXP-Hackathonに参加してきました。

そこで@a2cさんたちのチームでGitkitとWebIntentを使ったサービスを作成したのですが
私はweb intent側を担当しました。
前から触ってみたかったのですが、どうしても?なところがあったので、いいチャンスだと
思い、Googlerの方にいろいろ聞いてなんとか理解できた(気がする)のでメモしておきます。

*Web Intentとは?
http://webintents.org/ を見てください。
.....これでわかる人はこれ以上読まなくてOKですw
あるいは
Web Intent: GoogleによるWebアプリ連携メカニズムも参考になります。

上記を読んだのですが、androidにおけるintentみたいなものだと思っていたのでどうしても
わからない点がありました。それは、あるintentを発行した際にどのサービスがその処理を
行うことができるかの関連づけを、どこのだれがやるかということです。

androidの場合であれば、アプリのマニフェストファイルにインテントフィルタを記述すると
OSにそのフィルタが登録され、ほかのアプリケーションのintentによってそのアプリが一覧から出てきます。
例えばAというアプリのマニフェストファイルに
<action android:name="android.intent.action.SEND" />
とあれば、他のアプリ(例えばB)からは
 Intent intent = new Intent();
 intent.setAction(Intent.ACTION_SEND);
 startActivity(intent);
のようにするとA(と同じフィルタを持つアプリ)が表示されます。
ここで重要なのは、Aがどんな種類のインテントに反応するかを「自ら」OSに登録し、
BはAの存在を知らない(暗黙的なので)という点です。

さてWeb Intentですが、前記の記事を読むとわかると思いますが、A,Bそれぞれに関する記述はあります。
しかし肝心のBがある処理を選ぶ際にリストされる要素のバインディング(?)がどのように
行われるかが具体的に記述されていないのです(読解力ないです)。
いいかえると
「どうやってBはAの存在を知ってるわけ?」
ということです。

いろいろいろいろ考えたのですが結局わかりませんでした。で、今回のEXP-Hackthonで謎が解けたと。

答えは簡単で
「Bの中にAやA’の情報が記述されていた」
です。なんだってーーー!?

はじめはwebintents.orgにAの情報を登録するのかなと思いました。なぜなら
http://webintents.org/#api
を見ると、
Intent Registration
があるので、てっきりどこか「別の」所に登録するのかと思ったわけですよ。

実はどこかに登録するわけではなく、Bのソース内にA(やA’)の情報を記述する必要があり
webintents.orgに「これこれを処理できますよ」情報があつまってるわけでも何でもないと
いうわけです。

なのでBはAの存在を知らないと作れないというわけでした。ちゃんちゃん。

備考1)
http://examples.webintents.org/intents/pick/index.html
のソースをよーく読むとわかります。不親切ですみません。

備考2)
BはAの存在を知らないと作れないと書きましたが、どこかの誰かがサービスディレクトリのようなものを
作って、必要なIntentリストを返すようにし、動的にインクルードできるようにすれば、androidの
暗黙的intentのように使えると思います。
それとgitkitを組み合わせるようにすれば、認証あり/なしで使えるものリストを変更できるように
すれば課金とかのビジネス化もできるかもです。

0 コメント:

コメントを投稿