Выберите отображаемые аргументы push-уведомления - PullRequest
1 голос
/ 28 июня 2019

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

{
    "aps" : {
        "alert" : {
            "loc-key" : "localized_pn_text",
            "loc-args" : [ "France", "Frank"]
        },
        "sound" : "chime.aiff"
    },
    "acme" : "foo"
}

В моем Localizable.strings теперь я могу добавить строку с ключом "localized_pn_text" для локализации push-уведомления.

Есть ли способ заказать или выбрать определенный параметр.Например, я могу показать "Frank, you got a push notification" как локализованный текст?

Ответы [ 3 ]

2 голосов
/ 28 июня 2019

У вас есть два варианта:

  1. добавьте "localized_pn_text" = "%@, you got a push notification" в ваш Localizable.strings, а затем отправьте только "Фрэнк" как "loc-args" ("loc-args" : [ "Frank"])

  2. Реализация Расширения службы уведомлений для перехвата push-уведомлений и программного создания его содержимого, приведенного ниже примера:

class NotificationService: UNNotificationServiceExtension {

    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 {
            handleContent(bestAttemptContent: bestAttemptContent)

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            handleContent(bestAttemptContent: bestAttemptContent)

            contentHandler(bestAttemptContent)
        }
    }

    func handleContent(bestAttemptContent: UNMutableNotificationContent) {
        if let data = bestAttemptContent.userInfo as? [String: Any], let aps = bestAttemptContent.userInfo["aps"] as? [String: Any], let alert = aps["alert"] as? [String: Any] {
            if let locKey = alert["loc-key"] as? String, let locArgs = alert["loc-args"] as? [String] { 
                bestAttemptContent.body = //Uptaded notification text
            }
        }
    }
}
0 голосов
/ 28 июня 2019

На самом деле, вы можете выбрать параметры с помощью %<parameter index starting with 1>$@

Например, я могу записать это в файл Localizable.strings: "localized_pn_text" = "%2$@, you got a push notification"

0 голосов
/ 28 июня 2019

Вы можете просто добавить пользовательские ключи в dictionary как,

{
    "aps" : {
        "alert" : {
            "loc-key" : "localized_pn_text",
            "loc-args" : [ "France", "Frank"]
        },
        "sound" : "chime.aiff"
    },
    "acme" : "foo",
    "customText": "Frank, you got a push notification"
}

Считайте значение customText, используя,

if let customText = notification.request.content.userInfo["customText"] as? String {
    print(customText)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...