如何与 iOS 扩展共享 Parse 登录会话?

Posted

技术标签:

【中文标题】如何与 iOS 扩展共享 Parse 登录会话?【英文标题】:How to share Parse login session with iOS extension? 【发布时间】:2018-03-18 20:42:00 【问题描述】:

在为应用编写 ios 扩展时,是否可以与 iOS 扩展共享应用当前的 Parse 登录会话?

iOS 扩展与 iOS 应用程序捆绑在一起,但在单独的容器中运行。因此,当用户登录应用程序时,扩展程序无法访问该 Parse 实例。如果扩展再次登录,它将为用户创建一个额外的登录会话。

但是,扩展程序可以与应用程序共享一个公共数据容器。所以我想知道是否可以将PFSession.sessionToken 存储在共享容器中,并让扩展基于现有会话与 Parse Server 通信而无需登录?

【问题讨论】:

【参考方案1】:

有两种可能的解决方案:

A) 优雅的方法

启用本地数据共享,在主 iOS 应用程序及其扩展程序之间共享持久数据。

// Enable data sharing in main app.
Parse.enableDataSharingWithApplicationGroupIdentifier("...")

// Enable data sharing in app extensions.
Parse.enableDataSharingWithApplicationGroupIdentifier("...", containingApplicaiton: "...")

Parse SDK 中的本地数据共享允许您共享持久的本地数据 您的主应用程序与其包含的扩展程序之间的数据, 包括键盘、分享/今天/照片/操作扩展和文档 提供者。

如docs 中所述。

B) 手动方法

登录应用后,将 Parse 会话令牌 PFUser.current().sessionToken 存储在加密的共享数据容器中。

然后扩展程序可以访问会话令牌并使用PFUser.become(sessionToken:) 继续会话。

【讨论】:

SDK支持数据共享IIRC,见:docs.parseplatform.org/ios/guide/#app-extensions

以上是关于如何与 iOS 扩展共享 Parse 登录会话?的主要内容,如果未能解决你的问题,请参考以下文章

从 iOS 容器应用与应用扩展共享 Firebase 身份验证会话

支持在 IOS 应用中将 SAML 登录会话共享给不同的供应商

socket.io 身份验证与共享会话数据,io.use() 如何工作

Laravel与Socket.io Nodejs共享会话

Parse / Facebook -> 会话与当前存储的会话不匹配

与 windows 服务共享 asp.net mvc 会话