#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
и выше.