OpenSocialを利用してガジェットを作ろう!

第7回 アクティビティストリームの活用

この記事を読むのに必要な時間:およそ 2.5 分

アクティビティの追加をリクエストする

作成したアクティビティはアクティビティストリームに追加しなければ意味がありません。早速,アクティビティを追加してみましょう。

リスト3

opensocial.requestCreateActivity(act, opensocial.CreateActivityPriority.HIGH, callback);

第一引数はもちろん,先ほど作成したアクティビティ,第三引数は実行後のコールバック関数を指定します。第二引数はアクティビティ追加の優先度を表しているのですが,若干解説が必要です。

アクティビティは行動履歴を表すため,プライバシーと密接に関わってきます。ユーザーが意図しないアクティビティをガジェットが追加してしまうのは,ガジェット開発者にとっても好ましいものではありません。

opensocial.CreateActivityPriority.~意味
HIGH優先度が高い
LOW優先度が低い

そこで,この第二引数の優先度を使って,可能な場合は追加し,そうでない場合は追加しない,という選択を行うことができます。ガジェットごとにアクティビティの追加を許可するかどうかの設定と組み合わせて,以下のような判断が行われます。

 設定で許可している設定で許可していない
優先度が高いアクティビティを追加するダイアログで許可を求める
優先度が低いアクティビティを追加するアクティビティを追加しない

優先度が高いのに設定で許可されていないケースについては,ダイアログが表示され,ユーザーに許可を求めます。gooホームの場合,ここで許可すると設定自体が変更となります。

図2 アクティビティ追加の認証ダイアログ

図1 アクティビティ追加の認証ダイアログ

当たり前の話ですが,アクティビティが追加される対象はビューアーです。追加したアクティビティは,ガジェットを閲覧・操作している人のプロフィールおよび,その友達のアクティビティストリームに表示されることになります。

アクティビティを取得する

アクティビティは追加するだけでなく,取得することもできます。

リスト4

var idspec = opensocial.newIdSpec({
    opensocial.IdSpec.Field.USER_ID: opensocial.IdSpec.PersonId.VIEWER,
    opensocial.IdSpec.Field.GROUP_ID: opensocial.IdSpec.GroupId.SELF
});
var req = opensocial.newDataRequest();
req.add(req.newFetchActivitiesRequest(idspec), 'activity');
req.send(function(response) {
    var result = response.get('activity');
    if (!result.hadError()) {
        var activities = result.getData();
        activities.each(function(activity){
            var title = activity.getField(opensocial.Activity.Field.TITLE);
            var body = activity.getField(opensocial.Activity.Field.BODY);
            var media = activity.getField(opensocial.Activity.Field.MEDIA_ITEMS);
            if (media != undefined) {
                for (var i = 0; i < media.length; i++) {
                    var url = media[i].getField(opensocial.MediaItem.Field.URL);
                }
            }
        });
    }
});

大まかな方法は第3回第4回で解説したDataRequest,DataResponseの内容とほぼ同じですので割愛させていただきます。

最終的に得られるオブジェクトは作成したopensocial.CollectionにActivityが入った状態となるため,eachメソッドでイテレートしてActivityを取り出し,検証していきます。

また,各アクティビティは作成した場合と同じ構造になっているため,getFieldメソッドを使ってパラメータを取り出すことができます。メディアアイテムも同様です。

まとめ

アクティビティストリームはOpenSocialの真骨頂であり,これの活用次第であなたのソーシャルアプリケーションの広がりが決まるといっても過言ではありません。

ぜひ,アクティビティストリームを最大限に活用し,ソーシャルアプリケーションをたくさんの人に使ってもらえるベストプラクティスを見つけてください。

著者プロフィール

北村英志(きたむらえいじ)

NTTレゾナントでgooのソーシャル化にコンセプトから携わる。OpenSocial対応に当たっては, OpenSocialCommunityへの仕様提案だけでなく,Shindigへのコード提供も行っている。Google API Expert(OpenSocial)。SocialWeb Japan主催。

URLhttp://devlog.agektmr.com/