认证完成后不会调用finishedWithAuth方法

时间:2013-05-24 09:32:36

标签: ios authentication google-plus

我正在为iOS登录Google+。

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

  [signIn authenticate];

我没有使用signin butting。

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

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

请让我知道有没有办法处理回调?

5 个答案:

答案 0 :(得分:10)

你是按照Google+ Sign-In for iOS所说的一步一步走的吗?如果是,那么你必须错过关键的一步。

第5步

AppDelegate.m文件中

#import <GooglePlus/GooglePlus.h>

第6步

从您的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)

确保您也按照此步骤进行操作

enter image description here

答案 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
}