我正在为 iOS 做 Google+ 登录。
我正在调用身份验证方法,例如
[signIn authenticate];
我没有使用登录对接。
在这种情况下,身份验证后不会调用以下方法
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
error: (NSError *) error
请让我知道有什么方法可以处理回调吗?
我正在为 iOS 做 Google+ 登录。
我正在调用身份验证方法,例如
[signIn authenticate];
我没有使用登录对接。
在这种情况下,身份验证后不会调用以下方法
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
error: (NSError *) error
请让我知道有什么方法可以处理回调吗?
你一步一步Google+ Sign-In for iOS
说什么了吗?如果是,那么你一定错过了一个关键步骤。
在你的AppDelegate.m
文件中
#import <GooglePlus/GooglePlus.h>
GPPURLHandler
从您的应用委托的 URL 处理程序调用URL 处理程序。此处理程序将正确处理您的应用程序在身份验证过程结束时收到的 URL。
- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation
{
return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
当您的应用程序在 Google+ OAuth 之后返回时,此方法将调用,并立即调用
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error
你的方法viewController
现在就试试。
确保您也遵循此步骤
登录后,您需要在 viewDidLoad 中执行此操作
signIn.clientID = kClientId;
signIn.shouldFetchGoogleUserEmail = YES;
signIn.shouldFetchGoogleUserID = YES;
signIn.scopes = [NSArray arrayWithObjects:
kGTLAuthScopePlusLogin, // defined in GTLPlusConstants.h
nil];
signIn.delegate = self;
那么你需要做两个选项之一,但不能同时做两个。
选项1:添加类GPPSignInButton
或者
选项2:将此添加[signIn authenticate];
到某个按钮
然后像这样使用身份验证
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
error: (NSError *) error
{
if (error) {
// Do some error handling here.
} else {
GTLServicePlus* plusService = [[GTLServicePlus alloc] init];
plusService.retryEnabled = YES;
[plusService setAuthorizer:auth];
GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:@"me"];
[plusService executeQuery:query
completionHandler:^(GTLServiceTicket *ticket,
GTLPlusPerson *person,
NSError *error) {
if (error) {
GTMLoggerError(@"Error: %@", error);
} else {
// Retrieve the display name and "about me" text
NSString *description = [NSString stringWithFormat:
@"%@\n%@", person.displayName,
person.identifier];
}
}];
}
}
你的 .h 应该是这样的
#import <UIKit/UIKit.h>
#import <GooglePlus/GooglePlus.h>
#import <GoogleOpenSource/GoogleOpenSource.h>
static NSString * const kClientId = @"yourappnumber.apps.googleusercontent.com";
@interface login : UIViewController<GPPSignInDelegate>
@property (retain, nonatomic) IBOutlet GPPSignInButton *signInButton;
@end
只需添加以下内容:
@property (weak, nonatomic) IBOutlet GPPSignInButton *signinButton;
如果您没有将它与任何视图链接,请不要担心,只需添加它,它应该可以工作,如果您已经完成了所有步骤。
这是 Swift 3 中的简单解决方案。
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if (url.absoluteString.range(of: "oauth2callback") != nil) {
GPPSignIn.sharedInstance().handle(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: nil)
}
return false
}