我正在为iOS登录Google+。
我正在调用身份验证方法,如
[signIn authenticate];
我没有使用signin butting。
在这种情况下,验证后不会调用以下方法
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
error: (NSError *) error
请让我知道有没有办法处理回调?
答案 0 :(得分:10)
你是按照Google+ Sign-In for iOS
所说的一步一步走的吗?如果是,那么你必须错过关键的一步。
在AppDelegate.m
文件中
#import <GooglePlus/GooglePlus.h>
从您的app delegate的URL处理程序中调用GPPURLHandler
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
你身上的方法<{1}}
立即尝试。
答案 1 :(得分:0)
在登录时,您需要在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];
添加到某个按钮
然后像这样使用auth
- (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
答案 2 :(得分:0)
确保您也按照此步骤进行操作
答案 3 :(得分:0)
只需添加此内容:
@property (weak, nonatomic) IBOutlet GPPSignInButton *signinButton;
不要担心,如果你没有将它与任何视图链接,只需添加它,它应该工作,如果你已经完成了所有步骤。
答案 4 :(得分:0)
以下是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
}