2011/11/23

Dropbox SDK for Android を使ってみた (2) - 認証画面を表示する

Dropbox SDK for Android を使ってみた (1) - 前準備 で Dropbox SDK を使用する準備ができたら、 認証画面を表示して、Dropbox のフォルダにアクセス出来るようにしなければなりません。

以下は認証画面を表示する最もシンプルな方法です。
ただ、この方法は、Activity にアクセスする度に認証画面が表示されてしまうので、あまり実用的ではありません。

現実的には Access Token を保存しておき、すでに認証済みであれば認証画面を出さないという方法になると思いますが、そちらの方法は、Dropbox SDK for Android を使ってみた (3) - Access Tokenを保存するに書いたので、そちらを参照してください。

以下は、認証画面を出すプロセスをわかりやすくするために作ったサンプルです。
APP_KEY、 APP_SECRET、 ACCESS_TYPE を適切に書き換えてやれば動作します。

ちなみに、App Key の Status が "Development" だと、App Key を作成したアカウントのみでログイン可能なので気を付けてください。


DropboxTestActivity.java
package com.kokufu.test.dropboxtest;

import android.app.Activity;
import android.os.Bundle;

import com.dropbox.client2.DropboxAPI;
import com.dropbox.client2.android.AndroidAuthSession;
import com.dropbox.client2.session.AppKeyPair;
import com.dropbox.client2.session.Session.AccessType;

public class DropboxTestActivity extends Activity {
    final static private String APP_KEY = "INSERT_APP_KEY_HERE";  // 取得した App Key に入れ替えます
    final static private String APP_SECRET = "INSERT_SECRET_HERE";  // 取得した App Secret に入れ替えます
    final static private AccessType ACCESS_TYPE = AccessType.APP_FOLDER; // DROPBOX ならフルアクセス、APP_FOLDER は独自のフォルダを作成 (APP KEY を作成するときに選択したものでないとうまくいかない)

    DropboxAPI<AndroidAuthSession> mApi;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        AndroidAuthSession session = buildSession();
        mApi = new DropboxAPI<AndroidAuthSession>(session);

        // 以下を実行することで、AuthActivityが呼び出されます
        mApi.getSession().startAuthentication(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        AndroidAuthSession session = mApi.getSession();

        // session.startAuthentication() に対応して
        // session.finishAuthentication() を呼んでやる必要があります
        if (session.authenticationSuccessful()) {
            try {
                session.finishAuthentication();
            } catch (IllegalStateException e) {
                // TODO: エラー処理
            }
        }
    }

    private AndroidAuthSession buildSession() {
        AppKeyPair appKeyPair = new AppKeyPair(APP_KEY, APP_SECRET);
        AndroidAuthSession session;

        session = new AndroidAuthSession(appKeyPair, ACCESS_TYPE);

        return session;
    }
}


上記を実行すると、以下のような画面が出ます。

0 件のコメント: