OpenSocialを始めよう(7) - アクティビティ応用プログラミング
アクティビティのサマリ
一日に何十件ものアクティビティを送信されると、ユーザとしては迷惑です。コンテナはそういった場合のために、アプリから送信されたアクティビティを無視したり、適当なサマリ(「白石さんはプロフィールを更新しました。他にも20件のイベントがありました」など)を表示したりすることができます。しかしアプリとしては、作成したアクティビティが人の目に触れないのは望ましいことではありません。
OpenSocial APIではこうした場合のために、サマリメッセージを自作することができる仕組みを用意しています。ただし、この機能はOrkutではまだ利用できず、ドキュメントにサンプルコードも記されていないため、以下に示すのはドキュメントをもとにしたイメージです。
アクティビティのサマリを利用するには、メッセージバンドル内に「メッセージID:キーとなる変数名」と言う名前でメッセージを作成します。メッセージ内ではその変数を参照しなくてはなりません。また、キーとなる変数以外には、擬似的に「Count」と言うプロパティが追加され、同じキーのアクティビティが何件あるかをメッセージに埋め込むことができます。例えば以下のようなものです。
<messagebundle>
<msg name="msg_hello:owner">
今日、${Friend.Count}人の友達から${Owner.DisplayName}さんに挨拶がありました!
</msg>
</messagebundle>
次に、アクティビティを作成します。
var owner = … var viewer = … params[opensocial.Activity.Field.TITLE_ID] = "msg_hello:owner"; params[opensocial.Activity.Field.TEMPLATE_PARAMS] = { Owner: owner, Friend: viewer }; // アクティビティを作成し、送信 …
通常であれば、このコードが呼ばれるごとにアクティビティが一件作成されるはずです。しかし、前述のような手順でサマリメッセージを利用するようにしておけば、このコードが何回呼ばれようとも、ユーザに表示されるメッセージは一件です(Countの件数だけが変化します)。
ユーザが一日に何度も行うと考えられる行動に対してアクティビティを作成するのであれば、こうしたサマリメッセージを利用するのは恐らく必須になるはずです。コンテナ側の対応が待ち遠しいですね。
アクティビティに関するまとめ
二回にわたってアクティビティに関して説明を行ってきました。とりあえず今回はここで解説を終えたいと思います。
最後にまとめとして、Orkut開発者ガイドに書かれていたアクティビティ利用の指針を引用・翻訳してご紹介したいと思います。Orkut固有の事情で挙げられているものもありますが、アクティビティの適切な利用はソーシャルアプリにとっても非常に重要なトピックですので、必ず読者の皆さんのお役に立つと思います。
MUST(従わなければならない)
- アクティビティは、ユーザの行動(アーティストを追加した、友達に贈り物をした、レビューを書いた、など)を反映していなければならない
- 使用される画像は、ユーザが作成したりブックマークしたり投稿したりした何かと関係がなければならない
- タイトルと本文に表示される情報は、重複することなく、異なったものでなくてはならない
SHOULD(従うべきである)
- アクティビティが追加されたことを、アプリケーション内で通知すべきである
- オーナが友達と対話するならば、その友達のプロフィール画像を表示すべきである
- 要約(サマリ)すべきである。複数のアクティビティよりも、ダイジェスト版のアクティビティを作成する方が望ましい。アプリケーションはアクティビティをプールしておき、キャンバスのwindow.unloadイベントで送信することができる。
MUST NOT(してはならない)
- アクティビティの所有者のプロフィール画像を表示するな。なぜなら、それはアクティビティに対して意味のある情報を追加しないからだ。
- アクティビティにアプリケーションのロゴを表示するな。アプリケーションはタイトルで既に特定されているし、すぐにfaviconが利用できるようになる予定だ。
- 一般的な情報だけのアクティビティを表示するな。そうしたアクティビティは基本的に広告と同じであり、許されない。
- アプリケーションを追加するページや、アプリの情報を表示するページへのリンクを含めるな。それはOrkutによって自動的に行われる。
- 太字や、12ptを超えるサイズのフォントを使用するな。
次回は、データの永続化について説明したいと思います。
TrackBack URL :
