【问题标题】:How to fetch data inside a push notification?如何在推送通知中获取数据?
【发布时间】:2019-10-02 04:48:19
【问题描述】:

我是推送通知的新手,我设法让推送通知正常工作。现在,每当收到推送通知时,如果我按下它,应用程序就会打开并进入一个页面。

这是我的推送通知消息

{"to":"eHPnnkSDzWk:APA91bHs...","data":{"message":"test notification","type":"5"}}

这些是类型

Gallery ( Type = 1 )
Messenger ( Type = 4 )
Events ( Type = 5 )
News ( Type = 6 )

这是目前我的 didReceiveRemoteNotification 函数

    func application(_ application: UIApplication, didReceiveRemoteNotification 
userInfo: [AnyHashable: Any],fetchCompletionHandler completionHandler: @escaping 
(UIBackgroundFetchResult) -> Void) {

        if let messageID = userInfo[gcmMessageIDKey] {
            print("Message ID: \(messageID)")
        }
        print(userInfo)

        completionHandler(UIBackgroundFetchResult.newData)
    }

这是我的问题,当用户点击推送通知时,如何从推送通知中获取此 TYPE,然后在应用上打开特定页面?

(对不起,如果这听起来很傻,但这是我第一次尝试这样做,我试图环顾四周但找不到任何合适的答案)

【问题讨论】:

  • 您要问 2 个问题 1. 我可以获取此 TYPE 吗? 2。在应用程序上打开特定页面?您说您知道如何从字典中获取值意味着您应该能够从 userInfo 字典中获取值。
  • 你可以问,但它不应该像你的第二个问题那样模棱两可。我们不知道您要打开什么?不应发布重复的问题。你可以先试试这个how to get push notification value swift
  • 我在这里同意@Kamran,解决方案只是找出字典的结构并读取值。致 Zyfe3r:作为一个提示,我通常会设置一个断点,在那里我可以调试字典内容并使用 lldb 来了解字典的结构。
  • 如前所述,这个问题中有几个问题,虽然它们是相关的,但很难在一个答案中解决所有问题。具体问题是什么也有点不清楚;使用字典?从通知中获取数据?使用视图控制器? Firebase 入门指南Receive messages in iOS 涵盖了其中的一部分。您的问题中没有任何代码尝试做任何这些事情 - 您能澄清一下具体问题是什么吗?然后我们可以看看并尝试提供帮助。

标签: ios swift firebase push-notification firebase-cloud-messaging


【解决方案1】:

只需使用下面的代码,它正在工作测试

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

        if let dict = userInfo as? [String:Any] {
            if let dataDict = dict["data"] as? [String:Any],let type = dataDict["type"] as? String{
                print(type)
            }
        }
    }

【讨论】:

  • 为了清楚起见,即使这被接受,这个答案也不能完全回答问题然后当用户点击推送通知时打开应用程序上的特定页面?。这个答案显示了如何从与how can i get key's value from dictionary in Swift? 重复的字典中的键中读取值。标记为重复而不是重新发布相同的信息通常是个好主意。我希望看到完整的问题得到解决,因为这对我更有帮助
【解决方案2】:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent 通知: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    let userInfo = notification.request.content.userInfo

    guard
        let aps = userInfo[AnyHashable("aps")] as? NSDictionary,
        let alert = aps["alert"] as? NSDictionary,
        let body = alert["body"] as? String,
        let title = alert["title"] as? String
        else {
            // handle any error here
            return
        }

    print("Title: \(title) \nBody:\(body)")

    
    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2017-08-16
    • 2020-01-04
    • 2014-05-25
    相关资源
    最近更新 更多