如何在Android dropbox sdk 1.5.1中验证多个帐户?

如何在Android dropbox sdk 1.5.1中验证多个帐户?,android,dropbox,dropbox-api,Android,Dropbox,Dropbox Api,我需要验证多个帐户 我已经搜索了论坛,似乎这是可能的 所以我试了一下,但失败了 我曾尝试使用相同的API应用程序密钥和应用程序密钥,但失败了 我的两个会话都返回相同的访问令牌对 所以我尝试使用不同的API应用程序密钥和应用程序密钥,在同一个Dropbox帐户下,它也失败了 因此,我再次尝试从不同的Dropbox帐户使用不同的API应用程序密钥和应用程序密钥,但仍然失败 谁能给我一个解决方案?提前谢谢 下面是我的代码,主要来自dbroulete示例 onCreate(android) 其他代码 p

我需要验证多个帐户

我已经搜索了论坛,似乎这是可能的 所以我试了一下,但失败了

我曾尝试使用相同的API应用程序密钥和应用程序密钥,但失败了 我的两个会话都返回相同的访问令牌对

所以我尝试使用不同的API应用程序密钥和应用程序密钥,在同一个Dropbox帐户下,它也失败了

因此,我再次尝试从不同的Dropbox帐户使用不同的API应用程序密钥和应用程序密钥,但仍然失败

谁能给我一个解决方案?提前谢谢

下面是我的代码,主要来自dbroulete示例

onCreate(android)

其他代码

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应用程序

  • 为第二个dropbox应用程序的oAuth流创建另一个Android应用程序
  • 使用意图从app1触发app2中的oAuthflow
  • 同样,使用intent将令牌数据从app2发送回app1
  • 如果要使用此功能,请提供一些提示:

  • 使App2 oAuth活动的背景透明
  • 删除app1 app2转换的意图更改动画
  • 在App2活动的onCreate中触发oAuth
  • 选项2:如果您只使用一个Android应用程序继续这样做,我找到了一个可能的解决方法,如下所述。

  • 提示用户打开此url:
  • 他们必须复制Dropbox返回的授权码
  • 此授权码可用于获取第二个应用程序的访问令牌
  • 如果您打算在服务器端上下文中使用第二个应用程序,只需与服务器共享授权代码即可。您可以在python流中从授权代码中获取令牌,如下所示:

    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()