【发布时间】:2016-07-19 08:18:33
【问题描述】:
我只想知道如何确定在静默推送中执行什么操作:
这是我发给客户的aps:
"aps": {
"content-available": 1
}
我现在的问题是当我添加type: "Order_Update" 以确定静默推送是为了让订单更新显示警报通知时。
【问题讨论】:
标签: ios swift push-notification apple-push-notifications
我只想知道如何确定在静默推送中执行什么操作:
这是我发给客户的aps:
"aps": {
"content-available": 1
}
我现在的问题是当我添加type: "Order_Update" 以确定静默推送是为了让订单更新显示警报通知时。
【问题讨论】:
标签: ios swift push-notification apple-push-notifications
有几个选项!让我们来了解一下所有不同的有效载荷及其用法。
简单有效负载
在通知中心显示:是
唤醒应用执行后台任务:否
{
"aps" : {
"alert" : "You received simple notification!",
"badge" : 1,
"sound" : "default"
}
}
带有自定义通知声音的负载
在通知中心显示:是
唤醒应用执行后台任务:否
Step 1 :在您的应用程序包中添加自定义通知声音文件(仅限 .wav 或 .aiff 扩展名。例如 notification.wav)。
Step 2 :如下所示配置您的有效负载以播放您的自定义声音
{
"aps" : {
"alert" : "It's a custom notification sound!",
"badge" : 1,
"sound" : "notification.wav"
}
}
带有自定义负载的通知
在通知中心显示:是
唤醒应用执行后台任务:否
{
"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。
在通知中心显示:是
唤醒应用执行后台任务:是
{
"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。我希望这可以为您提供所有必要的信息。快乐编码:)
【讨论】:
applicationDidFinishLauchingWithOptions。在我们的例子中,应用程序从应用程序托盘中被杀死。但是当收到带有content-available 1 有效负载的推送通知时。 applicationDidFinishLauchingWithOptions 被调用。另一个参考:stackoverflow.com/a/34728550/1045672
据我了解,您需要在有效负载中添加额外数据,以便您可以识别推送通知类型是什么,或者需要处理什么操作。
为此,将您的有效负载编辑为:
$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;
}
}
希望这能解决您的问题!
【讨论】:
还请检查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
【讨论】: