アクティビティの使用方法
それでは、OpenSocialアプリケーションからアクティビティを使用するための手順について考えていきましょう。なお、アクティビティの基本的な概念はOpenSocialで定義されていますが、他の機能と同様に、OpenSocialコンテナごとに実装が異なる部分もあります。アクティビティを使ったアプリケーションの実装に際しては、使用するコンテナでどの機能が利用可能かを確認してください。
アクティビティに含められる情報
OpenSocialアプリケーションにおいて、アクティビティはopensocial.Activityクラスとして定義されています。Activityオブジェクトはopensocial.Activity.Fieldクラスで定義された、以下のフィールドを持つことができます。
フィールド名 | 概要 |
BODY | アクティビティの本文 |
MEDIA_ITEMS | アクティビティに関連づけられた画像・動画など |
TITLE | アクティビティのタイトル |
URL | アクティビティに関連づけられたURL |
現在のところmixiアプリでは、アクティビティのタイトル(TITLE)と、3枚までの画像(MEDIA_ITEMS)をアクティビティとして登録することができます。OpenSocialコンテナによっては、他のフィールドも使用することができます。
先ほどのmixiポータルページでの表示例のように、TITLEフィールドはアクティビティの表示テキストとして用いられます。mixiアプリでは、アクティビティのリンク先はアプリのCanvasビューに固定されています。どのアクティビティから遷移したか、などの情報はURLに含まれないため、アプリでも取得することができないようです。
MEDIA_ITEMSフィールドは画像として表示されます。なお、画像については76×76ピクセルで表示されます。その他のサイズの画像を登録しても、76×76ピクセルで表示されますので、注意してください。MEDIA_ITEMSフィールドについては、アクティビティの作成の部分でさらに詳しく説明します。
![Activityオブジェクトの構造](http://cz-cdn.shoeisha.jp/static/images/article/4611/slide01.gif)
また、mixiアプリはアクティビティ機能について独自の拡張を行っており、上記のOpenSocial標準のフィールド以外に、mixi.ActivitiyField.RECIPIENTSというフィールドを使うことができます。これはアクティビティが関連するユーザーを指定するためのフィールドで、2名までのIDを登録することができます。これを指定したアクティビティは、RECIPIENTSとして指定されたユーザーの、「専用情報ボックス」の「自分への情報」タブに表示されます。
たくさんのマイミクがアクティビティを登録していくと、情報が氾濫して一つ一つのアクティビティが埋もれがちになりますが、この機能を使って特定の個人に向けたアクティビティを作ることで、アクティビティをメッセージ的に使用することができます。
アクティビティの使い方
OpenSocialアプリケーションからアクティビティを使用する際の流れを押さえておきましょう。
アクティビティを作成する(opensocial.newActivity関数)
アクティビティを公開するためには、まず最初にopensocial.newActivity関数でActivityオブジェクトを作成する必要があります。以下に画像を添付したアクティビティを作成するサンプルコードを示します。
var mediaParams = {}; //MediaItem作成用のパラメータ *1 mediaParams[opensocial.MediaItem.Field.TYPE] = opensocial.MediaItem.Type.IMAGE; *2 var mediaItem = opensocial.newMediaItem("image/jpg", "http://someserver/somefile.jpg", mediaParams); //画像URLを指定してMediaItemを作成 *3 var params = {}; params[opensocial.Activity.Field.TITLE] = "Hello!"; params[opensocial.Activity.Field.MEDIA_ITEMS] = [mediaItem]; *4 var activity = opensocial.newActivity(params); *5
MediaItemオブジェクトを使うためのパラメータが必要になるなど、少し複雑なコードですが、ポイントごとに見ていきましょう。
- 画像を扱うためのopensocial.MediaItemオブジェクトを作成するためのパラメータを作成します。
- メディアの種類(opensocial.MediaItem.Field.TYPE)を指定します。ここでは種類として画像形式(opensocial.MediaItem.Type.IMAGE)を指定しています。mixiアプリでは画像形式のみ指定可能です。
- opensocial.newMediaItem関数を使ってMediaItemオブジェクトを作成します。第1引数には登録するメディアのMIMEタイプを、第2引数には添付したい画像のURLを、第3引数には1.で作成したパラメータを指定します。ここではJPG形式のMediaItemオブジェクトを作成しています。
- アクティビティのMEDIA_ITEMSフィールドに3.で作成したMediaItemオブジェクトを設定します。
- opensocial.newActivity関数でActivityオブジェクトを作成します。
アクティビティを送信する(opensocial.requestCreateActivity関数)
次に、作成したアクティビティをOpenSocialコンテナに送信して、登録する必要があります。
opensocial.requestCreateActivity(activity,opensocial.CreateActivityPriority.HIGH,function(response) { if (response.hadError()) { alert(response.getErrorCode() + ":" + response.getErrorMessage()); } else { alert("Success!"); } });
まず、作成したアクティビティを、opensocial.requestCreateActivity関数でOpenSocialコンテナに送信します。第一引数には送信するActivityオブジェクトを、第二引数にはアクティビティ作成の優先度を表すopensocial.CreateActivityPriorityクラスのフィールドを指定します。opensocial.CreateActivityPriorityクラスのフィールドの意味は次のとおりです。
フィールド名 | 概要 |
HIGH | アプリケーションによるアクティビティの登録がまだ許可されていない場合でも、ユーザーに許可を求め、アクティビティを登録します。既に許可されている場合はそのまま登録します |
LOW | アプリケーションによるアクティビティの登録がまだ許可されていない場合、ユーザーに許可を求めることなく登録を中止します。既に許可されている場合はそのまま登録します |
ただし、mixiアプリではアクティビティの登録許可という概念がまだ実装されていないため、このフィールドは意味を持ちません。現状ではHIGHを指定して呼び出し、アクティビティの登録は常に成功します。
opensocial.requestCreateActivity関数の第3引数には、コールバック関数を指定します。ここではその場で匿名関数としてコールバック関数を定義しています。コールバック関数にはResponseItemオブジェクトが渡されるので、hadErrorメソッドでエラーが発生したかどうかを確認します。
以上の手順でアクティビティの登録は完了です。
アクティビティを取得する
登録したアクティビティは、OpenSocialコンテナがポータルページを表示する際などに自動的に読み込まれます。
それ以外に、OpenSocialアプリケーションからDataRequest.newFetchActivitiesRequestメソッドを使用して、明示的にアクティビティ一覧を取得するリクエストを作成することもできます。
以下に、アクティビティの一覧を取得するためのサンプルコードを示します。
var fparams = {}; fparams[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER; fparams[opensocial.IdSpec.Field.GROUP_ID] = opensocial.IdSpec.GroupId.SELF; var idSpec = opensocial.newIdSpec(fparams); *1 var req = opensocial.newDataRequest(); req.add(req.newFetchActivitiesRequest(idSpec), 'activity'); *2 req.send(function(response) { *3 var result = response.get('activity'); if (!result.hadError()) { var activities = result.getData(); activities.each(function(activity){ *4 var title = activity.getField(opensocial.Activity.Field.TITLE); *5 ・・・省略・・・
大きな流れは前回説明したDataRequestオブジェクトによるOpenSocialコンテナへのリクエストと同様です。
- 取得するアクティビティの範囲を指定するためのIdSpecオブジェクトを作成します。ここではVIEWERのSELF、つまりVIEWER自身に関するアクティビティを取得します。
- DataRequestオブジェクトを作成し、newFetchActivitiesRequestメソッドでリクエストを作成します。引数には1.で作成したIdSpecオブジェクトを指定します。
- リクエストを送信し、コールバック関数で取得したアクティビティ一覧を処理します。
- 取得したアクティビティ一覧はActivityオブジェクトのコレクションのため、eachメソッドを使って取り出します。
- ActivityオブジェクトのgetFieldメソッドを使って、TITLEフィールドを取得します。
これにより、作成したアクティビティ一覧をアプリケーションからも使用することができます。
ただ、残念なことに現状のmixiアプリはnewFetchActivitiesRequestメソッドによるアクティビティの取得に対応していません。今後のサポートに期待しましょう。