gpt4 book ai didi

Android Dropbox API - 身份验证成功后无法保存用户 token

转载 作者:搜寻专家 更新时间:2023-11-01 08:49:02 25 4
gpt4 key购买 nike

我正在尝试将我的 Android 4+ 连接到 Dropbox。我正在使用 Dropbox 提供的最新版本的核心 API。

一切正常,直到我尝试在用户使用 dropboxAPI.getSession().startOAuth2Authentication(activity) 验证访问权限后返回到我的应用程序时保存用户 key 和 token 。

当用户在身份验证后返回到我的应用程序时,以下代码应保存 key 和 token :

public boolean completeLogInAfterAuthentication() {
AndroidAuthSession session = dropboxAPI.getSession();
if (session.authenticationSuccessful()) {
try {
// Mandatory call to complete the auth
session.finishAuthentication();

// Store it locally in our app for later use
TokenPair tokens = session.getAccessTokenPair();
saveSessionKeys(tokens.key, tokens.secret);
return true;
} catch (IllegalStateExceptione) {
Log.d("MyLog", "Couldn't authenticate with Dropbox:" + e.getLocalizedMessage());
Log.d("MyLog", "Error authenticating", e);
}
}
return false;
}

这正是 Dropbox 提供的 DBRoulett 演示中使用的代码。 问题是,session.getAccessTokenPair() 返回 null

因此,我无法存储任何 key 或 token ,并且每次启动应用程序时用户都必须重新登录。我该如何解决这个问题?

我找到的所有信息只是说,getAccessTokenPair() 可能会因 IllegalStateException 而失败,但这里不是这种情况。返回 null 的情况没有任何地方描述。知道我能做什么吗?

最佳答案

getAccessTokenPair 用于获取 OAuth 1 访问 token (和 secret )。但是您使用的是 OAuth 2,所以您需要 getOAuth2AccessToken。来自教程 ( https://www.dropbox.com/developers/core/start/android ):

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

if (mDBApi.getSession().authenticationSuccessful()) {
try {
// Required to complete auth, sets the access token on the session
mDBApi.getSession().finishAuthentication();

String accessToken = mDBApi.getSession().getOAuth2AccessToken();
} catch (IllegalStateException e) {
Log.i("DbAuthLog", "Error authenticating", e);
}
}
}

这与 DBRoulette 示例中的大致相同,尽管它同时具有 OAuth 1 和 OAuth 2 的代码:

private void storeAuth(AndroidAuthSession session) {
// Store the OAuth 2 access token, if there is one.
String oauth2AccessToken = session.getOAuth2AccessToken();
if (oauth2AccessToken != null) {
SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0);
Editor edit = prefs.edit();
edit.putString(ACCESS_KEY_NAME, "oauth2:");
edit.putString(ACCESS_SECRET_NAME, oauth2AccessToken);
edit.commit();
return;
}
// Store the OAuth 1 access token, if there is one. This is only necessary if
// you're still using OAuth 1.
AccessTokenPair oauth1AccessToken = session.getAccessTokenPair();
if (oauth1AccessToken != null) {
SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0);
Editor edit = prefs.edit();
edit.putString(ACCESS_KEY_NAME, oauth1AccessToken.key);
edit.putString(ACCESS_SECRET_NAME, oauth1AccessToken.secret);
edit.commit();
return;
}
}

关于Android Dropbox API - 身份验证成功后无法保存用户 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25447633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com