mixiエンジニアがおくるソーシャルアプリ開発実践講座

第2回mixi SDKでAndroidアプリを作ろう

はじめに

今回は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アプリの開発経験者であれば、すぐに使えるでしょう。次のような特徴があります。

  1. シングルサインオンができる
  2. Consumer Secretをアプリケーション内に埋め込まないのでセキュア
  3. 認可・トークンの期限切れなどを気にせずAPIの呼び出しだけに集中できる
  4. 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 APIPeople API
Payment APIGroups 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アプリ)
図1 パッケージ署名のハッシュ値を設定(mixiアプリ)
mixi Graph APIを利用したアプリ
サービス設定変更画面の中図2
図2 パッケージ署名のハッシュ値を設定(mixi Graph API)
図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の整備を進めていきます。それらを活用して楽しいアプリケーションや、便利なアプリケーションが数多く出てくることを期待しています。

mixiでは開発エンジニアを募集しています。

詳細はこちら
http://career.mixi.co.jp/

おすすめ記事

記事・ニュース一覧