0

我正在使用 Android Dropbox API。在我的应用程序的主要活动中,我正在对 Dropbox 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 用户已链接”。用户只需执行一次,之后 SDK 会将用户令牌存储在缓存中。当您的应用重新启动时,您可以通过调用 hasLinkedAccount 来检查它是否已经链接。

更新:

核心 API SDK:https ://www.dropbox.com/developers/core/setup#android

连接此处找到的 Java 文档: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 回答