はじめに
今回はmixi API SDK for Androidを取り上げます。実はmixi API SDK for Androidは、iOS向けのSDKよりも早い5月12日にリリースされています。同じスマートフォンアプリの開発向けSDKとして、この2つは双子と考えていただければよいでしょう。
Androidスマートフォンの機種は、日に日に多くなっています。ユーザはスマートフォンを手にしながら、
写真を撮影し、
その情景を言葉で残し、
今いるその場所を記録し、
それを友人や知人とシェアしたい
と常に考えています。便利で有益な機能を持つAndroidと仲の良い友人とつながっているmixi、この2つを組み合わせたユーザ同士のコミュニケーションをより活発にするアプリケーションをmixi API SDK for Androidなら開発できます。
mixi API SDK for Androidとは
mixi API SDK for Android(以下、mixi SDK(Android)と表記)とは、Androidでmixi APIを利用するためのSDKです。APIを手軽に利用できるように工夫されていますので、Androidアプリの開発経験者であれば、すぐに使えるでしょう。次のような特徴があります。
シングルサインオンができる
Consumer Secretをアプリケーション内に埋め込まないのでセキュア
認可・トークンの期限切れなどを気にせずAPIの呼び出しだけに集中できる
mixiアプリの開発も、mixi Graph APIを使うアプリケーションの開発も、同じmixi SDK(Android)を利用できる
mixiアプリでmixi Graph APIが利用可能に
今までは「mixiアプリ」と「mixi Graph APIを使ったアプリケーション」は明確に異なる扱いであり、使えるAPIも違っていました。しかし、現在、( 株)ミクシィではmixiアプリからmixi Graph APIを利用可能にするプロジェクトが進行中です。その第一弾として、10月31日からmixiアプリAndroid版/iOS版でmixi Graph APIが利用できるようになりました。11月7日現在、利用可能なAPIは表1のとおりです。
表1 mixiアプリAndroid版/iOS版で利用可能なAPI
mixiアプリ独自 mixi Graph APIと共通
Request API People API
Payment API Groups API
People lookup API
Updates API
Voice API
Check API
Photo API
Message API
Diary API
Check-in API
Profile Image API
mixi API SDK for Androidの準備をする
mixi SDK(Android)から各種APIを使うためには、事前にいくつかの手順を踏む必要があります。これについては前回も触れているため、iOS版とAndroid版で違う部分のみ説明します。
パッケージ署名のハッシュ値を設定する
まずPartner Dashboard上[1] で「パッケージ署名のハッシュ値」という項目を設定します。パッケージ署名のハッシュ値とはAndroidマーケットに公開する際にapkファイルに署名する署名ファイルのハッシュ値です。mixiアプリとmixi Graph APIで設定する個所が異なります。
mixiアプリ
mixiアプリの設定画面で、アプリ対応範囲にAndroid版をチェックした場合に表示される「スマートフォン(Androidアプリ版)に関する設定」の部分(図1 )
図1 パッケージ署名のハッシュ値を設定(mixiアプリ)
mixi Graph APIを利用したアプリ
サービス設定変更画面の中(図2 )
図2 パッケージ署名のハッシュ値を設定(mixi Graph API)
パッケージ署名のハッシュ値の取得方法はmixi Developer CenterのSDKの解説 を参照してください。
プロジェクトを作成する
さていよいよプロジェクトの作成です。Eclipseを使ってアプリケーションを作成する手順を説明します。EclipseとAndroid SDKはセットアップされていることを前提とします。
まずはダウンロードサイト からmixi SDK(Android)のZIPファイルをダウンロードし、展開してください。その後、展開したディレクトリをEclipseのワークスペースのディレクトリ上に配置し、そのディレクトリをEclipseのメニュー[File] -[ Import]でプロジェクトとしてimportしてください。
続いて、先ほど登録したmixi SDK(Android)ライブラリを開発するプロジェクトに登録します。プロジェクトのプロパティを開き、[ Android] -[ Library]の欄に追加してください。
また、mixi SDK(Android)はインターネットに接続するため、開発するアプリケーションのAndroidManifest.xmlファイルに次のようなインターネット接続許可の定義(INTERNETパーミッション)を追記してください。
<uses-permission android:name="android. ュpermission.INTERNET" />
これでプロジェクトの準備はできました。mixi Webサイトでもプロジェクトの作成手順を紹介しています 。必要に応じて参照してください。
mixi API SDK for Androidを利用する
API利用の認証・認可を得る
ここからは実際のコーディングになります。
mixi SDK(Android)において中心的な役割を担うインターフェースは、MixiContainerです。このインターフェースで規定された処理を通じて、ログイン処理やAPIなどmixi Platformが提供する機能を呼び出すことが可能です。
mixi SDK(Android)を使う際に必要なものは、Client IDのみです。このClient IDを持つConfigオブジェクトを生成し、MixiContainerFactoryクラスを使ってMixiContainerオブジェクトを生成します(リスト1 ) 。
リスト1 MixiContainerで認証・認可処理を行う
private MixiContainer mContainer; //
(中略)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Config config = new Config();
config.clientId = CLIENT_ID; //
config.selector = Config.GRAPH_API; //
mContainer = MixiContainerFactory.getContainer(config); //
mContainer.init(this); //
Button loginButton = (Button) findViewById(R.id.login);
// ログインボタン押下時の動作を定義
loginButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(!mContainer.isAuthorized()){ //
mContainer.authorize(ExampleMainActivity.this, SCOPES,
LOGIN_REQUEST_CODE, new CallbackListener() {(中略)}); //
} else {
Toast.makeText(ExampleMainActivity.this,
"ログイン済みです。", Toast.LENGTH_LONG).show();
}
}
});
(中略)
}
(中略)
protected void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mContainer.authorizeCallback(requestCode, resultCode, data); //
}
protected void onDestroy() {
mContainer.close(this); //
super.onDestroy();
}
mixi APIを使う前に、ユーザにログインとAPI利用の許可を得なければなりません。これを認証・認可と呼びます。認証・認可処理はMixiContainer#authorizeを呼び出して行います。
① APIのリクエストを実行するためのMixiContainerを定義します。
② clientIdを設定します。これはmixiアプリを作る場合はmixiapp_アプリID、mixi Graph APIアプリを作る場合は、PartnerDashboard上で発行されたConsumer Keyを指定します。
③ selectorにはmixiアプリを作る場合は「APPLICATION」 、mixi Graph APIアプリの場合は「GRAPH_API」を設定します。
④ MixiContainerFactoryでMixiContainerのインスタンスを取得します。
⑤ MixiContainerを初期化します。
⑥ すでに認証・認可済みかを判定します。認可情報はmixi SDK(Android)がアプリケーションのSharedPreferences内に保存するため、毎回認証・認可をする必要はありません。
⑦ mixiへの認証・認可処理を行います。mixi公式アプリを通じてmixiからOAuthのトークンが発行されます。SCOPESはアプリで必要なスコープの文字列を配列として指定してください。LOGIN_REQUEST_CODEは、Activity#onActivityResultのrequestCodeに相当します。作成するActivity内で重複しないように設定してください。
⑧ MixiContainer#authorizeCallbackで認証・認可処理の結果を受け取ります。
⑨ MixiContainerの終了処理です。onDestroyなどで適切に呼び出してください。
APIを呼び出す
認可処理が終われば、いよいよmixiのAPIを呼び出すことができます。呼び出し方は簡単です。自分のユーザ情報を取得する呼び出し部分はリスト2 のようになります。
リスト2 自分のユーザ情報を取得する
mContainer.send("/people/@me/@self", new CallbackListener() {(中略)});
このほかにもphoto APIを利用して写真を投稿するといったことができます。すべては紹介しきれないので、興味のある方はmixi Developer Centerのサイト も参照してみてください。
APIの実行結果を処理する
さて、APIを呼び出しただけではアプリケーションは成立しません。返ってきた結果を処理する必要があります。しかし、MixiContainer#sendメソッドは非同期に実行されるため、結果を戻り値として取得できません。ですので、MixiContainer#sendメソッドの引数としてコールバックリスナを指定します。
API呼び出しが成功した場合、MixiContainer#sendはCallbackListener#onCompleteを実行します。たとえば、リスト2の自分のユーザ情報を取得した結果からニックネームを取り出す場合はリスト3 のようになります。
リスト3 APIで取得したユーザ情報からニックネームを取り出す
public void onComplete(Bundle values) {
try {
String response = values.getString("response");
JSONObject obj = new JSONObject(response);
String displayName = obj.getJSONObject("entry").getString("displayName");
Toast.makeText(ExampleMainActivity.this,
displayName + "さん ようこそ", Toast.LENGTH_LONG).show();
} catch (JSONException e) {
// エラー処理
}
}
}
各APIで取得できる内容は、APIのドキュメント を参照してください。
まとめ
これで前回から続いてきたmixi API SDKを使ったアプリケーション開発の紹介を終わります。( 株)ミクシィでは、これからもmixiの機能を外部から利用できるようAPIの整備を進めていきます。それらを活用して楽しいアプリケーションや、便利なアプリケーションが数多く出てくることを期待しています。