Google plusloginxcode共享扩展

我正在编写一个iOS应用程序,通过电子邮件分享网页链接,作为其中的一部分,我希望用户能够login到谷歌加。 我已经得到了包含的应用程序工作正常使用从这里的指示:

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

现在我试图添加一个共享扩展,也可以访问用户的谷歌+configuration文件。 我开始试图将loginbutton添加到共享扩展,但我不认为这将工作,因为点击button后,你从应用程序中取出到浏览器接受权限,然后有没有办法重新回到共享扩展(或者至less我不能看到一种方式)。

我现在所希望的是,用户可以在主(含)应用程序中login和接受权限,但之后再使用共享扩展,并且仍然使用相同的configuration文件login。 我在共享扩展中使用自定义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绑定到主应用程序包,所以我不知道我是否应该能够在共享扩展中使用它,但如果我试图为共享创build一个单独的客户端ID那么推测大概我需要再次通过授权过程?

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

你在正确的轨道上。

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

不过这是否足够取决于Google框架如何处理钥匙串。 这可能是你所需要的,因为SecItemAdd的文档指出 ,默认情况下,项目将被添加到第一个列出的组。 但是我不知道Google的代码如何工作,所以我不能确定这一点。

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