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

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

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

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/

著者プロフィール

菊間英行(きくまひでゆき)

(株)ミクシィ プラットフォームサービス開発部