我已按照谷歌网站上的说明将 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
`
由于
答案 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];
...
}