2016-10-07 5 views
0

В примере OutlookQuickStart для Android отлично работает в первом запросе после входа в систему().
Теперь я хочу, чтобы поддерживать подключение к этому пользователю и продолжать проверку новых писем.
Как я могу использовать токен доступа и построить запрос для проверки новых писем?
Должен ли я сохранить токен доступа, обновить токен?
Как я могу обновить токен в 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, чтобы получить токен каждый раз, когда вам это нужно. Эта функция вернет текущий токен из кеша, если он все еще действителен, и обновит его, если он истек.

ОБНОВЛЕНИЕ: Я внимательно рассмотрел образец, который вы используете, и используемый в нем SDK Outlook. Ключевым моментом здесь является объект DependencyResolver. Вы передаете этот объект в конструктор OutlookClient. Тогда в любое время, когда вы вызываете вызов API с этим OutlookClient, он просто вызывает переопределение 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()); 
} 

Caveat:. Я не могу запустить этот код для проверки его из-за проблем с получением на Android эмулятор работает на моей машине Dev :(

+0

Хорошо, да, попробуй. У меня есть: Futures.addCallback (** _ client **. GetMe(). GetMailFolder («inbox»). GetMessages(). Top (5) .read(), new FutureCallback <Список >() { _client имеет информация о токене ... purchaseTokenSilentSync находится в _authToken, так что у вас есть пример для восстановления значений _клиента, которые будут использоваться в запросе? – Daniel

+0

Со ссылкой Я вставляю (OutlookQuickStart) _authContext.acquireTokenSilentSync (scopes, clientId из adal_settings.xml, и мне не хватает, где получить пользователя UserIdentifier) ​​ – Daniel

+0

purchaseTokenSilentSync находится в контексте auth, а не в токене. :) –

Смежные вопросы