iOS: 是否可以无声推送到通知中心?

iOS: Is it possible to send a push to Notification Center without a sound?

在 Android,我可以发送静默推送并传送到系统托盘。在 iOS,我不确定这是否可行。我从 aps 中删除了 alert 属性,并为 sound 发送了一个空字符串。我看到的是徽章计数静默更新(这很好),但通知中心没有任何内容。那么有没有办法无声无声地向NC发送推送呢?

请注意,我不希望推送在屏幕上弹出(即用户不应该看到它,除非他们在屏幕上向下滑动以显示已交付的内容。换句话说,我正在尝试匹配Android).

上的行为

是的,苹果支持, 推送数据格式为

{
    "aps":{
        "aa":"123",
        "content-available":1
    }
}

重要的关键是这个
"content-available":1

如果您不需要声音,请不要在有效负载中发送 sound 参数。

{
    "aps" : {
        "alert" : "You got your emails.",
        "badge" : 1
    },
    "acme1" : "test"
}

您还可以从 willPresent.. 推入 appdelegate.swift 文件

的方法中删除 .alert.sound
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
    completionHandler([.badge]) //remove .sound, .alert
}

实现你想要做的事情的唯一方法是在请求设备上的通知权限时指定 "provisional",iOS >= 12 支持。这使得通知received 完全无声,只出现在通知中心,不会打扰用户。但是,用户可以自定义此权限并选择 "interrupted" 通知,此权限还将阻止 "interrupting" 用户收到所有其他通知。

如果你想有选择地指定一些通知只进入通知中心,而其他通知发出声音并显示为通知提醒用户,那么你的问题的答案是不,它不是可能。

我不确定我是否理解你的问题。但是如果你只是想向 iOS 发送静默通知,在后台唤醒应用程序并让它处理通知,这是可以做到的,参见 the docs.
本质上,你有

  • 在Signing &中启用远程通知后台模式 目标的功能选项卡,以及
  • 使用仅包含 content-available 键的 aps 字典创建远程通知:

    { "aps" : { "content-available" : 1 }, "key1" : "xxx", "key2" : 123 }

为了接收静默通知,系统会在后台唤醒您的应用。然后它会调用您的应用委托的 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

是的,只发送无声 key.If 你添加空白声音键,那么默认声音肯定会出现,所以不要添加没有声音的键。