无声推送通知有效负载

时间:2016-03-31 04:01:36

标签: ios swift push-notification

我只是想问一下如何确定在静音推动中采取的行动:

这是我发给客户的aps:

aps
{
content-available: 1
}

我现在的问题是当我添加type:" Order_Update"要确定静默推送是针对订单更新,它会显示警报通知

3 个答案:

答案 0 :(得分:68)

有几种选择!让我们花一点时间来了解所有不同的有效载荷及其使用情况。

简单有效负载

显示在通知中心:是

唤醒app执行后台任务:否

{
    "aps" : {
        "alert" : "You received simple notification!",
        "badge" : 1,
        "sound" : "default"
    }
}

自定义通知声音的有效负载

显示在通知中心:是

唤醒app执行后台任务:否

Step 1:在您的应用包中添加自定义通知声音文件(仅限.wav或.aiff扩展名。例如notification.wav)。

Step 2:如下所示配置有效负载以播放自定义声音

{
    "aps" : {
        "alert" : "It's a custom notification sound!",
        "badge" : 1,
        "sound" : "notification.wav"
    }
}

使用自定义有效负载进行通知

显示在通知中心:是

唤醒app执行后台任务:否

{
    "aps" : {
        "alert" : "It's a notification with custom payload!",
        "badge" : 1,
        "content-available" : 0         
    },
    "data" :{
        "title" : "Game Request",
        "body" : "Bob wants to play poker",
        "action-loc-key" : "PLAY"
    },

}

此处data字典可随意保存自定义信息。它还将显示为正常通知,并显示警告消息“这是带有自定义有效负载的通知!”。

正常无声通知

它不会显示警报作为通知栏;它只会通知您的应用有一些新数据可用,提示应用获取新内容。

显示在通知中心:否

唤醒应用以执行后台任务:是

{
    "content-available" : 1
}

使用自定义有效负载的无声通知

这里有魔术显示通知警报以及在后台唤醒您的应用程序的任务! (注意:只有当它在后台运行并且没有被用户明确杀死时。) 只需在您的有效负载中添加额外参数"content-available" : 1

显示在通知中心:是

唤醒app执行后台任务:是

{
    "aps" : {
        "alert" : "Notification with custom payload!",
        "badge" : 1,
        "content-available" : 1
    },
     "data" :{
        "title" : "Game Request",
        "body" : "Bob wants to play poker",
        "action-loc-key" : "PLAY"
     }
}

根据您的应用要求使用任何这些有效负载。对于background app refresh,请参阅Apple's documentation。我希望这能为您提供所有必要的信息。快乐的编码:)

答案 1 :(得分:0)

据我了解,您希望在有效负载内部有额外数据,因此您可以确定推送通知类型是什么,或者需要处理哪些操作。

为此编辑您的有效负载:

 $body = array(
    'content-available' => 1,
    'sound' => ''
    );  

$payload = array();
$payload['aps'] = $body;
$payload['action'] = 'order_update';

然后在您的iOS代码中:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{


    NSString *action = userInfo["action"];


    if([userInfo[@"aps"][@"content-available"] intValue]== 1 && [action isEqualToString:@"order_update") //order update notification
    {
        //handle Your Action here
        return;
    }


}

希望这能解决你的问题!

答案 2 :(得分:0)

另请检查 apns-push-type(watchOS 6 及更高版本需要;推荐用于 macOS、iOS、tvOS 和 iPadOS)此标头的值必须准确反映通知负载的内容。如果存在不匹配,或者所需系统上缺少标头,APN 可能会返回错误、延迟通知的传递或完全丢弃它。 https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns