Dropbox SDKを使ってみよう(2.アカウント設定(認証))


DropBox SDKを使ってみよう(1.環境構築/アプリケーションの登録)ではアプリでDropbox連携をするための前準備であるアプリケーションの登録とSDKをアプリケーションに関連付ける方法を紹介しました。

第二弾である今回はDropboxに接続するための認証情報を取得する方法を紹介します。

詳細は以下から。

Dropbox SDKにおける認証情報

Dropboxではアプリケーションとユーザーを紐付けるために以下の認証情報が必要になります。

[table “179” not found /]

このうち、App keyとApp secretについてはアプリケーションを登録すると、My Apps画面から確認できるようになります。

token keyとtoken secretはユーザーからのアプリケーションの認証が必要であり、この二つの認証情報を保持することで、アプリからDropboxのフォルダにアクセスすることが可能になります。

この記事ではtoken keyとtoken secretの取得について記述していきます。

ユーザー認証を実装するには以下の手順で認証処理を実装する必要があります。

  1. AndroidManifestに認証用Activityを追加する
  2. 認証用ブラウザ起動処理を実装する
  3. 認証用ブラウザからのコールバック先Activityを用意する

AndroidManifestに認証用Activityを追加する

Dropbox SDKでユーザー認証を行うためにDropbox SDKが用意している独自ActivityをAndroidManifestに追加する必要があります。

以下は独自ActivityのAndroidManifestへの定義になります。

AndroidManifest.xml

<activity
    android:name="com.dropbox.client2.android.AuthActivity"
    android:configChanges="orientation|keyboard"
    android:launchMode="singleTask" >
    <intent-filter>

        <data android:scheme="db-ここにApp keyを入力" />

        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</activity>

ここで注意すべき点は7行目のschemeタグにて連携したいアプリのApp keyを入力しなければない点です。

また、この定義の他にandroid.permission.INTERNETのパーミッションも追加する必要があります。

認証用ブラウザ起動処理を実装する

Dropbox SDKでのユーザー認証はブラウザにて行われます。

この認証用のブラウザを起動するためのコードは以下になります。

DropBoxAuthActivity.java

// アプリケーションのApp Key
final static private String APP_KEY = "App keyを入力";
// アプリケーションのApp Secret
final static private String APP_SECRET = "App secretを入力";
// アプリケーションのアクセスタイプ
final static private AccessType ACCESS_TYPE = AccessType.APP_FOLDER;

// DropboxAPIインスタンス
private DropboxAPI<AndroidAuthSession> mDBApi;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.auth_activity_layout);
        
    // 認証処理
    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
    AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);
    mDBApi = new DropboxAPI<AndroidAuthSession>(session);
    mDBApi.getSession().startAuthentication(DropBoxAuthActivity.this);
}

認証処理は9行目で定義しているDropboxAPIクラスに様々な値を設定して行います。

17行目ではアプリケーションの認証情報を管理するためのAppKeyPairクラスのインスタンスを作成しています。
AppKeyPairクラスのコンストラクタでApp keyとApp secretをそれぞれ指定することで認証可能なAppKeyPairクラスのインスタンスを作成することができます。

18行目では認証情報をサーバーとやりとりするためのAndroidAuthSessionクラスのインスタンスを作成しています。
AndroidAuthSessionクラスのコンストラクタで、17行目で作成したAppKeyPairクラスのインスタンスとアクセスタイプを引数に指定することで、認証可能なAndroidAuthSessionクラスのインスタンスを作成することができます。
ここでいうアクセスタイプはアプリケーションを登録したときに指定したアプリの実効権限です。
これも、App keyなどと同様にMy App画面で確認することができます。

各アクセスタイプには以下の定数が用意されています。

[table “180” not found /]

20行目ではstartAuthenticationメソッドを使用して認証用のブラウザを起動しています。
このメソッドの引数にはコールバック用のActivityのクラスを指定します。

認証用ブラウザからのコールバック先Activityを用意する

認証用ブラウザからコールバックされたActivityではサーバーから返却されるtoken keyとtoken secretを取得してSharedPreferencesに保存する処理などを実装します。

DropBoxAuthActivity.java

@Override
protected void onResume() {
    super.onResume();
        
    if (mDBApi.getSession().authenticationSuccessful()) {
        try {
            // 認証処理の終了
            mDBApi.getSession().finishAuthentication();
              
            // AccessTokenPair(認証情報)の取得
            AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair();

            // 認証情報をSharedPreferencesに保存
            SharedPreferences sp = getSharedPreferences("drop_box_auth", MODE_PRIVATE);
            Editor edit = sp.edit();
            edit.putString("access_tokem", tokens.key);
            edit.putString("access_token_secret", tokens.secret);
            edit.commit();
                
            // 認証情報を表示
            TextView accessTokenTv = (TextView) findViewById(R.id.access_token);
            TextView accessTokenSecretTv = (TextView) findViewById(R.id.access_token_secret);
            accessTokenTv.setText(tokens.key);
            accessTokenSecretTv.setText(tokens.secret);
        } catch (IllegalStateException e) {
            Log.i("DbAuthLog", "Error authenticating", e);
        }
    }
}

5行目ではauthenticationSuccessfulメソッドを使用して認証が成功したかをチェックしています。

8行目ではfinishAuthenticationメソッドを使用して認証情報を取得しています。

11行目ではgetAccessTokenPairメソッドを使用して、token keyとtoken secretが格納されたAccessTokenPairクラスのインスタンスを生成しています。
ここで生成したAccessTokenPairクラスのインスタンスに含まれている、AccessTokenPair#keyフィールドにはtoken keyが、AccessTokenPair#secretフィールドにtoken secretがそれぞれ保存されています。

次回予告
次回はこの記事で取得したtoken keyとtoken secretを使用して、実際にDropbox上のデータを操作する方法を紹介します。

関連する記事:

No Comments