Как получить временную метку push-уведомления в Swift? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь получить данные push-уведомления. Я могу получить заголовок и текст, но я также пытаюсь получить временную метку.

Я получаю такие данные, как

   func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
        // Print full message.

        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)")

        completionHandler()
    }

есть ли способ получить метку времени в самой полезной нагрузке push-уведомления или каким-либо другим способом?

1 Ответ

1 голос
/ 29 мая 2020

Вы должны добавить пользовательские данные timestamp в полезную нагрузку Push Notification.

Обычно полезная нагрузка выглядит так:

{
    "aps":{
        "alert":{
            "title":"Hello",
            "body":"How are you?"
        },
        "badge":0,
        "sound":"default"
    }
}

Если вы хотите добавить настраиваемые поля в полезную нагрузку, она должна выглядеть так ->

{
    "aps":{
        "alert":{
            "title":"Hello",
            "body":"How are you?"
        },
        "badge":0,
        "sound":"default"
    },
    "timestamp": "1590736069"
}

Настраиваемые поля должны располагаться вне объекта aps.

Пожалуйста, проверьте это -> Документация Apple


Затем вам нужно его проанализировать

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    let userInfo = response.notification.request.content.userInfo
    // Print full message.

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

    print("Title: \(title) \nBody:\(body)")
    print("Timestamp is: \(timestamp)")
    completionHandler()
}

Примечание: Не нужно использовать AnyHashable для использования строки в качестве ключа. Используйте, например, userInfo["aps"]


Получение метки времени текущей даты

Если вам нужно знать дату получения уведомления, вы можете просто получить текущее значение метки времени Date вот так ->

// Declare this in `didReceive` method and now you know the timestamp of notification received date
let timestamp = Date().timeIntervalSince1970
...