在 Android 上,我可以发送一个静默推送,该推送被传递到系统托盘。在 iOS 上,我不确定这是否可行。我alert
从 中删除了该属性aps
,并且我正在为 发送一个空字符串sound
。我看到的是徽章计数是静默更新的(这很好),但通知中心没有任何内容。那么有没有办法在没有声音的情况下向 NC 发送推送?
请注意,我不希望推送在屏幕上弹出(即用户不应该看到它,除非他们在屏幕上向下滑动以显示已交付的内容。换句话说,我正在尝试匹配 Android 上的行为) .
在 Android 上,我可以发送一个静默推送,该推送被传递到系统托盘。在 iOS 上,我不确定这是否可行。我alert
从 中删除了该属性aps
,并且我正在为 发送一个空字符串sound
。我看到的是徽章计数是静默更新的(这很好),但通知中心没有任何内容。那么有没有办法在没有声音的情况下向 NC 发送推送?
请注意,我不希望推送在屏幕上弹出(即用户不应该看到它,除非他们在屏幕上向下滑动以显示已交付的内容。换句话说,我正在尝试匹配 Android 上的行为) .
是的,苹果支持,推送数据格式为
{
"aps":{
"aa":"123",
"content-available":1
}
}
重要的关键是这个
“内容可用”:1
如果您不想要声音,请不要sound
在有效负载中发送参数。
{
"aps" : {
"alert" : "You got your emails.",
"badge" : 1
},
"acme1" : "test"
}
您也可以从推入文件的方法中删除.alert
和删除.sound
willPresent..
appdelegate.swift
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
completionHandler([.badge]) //remove .sound, .alert
}
实现您想要做的唯一方法是在设备上询问通知权限时指定“临时”,这在 iOS >= 12 上受支持。这使得收到的通知完全静音并且只出现在通知中心在不打扰用户的情况下。但是,用户可以对此进行自定义并选择被通知“打断”,并且该权限还将阻止所有其他通知“打断”用户。
如果您想有选择地指定某些通知仅转到通知中心,而其他通知则发出声音并显示为通知警报给用户,那么您的问题的答案是否定的,这是不可能的。
我不确定我是否理解你的问题。但是,如果您只想向 iOS 发送静默通知,请在后台唤醒应用程序并让它处理通知,可以这样做,请参阅文档。
本质上,你有
content-available
使用仅包含密钥的 aps 字典创建远程通知:
{
"aps" : {
"content-available" : 1
},
"key1" : "xxx",
"key2" : 123
}
为了接收静默通知,系统将在后台唤醒您的应用程序。然后它调用您的应用程序委托的application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
是的,只需在没有声音键的情况下发送它。如果您添加空白声音键,那么默认声音也肯定会出现,所以不要添加没有声音的键。