Я нашел ответ. Первоначально я использовал идентификатор клиента для установленного приложения. Это не давало возможность настроить URI перенаправления. Он дал URI перенаправления по умолчанию urn: ietf: wg: oauth: 2.0: oob http://localhost. Поэтому, когда я отправил запрос на аутентификацию с использованием этого кода:
viewController = [GTMOAuth2ViewControllerTouch controllerWithScope:scope
clientID:clientID
clientSecret:clientSecret
keychainItemName:nil
delegate:self
finishedSelector:finishedSel];
Возвращен код успеха, который затем используется для авторизации собственных приложений. Пожалуйста, укажите здесь для получения дополнительной информации о возвращенных кодах или токенах.
Чтобы исправить мою проблему, я пошел дальше и использовал идентификатор клиента для веб-приложения. Это позволило мне явно установить URI перенаправления, а также установить для response_type токен вместо кода здесь:
https://accounts.google.com/o/oauth2/auth?
client_id=21302922996.apps.googleusercontent.com&
redirect_uri=https://www.example.com/back&
scope=https://www.google.com/m8/feeds/&
response_type=**token**
Таким образом, когда я аутентифицируюсь и redirect_uri возвращается с сервера, он приходит с «access_tocken», добавляемым в виде строки запроса, подобной этой:
https://www.example.com/back?access_token=returned_access_tocken
Теперь вы можете использовать код регулярного выражения:
-(void)checkForAccessToken:(NSString *)urlString {
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"access_token=(.*)&" options:0 error:&error];
if (regex != nil)
{
NSTextCheckingResult *firstMatch = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, [urlString length])];
if (firstMatch)
{
NSRange accessTokenRange = [firstMatch rangeAtIndex:1];
NSString *accessToken = [urlString substringWithRange:accessTokenRange];
accessToken = [accessToken stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[_delegate accessTokenFoundGoogle:accessToken];
accessTokenFound = YES;
}
}
}
чтобы получить код доступа и использовать его для запроса авторизации здесь:
"https://www.googleapis.com/oauth2/v1/userinfo?oauth_token=put_your_accesstoken_here" to send a request for authorization
Тогда вы можете просто отправить свой запрос и в этом случае получить информацию о профиле пользователя в формате JSON. Вы можете обратиться к этому вопросу и ответу , чтобы использовать графическое API Facebook для входа в систему. Затем просто измените код для работы с новым Google OAuth 2.0, используя предложения и URL-адреса запросов, которые я включил здесь. Просто предложите ускорить процесс преобразования кода для Facebook, создайте новый метод инициализации, подобный следующему:
- (id)initWithDelegate:(id<GoogleLoginDialogDelegate>)delegate;
- (id)initWithDelegate:(id<GoogleLoginDialogDelegate>)delegate
{
if ((self = [super initWithNibName:@"GoogleLoginDialog" bundle:[NSBundle mainBundle]])) {
self.delegate = delegate;
}
return self;
}
Так что вы можете легко работать с методами делегата из вашего логина Google. Если вы внимательно последуете примеру Facebook, у вас должна быть отличная возможность входа в Google с OAuth!