2016-10-07 8 views
0

AndroidのOutlookQuickStartの例では、logon()の後の最初のリクエストで正常に動作します。
今、私は自分のアプリをそのユーザーに接続し続け、新しい電子メールをチェックし続けたいと思っています。
アクセストークンを使用して新しい電子メールを確認するリクエストを作成するにはどうすればよいですか?
アクセストークン、リフレッシュトークンを保存する必要がありますか?
Androidのトークンが期限切れの場合、どのように更新できますか?今後のリクエストでアクセストークンを使用する方法とアクセストークンを更新する方法Android Outlook API

+0

あなたが提供することができます。このクイックスタートへのリンクは? –

+0

https://github.com/OfficeDev/Outlook-SDK-Android – Daniel

+0

_clientには将来のリクエストを呼び出すためのデータがあります。サービスに再利用するにはどうすればいいですか? – Daniel

答えて

0

authライブラリhttps://github.com/AzureAD/azure-activedirectory-library-for-androidのドキュメントによると、ライブラリはトークンとリフレッシュトークンをキャッシュします。したがって、必要なときにトークンを取得するには、acquireTokenSilentSyncを使用してください。この関数は、現在のトークンが有効な場合はキャッシュから戻し、期限が切れている場合はリフレッシュします。

更新:使用しているサンプルと使用しているOutlook SDKを詳しく見てきました。ここで重要なのはDependencyResolverオブジェクトです。そのオブジェクトをOutlookClientコンストラクタに渡します。その後、OutlookClientでAPI呼び出しを行うたびに、DependencyResolverを作成するときに指定したgetCredentialsオーバーライドが呼び出されます。

サンプルがあるので、何も変更することなく、OutlookClientを通じて複数の通話ができるはずです。ただし、1時間後にアクセストークンの有効期限が切れると、呼び出しが失敗し始めます。その修正は、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()); 
} 

警告:ような何か私が原因の問題私のdevのマシン上で実行されているAndroidのエミュレータを取得:(それを検証するために、このコードを実行することができないんだ

+0

さて、それを試してみてください。私は以下を持っています:Futures.addCallback(** _ client **。getMe()。getMailFolder( "受信箱").getMessages()。トップ(5).read()、新しいFutureCallback <リスト>(){ _clientには(トークンの情報) acquireTokenSilentSyncは_authTokenにありますので、リクエストで使用する_client値を回復する例がありますか? – Daniel

+0

paste(OutlookQuickStart)_authContext.acquireTokenSilentSync(スコープ、adal_settings.xmlのclientId、私はUserIdentifierユーザーを取得する場所がありません) – Daniel

+0

acquireTokenSilentSyncはトークンではなく、認証コンテキストにあります:) –

関連する問題