Аутентификация пользователя Oauth с устройства iOS на Google App Engine - PullRequest
0 голосов
/ 05 марта 2012

Я разрабатываю приложение для iOS, которое должно получать / помещать данные в приложение сервера приложений Google, которое я также разрабатываю. Каждый пользователь приложения для iOS будет использовать свой идентификатор Google для доступа к серверной части приложения. Я пытаюсь использовать классную библиотеку gtm-oauth . Я использовал службу Google, чтобы зарегистрировать свой домен , чтобы получить мой OAuth-ключ потребителя и OAuth-потребительский секрет.

Когда я создаю код для доступа к списку контактов 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;
}

Использую ли я правильные URL? Является ли сфера правильной? Что вызвало бы это сообщение?

1 Ответ

0 голосов
/ 16 марта 2012

Я вижу пару ошибок в коде и пропущенный вызов метода:
Во-первых, этот 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"];

вместо этого он должен указывать на это:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...