在示例中,OutlookQuickStart for Android在登录()后的第一个请求中正常工作。
现在我想继续将我的应用程序连接到该用户并继续检查新电子邮件。
我该怎么办?重新使用访问令牌并构建检查新电子邮件的请求?
我是否必须保存访问令牌,刷新令牌?
如果Android中的令牌过期,我如何刷新令牌。
答案 0 :(得分:0)
根据https://github.com/AzureAD/azure-activedirectory-library-for-android的auth库文档,库会为您缓存令牌和刷新令牌。因此,每次需要时,只需使用acquireTokenSilentSync
即可获取令牌。如果当前令牌仍然有效,该函数将从缓存中返回当前令牌,如果它已过期,则会刷新它。
更新:我仔细研究了您正在使用的示例以及它使用的Outlook SDK。这里的关键是DependencyResolver
对象。您将该对象传递给OutlookClient
构造函数。然后,只要您使用OutlookClient
进行API调用,它就会调用您在创建getCredentials
时提供的DependencyResolver
覆盖。
因此,当样本代表时,您应该可以通过OutlookClient
进行多次调用,而无需进行任何更改。但是,一小时后,当访问令牌过期时,调用将开始失败。解决此问题的方法是将getCredentials
覆盖更改为始终调用acquireTokenSilentSync
。类似的东西:
@Override
public Credentials getCredentials() {
logger.debug("getCredentials in resolver called");
AuthenticationResult result = mAuthContext.acquireTokenSilentSync(
scopes,
getResources().getString(R.string.AADClientId),
UserIdentifier.getAnyUser());
logger.debug("AcquireTokenSilentSync SUCCESS");
logger.debug("Token expires: ", result.getExpiresOn());
logger.debug("Token: ", result.getAccessToken());
return new OAuthCredentials(result.getAccessToken());
}
警告:由于在我的开发机器上运行Android模拟器时出现问题,我无法运行此代码进行验证:(。