2014-11-22 115 views
3

我正在编写iOS应用程序以通过电子邮件共享网页链接,并且作为其中的一部分,我希望用户能够登录Google plus。我有使用说明,包含应用程序工作正常,从这里开始:Google plus登录xcode共享扩展

https://developers.google.com/+/mobile/ios/sign-in

,现在我想添加共享扩展,还可以访问用户的谷歌+个人资料。我开始尝试将登录按钮添加到共享扩展中,但我认为这不会起作用,因为点击按钮后,您将从应用程序中移出浏览器以接受权限,然后没有办法重定向到共享扩展(或者至少我看不到方法)。

我现在希望的是,用户可以在主(含)应用程序中登录和接受权限,但之后再使用共享扩展,并仍然使用相同的配置文件登录。我使用的共享扩展自定义的UIViewController,并作为第一次尝试,我试图用同一个客户端ID在共享扩展为包括应用程序,并在viewDidLoad方法调用这个:

GPPSignIn *signIn = [GPPSignIn sharedInstance]; 
signIn.shouldFetchGooglePlusUser = YES; 
signIn.shouldFetchGoogleUserEmail = YES; 
signIn.clientID = kClientID; 
signIn.scopes = @[ @"profile" ]; 
signIn.delegate = self; 
if ([signIn hasAuthInKeychain]) { 
    NSLog(@"Has auth in keychain"); 
} else { 
    NSLog(@"No auth in keychain"); 
} 
包含应用程序hasAuthInKeychain中的

返回true,但在共享扩展中它是错误的。我使用的客户端ID绑定到主应用程序包,所以我不确定我是否应该能够在共享扩展中使用它,但是如果我尝试为共享创建单独的客户端ID那么推测大概我需要再次通过授权过程?

有没有一种方法可以从主应用程序访问现有的身份验证令牌并在共享扩展中使用它?

回答

0

你在正确的轨道上。

要在应用程序和扩展程序中访问相同的钥匙串,您需要在Xcode中为它们启用“钥匙串共享”功能。当你这样做时,Xcode可能会想要更新你的应用ID和配置文件,因为它们需要反映新的功能。

这是否足够取决于Google框架如何处理钥匙串。它的可能是所有你需要的,因为作为docs for SecItemAdd indicate,项目将默认添加到第一个列出的组。但我不知道谷歌的代码如何工作,所以我不能确定这一点。

一旦你这样做,你可能不得不重新授权应用程序,以获得凭证进入正确的组。然后,应用程序和扩展程序都可以查找现有的值。

+0

我必须注册苹果的开发者计划才能检查出来,但一旦照顾好了,我就可以使用相同的钥匙串组名称向应用程序和扩展程序添加钥匙串共享功能。然后,我只需确保我在两个地方使用的GPPSignIn对象具有相同的钥匙串名称集: 'signIn.keychainName = @“signinchainname”' 然后hasAuthInKeychain返回true。如果我然后使用trySilentAuthentication,我可以得到一个auth对象。 感谢您的帮助! – 2014-12-03 21:40:53