0

我正在为 iOS 做 Google+ 登录。

我正在调用身份验证方法,例如

  [signIn authenticate];

我没有使用登录对接。

在这种情况下,身份验证后不会调用以下方法

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
                   error: (NSError *) error

请让我知道有什么方法可以处理回调吗?

4

5 回答 5

10

你一步一步Google+ Sign-In for iOS说什么了吗?如果是,那么你一定错过了一个关键步骤。

第 5 步

在你的AppDelegate.m文件中

#import <GooglePlus/GooglePlus.h>

第 6 步

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

现在就试试。

于 2013-10-16T07:31:15.113 回答
0

确保您也遵循此步骤

在此处输入图像描述

于 2014-11-21T04:16:27.403 回答
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];到某个按钮

然后像这样使用身份验证

- (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
于 2013-09-05T22:05:05.653 回答
0

只需添加以下内容:

@property (weak, nonatomic) IBOutlet GPPSignInButton *signinButton;

如果您没有将它与任何视图链接,请不要担心,只需添加它,它应该可以工作,如果您已经完成了所有步骤。

于 2017-06-03T13:17:50.403 回答
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
}
于 2018-01-08T14:57:33.500 回答