我有一个棘手的问题。我需要使用iOS应用程序启动Google身份验证,并将Google API返回的code
值传递给我创建的服务器端点。如果我从JavaScript
应用程序发起请求,这将完全正常工作。这里是Google文档。
然而,如果我使用以下代码从iOS应用程序发起请求,它会返回并说我有一个URI不匹配,因为我创建的oAuth ID是Web Application
类型。如果我使用Other
,我将得到另一个错误,即Error fetching OAuth2 access token, message: 'invalid_grant: Invalid code.'.
话虽如此,下面是我如何从iOS应用中初始化认证的。
NSString *urlString = @"https://accounts.google.com/o/oauth2/token";
NSURL *tokenURL = [NSURL URLWithString:urlString];
// We'll make up an arbitrary redirectURI. The controller will watch for
// the server to redirect the web view to this URI, but this URI will not be
// loaded, so it need not be for any actual web page.
NSString *redirectURI = @"urn:ietf:wg:oauth:2.0:oob";
GTMOAuth2Authentication *auth = [GTMOAuth2Authentication authenticationWithServiceProvider:@"Google"
tokenURL:tokenURL
redirectURI:redirectURI
clientID:kClientID
clientSecret:kClientSecret];
你看到什么明显的问题了吗?
重定向url必须注册到谷歌云应用程序。它不能使用通配符。
我会说:确保它得到正确的重定向uri。最重要的是uri是精确的。
解决方案最终使用Google Sign-In作为认证用户的方式:https://developers.google.com/identity/sign-in/ios/