如何在Android dropbox sdk 1.5.1中验证多个帐户?
我需要验证多个帐户 我已经搜索了论坛,似乎这是可能的 所以我试了一下,但失败了 我曾尝试使用相同的API应用程序密钥和应用程序密钥,但失败了 我的两个会话都返回相同的访问令牌对 所以我尝试使用不同的API应用程序密钥和应用程序密钥,在同一个Dropbox帐户下,它也失败了 因此,我再次尝试从不同的Dropbox帐户使用不同的API应用程序密钥和应用程序密钥,但仍然失败 谁能给我一个解决方案?提前谢谢 下面是我的代码,主要来自dbroulete示例 onCreate(android) 其他代码如何在Android dropbox sdk 1.5.1中验证多个帐户?,android,dropbox,dropbox-api,Android,Dropbox,Dropbox Api,我需要验证多个帐户 我已经搜索了论坛,似乎这是可能的 所以我试了一下,但失败了 我曾尝试使用相同的API应用程序密钥和应用程序密钥,但失败了 我的两个会话都返回相同的访问令牌对 所以我尝试使用不同的API应用程序密钥和应用程序密钥,在同一个Dropbox帐户下,它也失败了 因此,我再次尝试从不同的Dropbox帐户使用不同的API应用程序密钥和应用程序密钥,但仍然失败 谁能给我一个解决方案?提前谢谢 下面是我的代码,主要来自dbroulete示例 onCreate(android) 其他代码 p
private AndroidAuthSession buildSession() {
AppKeyPair appKeyPair = new AppKeyPair(Constants.APP_KEY, Constants.APP_SECRET);
AndroidAuthSession session;
String[] stored = getKeys();
if (stored != null) {
AccessTokenPair accessToken = new AccessTokenPair(stored[0], stored[1]);
session = new AndroidAuthSession(appKeyPair, Constants.ACCESS_TYPE, accessToken);
} else {
session = new AndroidAuthSession(appKeyPair, Constants.ACCESS_TYPE);
}
return session;
}
private AndroidAuthSession buildSession2() {
AppKeyPair appKeyPair = new AppKeyPair(Constants.APP_KEY2, Constants.APP_SECRET2);
AndroidAuthSession session;
String[] stored = getKeys2();
if (stored != null) {
AccessTokenPair accessToken = new AccessTokenPair(stored[0], stored[1]);
session = new AndroidAuthSession(appKeyPair, Constants.ACCESS_TYPE, accessToken);
} else {
session = new AndroidAuthSession(appKeyPair, Constants.ACCESS_TYPE);
}
return session;
}
private String[] getKeys() {
SharedPreferences prefs = getSharedPreferences(Constants.ACCOUNT_PREFS_NAME, 0);
String key = prefs.getString(Constants.ACCESS_KEY_NAME, null);
String secret = prefs.getString(Constants.ACCESS_SECRET_NAME, null);
if (key != null && secret != null) {
String[] ret = new String[2];
ret[0] = key;
ret[1] = secret;
return ret;
} else {
return null;
}
}
private String[] getKeys2() {
SharedPreferences prefs = getSharedPreferences(Constants.ACCOUNT_PREFS_NAME, 0);
String key = prefs.getString(Constants.ACCESS_KEY_NAME2, null);
String secret = prefs.getString(Constants.ACCESS_SECRET_NAME2, null);
if (key != null && secret != null) {
String[] ret = new String[2];
ret[0] = key;
ret[1] = secret;
return ret;
} else {
return null;
}
}
我注意到我可能需要在“添加另一个”中的清单中添加一些内容
但我不能用不同的应用程序密钥在android清单中添加第二个活动,因为它会导致重复的错误
我怎么做
<activity
android:name="com.dropbox.client2.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask" >
<intent-filter>
<data android:scheme="db-XXXXXXXXXXXX" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我不确定这是否会对您的用例有所帮助,但也许可以通过编写自己的身份验证程序,使用Android内置帐户管理来分离身份验证过程。
下面是一个例子:我遇到了一个类似的需求,这就是我的工作方式 第一个应用程序
使用普通dropbox流访问第一个应用程序 注意: 2个dropbox应用程序需求的一种可能情况是使用不同的dropbox应用程序从服务器访问用户帐户。请注意,如果您在服务器上使用相同的dropbox应用程序,您可以与服务器共享来自第1个应用程序的访问令牌,并安全地重用这些凭据。如果你不能忍受,继续阅读 第二个应用程序
选项1:使用另一个Android应用程序
flow = client.DropboxOAuth2FlowNoRedirect(app2_key, app2_secret)
authorize_url = flow.start()
access_token, user_id = flow.finish(auth_code_from_client)
对于从授权密钥获取访问令牌的更通用的方法,Dropbox API存在一些问题,或者您可以说需要使用一个技巧来进行多次登录 1。将sAuthenticatedUid声明为字符串[]
private static final String[]sAuthenticatedUid={“dummy”};//仅保留一个身份验证Id以保留最后一个经过身份验证的项目
2。使用不同的方法启动OAuth
使用session.startOAuth2Authentication(act,“,sauthenticatedud)
进行身份验证,而不是startOAuth2Authentication()
3。在验证成功时维护变量
sAuthenticatedUid[0] = sessionApi.getSession().finishAuthentication(); // Save the last successful UID
String oauth2AccessToken = sessionApi.getSession().getOAuth2AccessToken();
AuthActivity.result = null; // Reset this so that we can login again, call only after finishAuthentication()
AuthActivity是com.dropbox.client2.android.AuthActivity,它存储上次身份验证的结果,并且可能会产生问题,因为这是一个静态变量
您现在应该可以进行任意数量的登录。仍在寻求帮助您成功了吗?
flow = client.DropboxOAuth2FlowNoRedirect(app2_key, app2_secret)
authorize_url = flow.start()
access_token, user_id = flow.finish(auth_code_from_client)
sAuthenticatedUid[0] = sessionApi.getSession().finishAuthentication(); // Save the last successful UID
String oauth2AccessToken = sessionApi.getSession().getOAuth2AccessToken();
AuthActivity.result = null; // Reset this so that we can login again, call only after finishAuthentication()