【问题标题】:Onesignal OSNotificationPayload as a userInfo payload?Onesignal OSNotificationPayload 作为 userInfo 有效负载?
【发布时间】:2020-06-17 08:51:36
【问题描述】:

我需要使用 userinfo 数据中包含的 NotificationCenter POST 请求传递 OSNotificationPayload 类型的有效负载,但我不断收到以下错误 Cannot convert value of type 'OSNotificationPayload' to expected argument type '[AnyHashable : Any]?'

我是一个快速的菜鸟,可以强制这样做吗?受影响的代码如下

        let notificationOpenedBlock: OSHandleNotificationActionBlock = { result in

           let payload: OSNotificationPayload = result!.notification.payload

            NotificationCenter.default.post(name: Notification.Name("Notification"), object: nil, userInfo: payload )

        }

我在另一个班级有一个观察者设置

    public override func load() {
       let nc = NotificationCenter.default
            nc.addObserver(self, selector: #selector(self.handleSignal(_:)), name: Notification.Name("Notification"), object: nil)
    }



    @objc func handleSignal(_ notification: NSNotification)
    {
        let image = notification.userInfo?["notify"] as? OSNotificationPayload
            notifyListeners(
                "myPluginEvent",
                data: ["payload":image as Any],
                retainUntilConsumed: true
            )
    }   

【问题讨论】:

    标签: ios swift swift3 swift4 onesignal


    【解决方案1】:

    Notification 的 userInfo 应该是字典,所以你的代码可以像下面这样

    let notificationOpenedBlock: OSHandleNotificationActionBlock = { result in
    
               let payload: OSNotificationPayload = result!.notification.payload
    
                NotificationCenter.default.post(name: Notification.Name("Notification"), 
                    object: nil, userInfo: ["payload": payload] )
    
            }
    

    【讨论】:

    • 它可以抑制错误,但订阅者从未收到我的通知,我已经更新了代码
    • @Jipsum,userInfo 不影响发布或接收通知,只有通知名称和对象有影响。因此,在您的情况下,通知要么根本没有发布,而是在您订阅它之前发布。通过代码,它看起来一切都很好。所以我会在 postaddObserver 行中设置断点,看看发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多