【问题标题】:iOS: Is it possible to send a push to Notification Center without a sound?iOS:是否可以在没有声音的情况下向通知中心发送推送?
【发布时间】:2020-06-15 09:57:25
【问题描述】:

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

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

【问题讨论】:

  • 这应该可以工作 {"aps":{"alert":"Hello","badge":1,"category":"your_category_key"}}。基本上你不应该在有效载荷中有声音键。
  • 如果我完全删除声音键,就没有声音了。这很好,但问题是屏幕上仍然会弹出通知。我希望通知直接发送到 NC。我如何做到这一点?
  • 您可以在 AppDelegate 中注册通知时使用此代码,let notificationCenter = UNUserNotificationCenter.current() notificationCenter.requestAuthorization( options:[.badge, .sound, .alert, .provisional]) { }
  • .provisional 将确保通知被悄悄地传递给用户,并将被放置在通知中心。此功能称为临时授权,在 iOS 12 中引入。
  • @lloydTheCoder 您能否确认无法将某些通知设为临时通知而将其他通知设为非临时通知?在 Android 上,我可以使用不同的频道。我很惊讶 iOS 没有提供这个功能。

标签: ios push-notification nsnotificationcenter silentpush


【解决方案1】:

实现您想要做的唯一方法是在设备上询问通知权限时指定“临时”,这在 iOS >= 12 上受支持。这使得收到的通知完全静音并且只出现在通知中心而不打扰用户。不过,用户可以自定义这个,选择被通知“打断”,这个权限也会阻止所有其他通知“打断”用户。

如果您想有选择地指定某些通知仅转到通知中心,而其他通知会发出声音并显示为通知警报给用户,那么您的问题的答案是不,这是不可能的。强>

【讨论】:

  • 谢谢。我只需要知道最后一段。
  • 不客气。如果您不介意将其标记为正确答案。
【解决方案2】:

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

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

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

【讨论】:

  • 我将content-available 设置为1。我还将mutable-content 设置为1。它对我不起作用。我可以拦截didReceiveRemoteNotification 中的推送,但它没有显示在 NC 中。
【解决方案3】:

如果您不想要声音,请不要在有效负载中发送 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
}

【讨论】:

  • 这个我还没试过,不过我以为alert会显示弹窗效果。我也不想要那个。如果我删除它和声音,那么我在通知中心看不到通知。只有徽章得到更新。
  • 那么你可以从willPresentNotification的推送方法中删除.alert.sound
  • 似乎willPresentNotification 仅在应用程序处于前台时才被调用。这是真的?我已经实现了一个自定义UNUserNotificationCenterDelegate。只有在前台推送推送时才会调用该方法。
  • 阅读此处的讨论部分:developer.apple.com/documentation/usernotifications/… 看起来这仅适用于前台。
【解决方案4】:

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

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

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

要接收静默通知,系统会在后台唤醒您的应用。然后它会调用你的应用代理的application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

【讨论】:

    【解决方案5】:

    是的,只发送没有声音键。如果您添加空白声音键,那么默认声音肯定会出现,所以不要添加没有声音的键。

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2015-01-14
      • 2012-05-22
      • 1970-01-01
      • 2014-04-13
      • 2017-07-05
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      相关资源
      最近更新 更多