ios - Cordova 推送通知操作

标签 ios cordova notifications

Cordova 当然有发送推送通知的选项,但是是否有任何插件能够直接向通知添加操作?

我尝试搜索“交互式通知”和“通知操作”插件,但没有找到任何结果。我还尝试查看 API reference for phonegap-plugin-push但没有找到合适的选项或方法。

我正在寻找的一个例子是当 iMessage 允许用户甚至不打开应用程序就可以回复文本时发生的情况:

iOS push notification action

任何 Cordova 插件都可以向推送通知添加操作吗?

最佳答案

您的通知可以包含操作按钮。对于 iOS 8+,您必须在初始化插件时设置可能的操作:

var push = PushNotification.init({
    "ios": {
        "sound": true,
        "vibration": true,
        "badge": true,
        "categories": {
            "invite": {
                "yes": {
                    "callback": "app.accept", "title": "Accept", "foreground": true, "destructive": false
                },
                "no": {
                    "callback": "app.reject", "title": "Reject", "foreground": true, "destructive": false
                },
                "maybe": {
                    "callback": "app.maybe", "title": "Maybe", "foreground": true, "destructive": false
                }
            },
            "delete": {
                "yes": {
                    "callback": "app.doDelete", "title": "Delete", "foreground": true, "destructive": true
                },
                "no": {
                    "callback": "app.cancel", "title": "Cancel", "foreground": true, "destructive": false
                }
            }
        }
    }
});

您会注意到我们在初始化代码的 iOS 对象中添加了一个名为类别的新参数。每个类别都是一个命名对象,在本例中为 invite 和 delete。如果您希望显示操作按钮,这些名称将需要与您通过有效负载发送到 APNS 的名称相匹配。每个类别最多可以有三个按钮,这些按钮必须标记为是、否和可能。反过来,这些按钮中的每一个都有四个属性,回调您要调用的 javascript 函数,标题按钮的标签,前景是否将您的应用程序带到前台和破坏性的,它实际上不会做任何破坏性的事情,它只是颜色红色按钮警告用户该操作可能具有破坏性。

就像后台通知一样,在成功处理按钮回调后调用 push.finish() 是绝对重要的。例如:

app.accept = function(data) {
    // do something with the notification data

    push.finish(function() {
        console.log('accept callback finished');
    }, function() {
        console.log('accept callback failed');
    }, data.additionalData.notId);    
};

您可能会注意到 finish 方法现在接受成功、失败和 id 参数。 id 参数让操作系统知道要停止哪个后台进程。您将在下一步中设置它。

然后您需要在 aps 负载中设置类别值以匹配类别对象中的对象之一。您还应该在有效负载对象的根目录中设置一个 notId 属性。这是您传递给 finish 方法的参数,目的是告诉操作系统推送事件的处理已完成。

{
    "aps": {
        "alert": "This is a notification that will be displayed ASAP.",
        "category": "invite"
    },
    "notId": "1"
}

如果您的用户点击通知的主体,您的应用将被打开。但是,如果他们单击任一操作按钮,应用程序将打开(或启动)并执行指定的 JavaScript 回调。

Note: Action buttons are only supported on iOS when you send directly to APNS. If you are using GCM to send to iOS devices you will lose this functionality.

我刚刚把文档贴在https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#action-buttons-1

关于ios - Cordova 推送通知操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35784660/

相关文章:

ios - 使用 Objective C 从文本字段中输入的文本更改导航栏标题

ios - 如果 UITextField 和 UITextView 在 Swift 中为空,则禁用 UIButton

ios - Meteor GoogleMaps.load() 无法在 iOS 上使用 Iron

javascript - 在 Ionic 中为外部 API 处理重定向 Uri

email - TeamCity - 为特定项目自定义电子邮件通知

android - 通知区 "clear all"按钮回调

ios - 宏或字符串常量哪个更好?

ios - 关闭由推送通知呈现的 viewController

android - 将 AIR Android p12 keystore 文件迁移到 Cordova

java - 向运行应用程序的每个人发送通知,Android