Dropbox Android,身份验证过程随机:session.authenticationSuccessful()返回false

时间:2014-01-22 11:46:39

标签: android dropbox dropbox-api

我在验证过程中遇到问题。 我正在使用Android上的Dropbox开发应用程序,当我第一次使用该应用程序时,一切正常。 我可以将应用程序与我的Dropbox帐户相关联。我在共享首选项中保存密钥。一切都很好。

然而,我不得不再次同意我的意见,我想将我的帐户与我的申请联系起来(即使我已经这样做了)。我必须完成整个身份验证过程,并且我有Dropbox Web视图......

这种奇怪的行为一直在发生,当我对我的代码进行更改并将其重新加载到手机上时,我总是必须完成整个身份验证过程。 我不明白为什么“session.authenticationSuccessful()”在没有明显原因的情况下返回false而所有其他时间都返回true。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你在保存令牌吗?您应该在onResume()方法中包含以下行:

// save server session
        if (session.authenticationSuccessful()) {
            try {
                // Mandatory call to complete the auth
                session.finishAuthentication();
                if (!mIsLogged) setLogged(mDBApi.getSession().isLinked());

                // Store it locally in our app for later use
                String tokens = session.getOAuth2AccessToken();
                SharedPreferences prefs = getSharedPreferences("DROPBOX_PREFS", 0);
                Editor editor = prefs.edit();
                editor.putString(APP_KEY, tokens);
                editor.commit();
            } catch (IllegalStateException e) {
                Log.i("SERVICE", "Error authenticating", e);
            } catch (Exception e) {
                StringWriter errors = new StringWriter();
                e.printStackTrace(new PrintWriter(errors));
                Log.i("Exception", errors.toString());
            }

这样,在第一次进行身份验证后,会话令牌会被保存,以便您下次在代码中的某个位置执行此操作:

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

    SharedPreferences prefs = getSharedPreferences("DROPBOX_PREFS", 0);
    String token = prefs.getString(APP_KEY, null);

    if (token != null) {
        session = new AndroidAuthSession(appKeyPair, token);
        mDBApi = new DropboxAPI<AndroidAuthSession>(session);
        setLogged(mDBApi.getSession().isLinked());
    } else {
        session = new AndroidAuthSession(appKeyPair);
        mDBApi = new DropboxAPI<AndroidAuthSession>(session);
    }