通过 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 和 Swift 推送通知 [重复]

使用firebase问题推送通知(ios,swift 4)[关闭]

未通过 firebase 函数发送通知。 “未定义”登录控制台

Firebase 通过 curl 命令发送推送通知有效,但不是来自 firebase 控制台

想要使用 Swift 3.0 发送自定义电子邮件,即来自 firebase 的欢迎邮件