GPPSignIn委托方法没有被执行?

时间:2015-02-12 06:39:39

标签: ios objective-c google-plus-signin

我已按照谷歌网站上的说明将 Goolge + signin 集成到iOS(使用ObjC)但finishedWithAuth:auth:error的委托方法(我对此方法GPPSignIn感兴趣)没有被执行。我必须将委托方法中收到的访问令牌存储在共享首选项中。

这是我的代码:

`

-(void)finishedWithAuth:(GTMOAuth2Authentication *)auth
error:(NSError *)error {
    NSLog(@"Received error %@ and auth object %@",error, auth);
    if (error) {
        NSLog(@"error");
    } else {
        NSLog(@"success");
    }
}
- (BOOL)application: (UIApplication *)application
openURL: (NSURL *)url
sourceApplication: (NSString *)sourceApplication
annotation: (id)annotation {
    NSLog(@"application");
    return [GPPURLHandler handleURL:url
                  sourceApplication:sourceApplication
                         annotation:annotation];
}
-(void)refreshInterfaceBasedOnSignIn {
    NSLog(@"refreshInterfaceBasedOnSignIn");
    if ([[GPPSignIn sharedInstance] authentication]) {
        // The user is signed in.
        self.signInButton.hidden = YES;
        [self readProfileInformation];
        // Perform other actions here, such as showing a sign-out button
        [self readProfileInformation];
        NSLog(@"readProfileInformation");
    } else {
        self.signInButton.hidden = NO;
        // Perform other actions here
    }
}
- (void)disconnect {
    [[GPPSignIn sharedInstance] disconnect];
}
- (void)didDisconnectWithError:(NSError *)error {
    if (error) {
        NSLog(@"Received error %@", error);
    } else {
        // The user is signed out and disconnected.
        // Clean up user data as specified by the Google+ terms.
    }
}
- (void)signOut {
    [[GPPSignIn sharedInstance] signOut];
}
-(void)viewDidLoad
{
    [super viewDidLoad];
    // google+ code
    GPPSignIn *signIn = [GPPSignIn sharedInstance];
    signIn.shouldFetchGooglePlusUser = YES;
    // uncommented to fetch  user email
    signIn.shouldFetchGoogleUserEmail = YES;
    // You previously set kClientId in the "Initialize the Google+ client" step
    signIn.clientID = kClientId;
    // Uncomment one of these two statements for the scope you chose in the previous step
    // signIn.scopes = @[ kGTLAuthScopePlusLogin ];
    // uncommented & set to "profile" & "email" scope:
    signIn.scopes = @[ @"profile", @"email" ];
    // Optional: declare signIn.actions, see "app activities"
    signIn.delegate = self;
    // try silent authentication
    [signIn trySilentAuthentication];
}
@end

`

由于

1 个答案:

答案 0 :(得分:4)

在我运行iOS 8的应用程序中也发生了这种情况8.对我来说,一旦应用程序启动,就在appDelegate中设置clientId,而不是在我的UIViewController类的viewDidLoad方法中,如Google+所示在以下网址中登录iOS示例:https://developers.google.com/+/mobile/ios/sign-in

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/
//Google+
// Set app's client ID for |GPPSignIn| and |GPPShare|.
[GPPSignIn sharedInstance].clientID = @"xxxxxx.......apps.googleusercontent.com";

...

return YES;

}

因此,在您的UIViewController类中,登录方法应为:

 - (void)viewDidLoad {
[super viewDidLoad];

//Google+ for Logging in the user again if the app has been authorized
signIn = [GPPSignIn sharedInstance];
signIn.shouldFetchGooglePlusUser = YES;
signIn.shouldFetchGoogleUserID = YES;
signIn.shouldFetchGoogleUserEmail = YES;
signIn.scopes = @[ kGTLAuthScopePlusLogin ];
signIn.delegate = self;
[signIn trySilentAuthentication];

...
}