3

我正在编写一个 iOS 应用程序以通过电子邮件共享网页链接,作为其中的一部分,我希望用户能够登录到 google plus。使用此处的说明,我已使包含的应用程序正常工作:

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

现在我正在尝试添加一个共享扩展,它也可以访问用户的 google+ 个人资料。我首先尝试将登录按钮添加到共享扩展程序中,但我认为这不会起作用,因为在单击该按钮后,您将被从应用程序中移出到浏览器以接受权限,然后出现无法重定向回共享扩展(或者至少我看不到方法)。

我现在希望的是,用户可以在主(包含)应用程序中登录并接受权限,但稍后使用共享扩展,并且仍然使用相同的配置文件登录。我在共享扩展中使用自定义 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,但在共享扩展中返回 false。我正在使用的客户端 ID 绑定到主应用程序的捆绑包,所以我不确定我是否应该能够在共享扩展中使用它,但是如果我尝试为共享创建单独的客户端 ID扩展然后大概我需要再次通过授权过程?

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

4

1 回答 1

0

你在正确的轨道上。

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

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

完成此操作后,您可能必须重新授权应用程序才能将凭据放入正确的组中。但在那之后,应用程序和扩展程序都可以查找现有值。

于 2014-11-25T01:02:03.293 回答