如何在主 iOS 应用程序及其共享扩展程序之间使用相同的经过身份验证的用户令牌

Posted

技术标签:

【中文标题】如何在主 iOS 应用程序及其共享扩展程序之间使用相同的经过身份验证的用户令牌【英文标题】:How to use same Authenticated user token between main iOS app and its Share Extension 【发布时间】:2017-06-09 10:27:22 【问题描述】:

我们的主应用与 Firebase SDK 集成。用户使用电子邮件、谷歌或脸书通过主应用程序登录。

现在,我们实现了共享扩展,理想情况下应该在内部共享相同的身份验证会话,以便可以在 Firebase 上与同一用户发送数据,而无需要求他通过扩展再次登录。

那么,有人知道在主应用和共享扩展之间共享 Firebase 身份验证会话的方法吗?

    要么我们向主应用发送了一些内部调用来执行 Firebase 的东西,因为它包含身份验证详细信息。

    主应用通过应用组将一些令牌设置为常见用户默认值,然后共享扩展程序将使用这些令牌自动重新进行身份验证。

    或者 Firebase 提供了一些方法来做到这一点,

我不知道从上面什么是可行的。 我找到了一个方法 signInWithCustomToken:completion: 但是,它与我实际寻找的内容无关。

【问题讨论】:

这有什么更新吗?我也遇到同样的情况…… 【参考方案1】:

要从同一组 NSUserDefaults 中读取和保存,您需要执行以下操作:

    在您的主应用程序中,在项目导航器中选择您的项目。 选择您的主要应用目标并选择功能选项卡。 打开应用程序组(这将与开发人员门户通信,因为它正在生成一组权利和相关的应用程序 ID 等 第四次)。 创建一个新容器。根据帮助,它必须启动 加上“group.”,所以给它起一个名字,比如“group.myapp.test”。 选择 您的 Today Extension 目标并重复此开启过程 应用程序组。不要创建一个新的,而是选择这个新创建的 group 表示 Today Extension 是该组的成员。

写入您的 NSUserDefaults:

    // In this example I´m setting FirstLaunch value to true 
NSUserDefaults(suiteName: "group.myapp.test")!.setBool(true, forKey: "FirstLaunch")

从 NSUserDefaults 读取:

// Getting the value from FirstLaunch
let firstLaunch = NSUserDefaults(suiteName: "group.myapp.test")!.boolForKey("FirstLaunch")

if !firstLaunch  
   ...

【讨论】:

先生,其实我知道如何在主应用程序和扩展程序之间共享数据。我的问题是在主应用程序和扩展程序之间使用相同的身份验证会话。 您有任何身份验证令牌吗?如果没有,那么您可以直接在用户默认值“isUserAuthenticated”中保存一个属性并跳过扩展中的身份验证。如果您有身份验证令牌,则可以将其保存在用户默认值中并与扩展程序共享以验证令牌是否有效。 这不是解决方案。我实际上正在寻找一些在主应用程序和扩展程序之间共享 Firebase 会话的方法。请完成问题。

以上是关于如何在主 iOS 应用程序及其共享扩展程序之间使用相同的经过身份验证的用户令牌的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过应用扩展在主 iOS 应用中执行任务吗?

如何在 iOS 应用程序和今日视图扩展程序之间共享数据

在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥

iOS swift 使用 alamofire 在应用程序和共享扩展程序之间共享 cookie

在 iOS 扩展和应用程序之间使用 UIApplication.shared 共享 CocoaPod

如何在应用程序和扩展程序中使用 cocoapods