Mik*_*koP 4 java android oauth dropbox dropbox-api
在Dropbox网站上的入门文章中,他们有一个教程如何使用Android API和Android入门.
当应用程序首次启动时,系统会要求用户对软件进行身份验证以使用用户Dropbox帐户.验证成功完成后,您将收到一对验证字符串,密钥和密码.
在用户验证应用程序以使用他或她的Dropbox帐户后,我使用Android的SharedPreferences保存密钥和secred.
如何使用这些保存的值?我不是指如何使用SharedPreferences检索它们,而是如何使用它们来防止再次重新验证应用程序的需要?在Dropbox网站上,他们没有提供使用这些的方法.他们所说的都是
finishAuthentication()方法将用户的访问令牌绑定到会话.您现在可以通过mDBApi.getSession().getAccessTokenPair()来检索它们.
您的应用关闭后,您将再次需要这些令牌,因此保存它们以供将来访问非常重要(尽管此处未显示).如果不这样做,则用户每次使用您的应用时都必须重新进行身份验证.实现存储密钥的常用方法是通过Android的SharedPreferences API.
我有同样的问题,文档不是很好所以我看到了几个相关的问题.解决这个问题的关键是方法isLinked()的AndroidAuthSession类.我分享我的代码所以它可以解决你的疑虑.
public class DropBoxInteractorImpl implements DropBoxInteractor {
private DropboxAPI<AndroidAuthSession> mDropBoxApi;
public DropBoxInteractorImpl(DropboxAPI<AndroidAuthSession> mDropBoxApi) {
this.mDropBoxApi = mDropBoxApi;
}
@Override
public void login(final Context context, final CloudServiceCallback cloudServiceCallback) {
String accessToken = PrefUtils.getFromPrefs(context, KeysPref.DROPBOX_ACCESS_TOKEN, null);
if (accessToken == null) {
mDropBoxApi.getSession().startOAuth2Authentication(context);
} else {
mDropBoxApi.getSession().setOAuth2AccessToken(accessToken);
}
}
@Override
public void confirmLogin(Context context, final CloudServiceCallback cloudServiceCallback) {
AndroidAuthSession session = mDropBoxApi.getSession();
if (session.authenticationSuccessful()) {
// Required to complete auth, sets the access token on the session
session.finishAuthentication();
String accessToken = mDropBoxApi.getSession().getOAuth2AccessToken();
PrefUtils.saveToPrefs(context, KeysPref.DROPBOX_ACCESS_TOKEN, accessToken);
}
if (session.isLinked()) {
cloudServiceCallback.loginSuccessful();
} else {
cloudServiceCallback.loginError();
Timber.e("There was a problem login in!!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我会一步一步解释.
首先,我使用Dagger作为依赖注入,这就是我在构造函数中获取mDropBoxApi的原因,但如果不是,只需创建会话,就像我在此方法中所做的一样.
@Provides
@Singleton
public DropboxAPI<AndroidAuthSession> providesDropBoxService() {
AppKeyPair appKeyPair = new AppKeyPair(Keys.DROPBOX_APP, Keys.DROPBOX_APP_SECRET);
AndroidAuthSession session = new AndroidAuthSession(appKeyPair);
return new DropboxAPI<AndroidAuthSession>(session);
}
Run Code Online (Sandbox Code Playgroud)现在你有了DropboxAPI对象,你需要设置OAoe2AccessToken` startOAuth2Authentication' or以防你已经拥有它(从最后一个会话中保存).你可以在onCreate(如果是活动)或onActivityCreated(如果它是片段)中执行此操作.
@Override
public void login(final Context context) {
String accessToken = PrefUtils.getFromPrefs(context, KeysPref.DROPBOX_ACCESS_TOKEN, null);
if (accessToken == null) {
mDropBoxApi.getSession().startOAuth2Authentication(context);
} else {
mDropBoxApi.getSession().setOAuth2AccessToken(accessToken);
}
}
Run Code Online (Sandbox Code Playgroud)在那之后,在你的onResume方法(这里我们将解决我们的问题)你检查登录是否成功调用该函数session.authenticationSuccessful().只有在您执行身份验证过程时,才会返回true.如果它不为空,则登录失败或您的帐户已经链接.就是这样,LINKED.你怎么检查?正如我之前所说,这是解决这个问题的关键.你需要检查的是会话是否已经链接调用session.isLinked()和voilà.它会告诉您是否已成功链接到dropbox api,或者如果它是错误的,则该过程中存在问题.
@Override
public void confirmLogin(Context context, final CloudServiceCallback callback) {
AndroidAuthSession session = mDropBoxApi.getSession();
if (session.authenticationSuccessful()) {
// Required to complete auth, sets the access token on the session
session.finishAuthentication();
String accessToken = mDropBoxApi.getSession().getOAuth2AccessToken();
PrefUtils.saveToPrefs(context, KeysPref.DROPBOX_ACCESS_TOKEN, accessToken);
}
if (session.isLinked()) {
callback.loginSuccessful();
} else {
callback.loginError();
Timber.e("There was a problem login in!!");
}
}
Run Code Online (Sandbox Code Playgroud)我希望这能解决你的疑问,如果你有任何疑问,请不要犹豫.
| 归档时间: |
|
| 查看次数: |
3645 次 |
| 最近记录: |