2012-03-04 4 views
-1

Я разрабатываю приложение iOS, которое должно получать/поместить данные в приложение сервера приложений Google. Я также разрабатываю. Каждый пользователь приложения iOS будет использовать свой идентификатор Google для доступа к серверной части приложения. Я пытаюсь использовать nifty gtm-oauth library. Я использовал службу Google до register my domain, чтобы получить мой потребительский ключ OAuth и секрет пользователя OAuth.Аутентификация пользователя Oauth с устройства iOS на Google App Engine

Когда я создаю код для доступа к списку контактов Google для пользователя, он отлично работает, но я не могу заставить его работать с моим приложением приложения. Когда я пытаюсь, я получаю сообщение об ошибке «Запрошенная вами услуга пока недоступна. Повторите попытку через 30 секунд» в представлении контроллера проверки подлинности. В консоли приложения я вижу запрос на/_ah/OAuthGetAccessToken, который терпит неудачу (я не предоставил ничего на этом пути).

Вот мой код:

-(IBAction)authButtonClicked: (id) sender { 
    [GTMHTTPFetcher setLoggingEnabled:YES]; 
    NSURL *requestURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetRequestToken"]; 
    NSURL *accessURL = [NSURL URLWithString:@"https:/mysite.appspot.com/_ah/OAuthAuthorizeToken"]; 
    NSURL *authorizeURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetAccessToken"]; 
    NSString *scope = @"http://mysite.appspot.com/"; 
    GTMOAuthAuthentication *auth = [self myCustomAuth]; 
    GTMOAuthViewControllerTouch *viewController; 
    viewController = [[GTMOAuthViewControllerTouch alloc] initWithScope:scope 
                  language:nil 
                requestTokenURL:requestURL 
                authorizeTokenURL:authorizeURL 
                 accessTokenURL:accessURL 
                 authentication:auth 
                   appServiceName:@"My Service" 
                   delegate:self 
                 finishedSelector:@selector(viewController:finishedWithAuth:error:)]; 
    [[self navigationController] pushViewController:viewController animated:YES]; 
} 

- (GTMOAuthAuthentication *)myCustomAuth { 
    NSString *myConsumerKey = @"mysite.appspot.com"; // from google registration 
    NSString *myConsumerSecret = @"xxxxxxxxxxxxxxx"; // from google registration 
    GTMOAuthAuthentication *auth; 
    auth = [[GTMOAuthAuthentication alloc]    initWithSignatureMethod:kGTMOAuthSignatureMethodHMAC_SHA1 
                 consumerKey:myConsumerKey 
                 privateKey:myConsumerSecret]; 
    auth.serviceProvider = @"Custom Auth Service"; 
    return auth; 
} 

Am I используя правильные URL-адреса? Является ли область правильной? Что вызовет это сообщение?

ответ

0

Я вижу несколько ошибок в коде и отсутствующего вызова метода:
Во-первых, это URL, это неправильно:

NSURL *accessURL = [NSURL URLWithString:@"https:/mysite.appspot.com/_ah/OAuthAuthorizeToken"]; 

Он должен быть направлен вместо:

NSURL *accessURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetAccessToken"]; 

Второму , этот URL-адрес также неверен:

NSURL *authorizeURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthGetAccessToken"]; 

it shoul d точка к этому вместо:

NSURL *authorizeURL = [NSURL URLWithString:@"https://mysite.appspot.com/_ah/OAuthAuthorizeToken"]; 

И, наконец, в конце метода myCustomAuth и до возвращения добавить эту строку кода:

[auth setCallback:@"http://mysite.appspot.com/_my_callback"]; 

Это не имеет значения, где вы указываете Последняя часть url обратного вызова, потому что она не будет загружена в браузере Safari устройства iOS.
Надеюсь, что это поможет вам :)

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