通过 Firebase 函数发送的 Swift 中的加密推送通知
Posted
技术标签:
【中文标题】通过 Firebase 函数发送的 Swift 中的加密推送通知【英文标题】:Encrypted push notifications in Swift sent through Firebase Functions 【发布时间】:2018-08-27 14:33:47 【问题描述】:我在我的应用程序中对聊天消息使用AES-256
加密。消息存储在Firebase Firestore
中,Firebase Functions
中的函数在收到新消息时发送推送通知。
由于字符串是加密的,推送通知当然看起来很奇怪。我正在解密应用程序中的消息,但如果应用程序关闭或终止,我如何解密消息?我研究了两个选项。
在设备上处理
我可以在字符串通过AppDelegate
以推送通知的形式呈现之前对其进行解密吗? 如果有在哪个函数下?
在 Firebase 函数上处理它
我应该解密NodeJS
函数中的消息吗?这是推荐的方式吗? NodeJS
中似乎有很多不同的库用于AES
解密,有什么建议吗?
【问题讨论】:
【参考方案1】:我建议使用Push Notification Extension
。对于这种类型的扩展by Apple,实际上以解密文本为例。
在您向应用添加新目标(扩展)后,Xcode 会自动为通知服务扩展创建一个基类。
会有方法:
func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)
所以解密会很简单:
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent
if let body = decryptBody(userInfo: bestAttemptContent.userInfo)
bestAttemptContent.body = body
else
bestAttemptContent.body = "Encrypted"
if let title = decryptBody(userInfo: bestAttemptContent.userInfo)
bestAttemptContent.title = title
else
bestAttemptContent.title = "Encrypted"
contentHandler(bestAttemptContent)
func decryptBody(userInfo: [AnyHashable : Any]) -> String?
//Decrypt
func decryptTitle(userInfo: [AnyHashable : Any]) -> String?
//Decrypt
【讨论】:
以上是关于通过 Firebase 函数发送的 Swift 中的加密推送通知的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift 使用 Firebase 云消息发送丰富的推送通知
使用firebase问题推送通知(ios,swift 4)[关闭]
未通过 firebase 函数发送通知。 “未定义”登录控制台