0

Android Dropbox API を使用しています。私のアプリのメイン アクティビティでは、ドロップボックス API への認証呼び出しを行っています。問題は、アプリが起動するたびに、ユーザーが「許可」をクリックして、アプリがドロップボックスにアクセスする許可を与える必要があることです。私のコードは以下の通りです:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);



    //clearKeys();
    //Log.e(TAG, "keys cleared");

    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
    AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);




    mDBApi = new DropboxAPI<AndroidAuthSession>(session);

    mDBApi.getSession().startAuthentication(Main.this);
    Log.e(TAG, "started authentication");





protected void onResume() {
    super.onResume();



    if (mDBApi.getSession().authenticationSuccessful()) {
        try {
            // MANDATORY call to complete auth.
            // Sets the access token on the session
            mDBApi.getSession().finishAuthentication();

            if(mDBApi.getSession().authenticationSuccessful()){
            Log.e(TAG, "Authentication finished");
            }
            AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair();

            // Provide your own storeKeys to persist the access token pair
            // A typical way to store tokens is using SharedPreferences
            storeKeys(tokens.key, tokens.secret);
        } catch (IllegalStateException e) {
            Log.i("DbAuthLog", "Error authenticating", e);
        }
    }


}//end of onResume()

アプリが認証されていることを知る方法を見つける必要があるので、その場合は認証をバイパスできます。現時点ではどうすればよいかわかりません。誰でも手伝ってもらえますか?

4

2 に答える 2

4

認証の前に、保存されているアクセス トークンがまだ有効かどうかを確認します (もちろん、持っている場合)。これを行うには、OAuth を通じて公開されているメソッドのいずれかに承認済みのリクエストを送信するだけです。短く単純な出力が得られるメソッドを呼び出すことをお勧めします。無効または期限切れのトークンが原因でこの呼び出しが失敗した場合は、認証に進みます。この時点で、保存されているトークンを更新すると、残りは以前と同じように機能するはずです

于 2013-04-19T16:15:43.463 に答える
2

SDK を使用したことがありますか?

同期 API SDK: https://www.dropbox.com/developers/sync/tutorial/android

Dropbox への認証時:

これが完了すると、LogCat に「Dropbox ユーザーがリンクされました」という情報レベルのメッセージが表示されます。ユーザーがこれを行う必要があるのは 1 回だけです。その後、SDK はユーザー トークンをキャッシュに保存します。アプリが再起動したら、hasLinkedAccount を呼び出して、既にリンクされているかどうかを確認できます。

更新しました:

コア API SDK: https://www.dropbox.com/developers/core/setup#android

ここにある Java Doc を接続します: https://www.dropbox.com/static/developers/dropbox-android-sdk-1.5.3-docs/index.html

ユーザー認証後にアプリに戻る:

finishAuthentication() メソッドは、ユーザーのアクセス トークンをセッションにバインドします。mDBApi.getSession().getAccessTokenPair() を介してそれらを取得できるようになりました。

これらのトークンは、アプリを閉じた後に再び必要になるため、後でアクセスできるように保存しておくことが重要です。そうしないと、ユーザーはアプリから Dropbox にアクセスするたびに再認証する必要があります。

キーの保存を実装する一般的な方法は、Android の SharedPreferences API を使用することです。方法については、Android のドキュメントをご覧ください。それまでの間、簡単にするために、上記のコードは storeKeys 関数が、キーをより永続的な場所に保存するために使用したい任意のメソッドを呼び出すふりをしています。

編集:

storeKeys の実装:

public static boolean storeKeys(String key, String secret) {
   SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); // this refers to context
   SharedPreferences.Editor editor = settings.edit();
   editor.putString("key", key);
   editor.putString("secret", secret);
   return editor.commit();
}
于 2013-02-17T22:20:27.120 に答える