0

我有一个使用 Pushy ( https://pushy.me ) 处理推送通知的 Capacitor/Cordova 应用程序。向设备发送推送通知似乎工作正常,作为该事务的一部分,我可以在应用程序关闭时在图标上设置应用程序的通知计数。

但是,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 进行测试只是为了看看会发生什么,理想情况下我想将一个整数传递给那个新破解的函数)。

所以到目前为止我学到的是我对 Swift 一无所知。

我在这方面有点正确,还是有更好的方法来设置徽章计数器?

4

1 回答 1

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 值)。

于 2020-08-25T16:41:27.493 回答