Изменение количества уведомлений о значках с помощью Pushy in Capacitor / Cordova на iOS

#swift #cordova #capacitor #pushy

#swift #кордова #конденсатор #pushy

Вопрос:

У меня есть приложение Capacitor / Cordova, использующее Pushy (https://pushy.me ) для обработки push-уведомлений. Отправка push-уведомлений на устройства, похоже, работает нормально, и в рамках этой транзакции я могу установить количество уведомлений приложения на значке, когда приложение закрыто.

Однако, похоже, что у Pushy есть только опция JS для очистки счетчика Pushy.clearBadge(); , а не изменения его на определенное число из приложения во время его запуска. Сценарий заключается в том, что пользователь прочитал одно сообщение, но оставил два непрочитанными, а затем закрыл приложение, я хочу, чтобы счетчик был правильным.

Копаясь в коде PushyPlugin.swift, функция для Pushy.clearBadge(); выглядит следующим образом:

 @objc(clearBadge:)
func clearBadge(command: CDVInvokedUrlCommand) {
    // Clear app badge
    UIApplication.shared.applicationIconBadgeNumber = 0;
    
    // Always success
    self.commandDelegate!.send(
        CDVPluginResult(
            status: CDVCommandStatus_OK
        ),
        callbackId: command.callbackId
    )
}
  

Это соблазнительно близко к тому, чтобы дать мне то, что мне нужно, если бы только я мог передать целое число, отличное от нуля в этой строке UIApplication.shared.applicationIconBadgeNumber = 0;

Мои знания о Swift ничтожны, кроме распознавания знакомого синтаксиса программирования. Я подумал, что смогу взломать это, и попытался добавить это в файл PushyPlugin.swift:

 @objc(setBadge:)
func setBadge(command: CDVInvokedUrlCommand) {
    // Clear app badge
    UIApplication.shared.applicationIconBadgeNumber = 100;
    
    // Always success
    self.commandDelegate!.send(
        CDVPluginResult(
            status: CDVCommandStatus_OK
        ),
        callbackId: command.callbackId
    )
}
  

Но приложение закашлялось Pushy.setBadge is not a function , когда я попытался включить это (обратите внимание, я тестировал со 100, просто чтобы посмотреть, что произойдет, в идеале я хотел бы передать целое число в эту недавно взломанную функцию in).

Итак, что я узнал до сих пор, я ничего не знаю о Swift.

Я вроде как на правильном пути с этим, или есть лучший способ установить счетчик значков?

Ответ №1:

Хорошо, итак, я обнаружил в папке pushy-cordova / www Pushy.js файл, в который мне нужно было добавить мою новую функцию

 {
    name: 'setBadge',
    noError: true,
    noCallback: true,
    platforms: ['ios']
},
  

Затем, немного проб и ошибок с функцией PushyPlugin.swift, которую я добавил к этому:

 @objc(setBadge:)
func setBadge(command: CDVInvokedUrlCommand) {
    
    UIApplication.shared.applicationIconBadgeNumber = command.arguments[0] as! Int;
    
    // Always success
    self.commandDelegate!.send(
        CDVPluginResult(
            status: CDVCommandStatus_OK
        ),
        callbackId: command.callbackId
    )
}
  

Затем это можно вызвать в моем проекте Capacitor с помощью Pushy.setBadge(X); (X — это значение int, которое вы хотите отобразить на своем значке).

Комментарии:

1. Отличная работа — К вашему сведению, этот метод Pushy.setBadge(int) теперь является частью Pushy Cordova SDK, начиная с версии 1.0.40 и выше.