2016-03-15 2 views
2

Мне нужно зарегистрировать мое приложение для использования API календаря Outlook. Я создал приложение здесь: https://apps.dev.microsoft.com. У меня есть идентификатор приложения и URL-адрес перенаправления. Тогда я использовал следующий метод, чтобы получить маркер:Azure AD ADAuthenticationError 15 - unauthorized_client - Приложение не поддерживается для этой версии API

[self.context acquireTokenWithResource:resourceID 
           clientId:clientID 
          redirectUri:redirectURI 
         completionBlock:^(ADAuthenticationResult *result) { 
          if (result.status !=AD_SUCCEEDED){ 
           completion(result.error); 
          } 

          else{ 
           self.accessToken = result.accessToken; 
           self.refreshToken = result.tokenCacheStoreItem.refreshToken; 
           self.familyName = result.tokenCacheStoreItem.userInformation.familyName; 
           self.givenName = result.tokenCacheStoreItem.userInformation.givenName; 
           self.userID = result.tokenCacheStoreItem.userInformation.userId; 
           completion(nil); 
          } 
         }]; 

И получил эту ошибку:

Error with code: 15 Domain: ADAuthenticationErrorDomain ProtocolCode:unauthorized_client Details:AADSTS70001: Application '***' is not supported for this API version. 
Trace ID: c5286e11-9fa9-4ddd-96a4-a29ddd6b416c 
Correlation ID: c608d556-729b-4cad-80be-24d85f5558d4 
Timestamp: 2016-03-14 13:05:11Z. Inner error details: Error Domain=ADAuthenticationErrorDomain Code=15 "The operation couldn’t be completed. (ADAuthenticationErrorDomain error 15.)" 

Пожалуйста, помогите мне зарегистрировать мое приложение правильно

UPDATE: @dstrockis помог с Эта проблема. Но теперь у меня есть один еще: Там https://cocoapods.org/pods/ADALiOS используется метод

[authContext acquireTokenWithResource:resourceId 
          clientId:clientId 
          redirectUri:redirectUri 
         completionBlock:^(ADAuthenticationResult *result) { 
    if (AD_SUCCEEDED != result.status){ 
     // display error on the screen 
     [self showError:result.error.errorDetails]; 
    } 
    else{ 
     completionBlock(result.accessToken); 
    } 
}]; 

Но библиотека ADALiOS, 3.0.0-pre3 не содержит этот метод. Я пытался использовать

- (void)acquireTokenWithScopes:(NSArray*)scopes 
      additionalScopes:(NSArray*)additionalScopes 
        clientId:(NSString*)clientId 
       redirectUri:(NSURL*)redirectUri 
       identifier:(ADUserIdentifier*)identifier 
      promptBehavior:(ADPromptBehavior)promptBehavior 
      completionBlock:(ADAuthenticationCallback)completionBlock; 

И я получил следующее сообщение об ошибке: "Ошибка с кодом: 17 Домен: ADAuthenticationErrorDomain ProtocolCode: (нуль) Подробности:. Приложение не имеет текущий ViewController Внутренние детали ошибки: Ошибка домена = ADAuthenticationErrorDomain Code = 17 «Операция не может быть выполнена. (Ошибка ADAuthenticationErrorDomain 17.) "".

+1

Это правильный метод использования. Я посмотрю, смогу ли я заставить парня iOS прокомментировать эту конкретную ошибку. Вы должны вызвать этот метод в контексте ViewController, чтобы adal мог вывести веб-представление для выполнения проверки подлинности. – dstrockis

+0

@dstrockis, я назвал его в моем контроллере View, в методе ViewDidLoad Предыдущий метод «приобретатьTokenWithResource» Я также позвонил туда, и был указан диспетчер авторизации – Anna

+0

@dstrockis, вам что-то узнать об этой проблеме? На самом деле это был длинный ряд для мотыги, поэтому, если вы или ваш парень iOS могли бы помочь, было бы очень благодарно :) –

ответ

1

Вы используете неправильную версию библиотеки ADALiOS. Чтобы использовать конечную точку v2.0 (и приложения, зарегистрированные на сайте apps.dev.microsoft.com), вам нужно будет использовать версию предварительного просмотра библиотеки ADALiOS, 3.0.0-pre3. См. https://cocoapods.org/pods/ADALiOS. Более подробную информацию о конечной точке v2.0 можно получить на aka.ms/aaddevv2.

+0

Большое вам спасибо, это помогло решить мою проблему. Но теперь у меня другая проблема, я добавил ее после UPDATE – Anna

0

Для обновленного вопроса:

Вы можете указать родительский контроллер просмотра перед вызовом acquireTokenWithScopes в случае Адал не может найти ваш контроллер представления корня.

, например, установка

context.parentController = сам;

перед тем, как позвонить приобрестиTokenWithScopes.

+0

спасибо за ваш ответ. Я уже делал это, но он все еще не работает на устройствах iOS7. У меня есть контроллер, но он не работает из-за плохого запроса. На iOS8 и более мощных устройствах все работает без контекста .parentController = self – Anna

+0

@Anna На устройствах iOS7, какие ошибки вы получили? – jasoncoolmax

+0

было исключение в строке «if (query && [query containsString: ADAL_ID_VERSION])» в файле «ADHelpers.m». Я переписал его в зависимости от версии iOS. Затем я увидел контроллер авторизации с «Извините.но у нас возникли проблемы с подписанием вами. Мы получили плохую просьбу. Предоставляемое значение для входного параметра «область действия» недопустимо ». Я поставил вместо этого параметра nil, но получил ошибку:« требуется параметр «scope». На iOS8 и более крупных устройствах он работает только с «scopes» nil, но я не могу получить события календаря из-за недействительного токена. – Anna