是否可以在 iOS 中安排 SILENT 本地通知?

Posted

技术标签:

【中文标题】是否可以在 iOS 中安排 SILENT 本地通知?【英文标题】:Is it possible to schedule a SILENT local notification in iOS? 【发布时间】:2016-08-02 20:11:26 【问题描述】:

我正在尝试在本地安排通知,因为我在后端还没有必要的结构。这个想法是,在 X 段时间后,某些条件得到验证;如果满足,则会触发常规的本地通知。

这可以通过使用计时器轻松实现,但其中一些时间段足够长(1 小时、24 小时),这不起作用。

这就是我最终在本地通知中思考的方式。我可以安排一个 +24 小时的开火时间。问题是我需要保持沉默以验证条件。

configuring a local notification 部分here 看来,只有远程通知可以静音,但并没有真正说不能这样做。

另外,我发现可以触发本地通知,只需要徽章编号,它会更改徽章。虽然我的 AppDelegate 中的回调从未被调用过。

我看到有些人说不能这样做,但还没有找到真正确凿的官方证据来说明这一点。有人设法做到这一点吗?或者确定这实际上是不可能的?任何建议都会有很大帮助,提前非常感谢!

【问题讨论】:

你不能有一个“静默”的本地通知。后台获取模式可能有用 @Paulw11 是的,但它只适用于远程通知,对吧?没有远程通知就没有办法唤醒应用吗? 后台获取模式与通知无关。这是一种后台模式,您可以选择让 ios 定期唤醒您的应用。阅读 iOS 应用程序编程指南中的后台模式部分 没错。您无法安排在特定时间执行。您可以使用后台获取时间来安排特定时间的本地通知。如果您想在特定时间触发后台执行,那么您唯一的选择是发送静默推送的服务器 对...所以总结一下,我可以通过后台执行进行静默执行,但我无法将其安排到特定时间。我可以将本地通知安排到特定时间,但它们不能保持沉默。因此,我将不得不设置远程推送通知,因为它们可以被安排和静默。谢谢! 【参考方案1】:

我尝试过并有与您相同的体验 - 当我的应用不在前台时,永远不会调用回调。这是设计使然。 Apple 文档指出,只有当您的应用处于前台时才会调用回调userNotificationCenter:willPresentNotification:withCompletionHandler:https://developer.apple.com/reference/usernotifications/unusernotificationcenterdelegate/1649518-usernotificationcenter?language=objc

当应用程序不在前台时接收通知的唯一回调方法是didReceiveRemoteNotification,但不幸的是它仅用于推送通知(静默或其他方式)。 https://developer.apple.com/reference/usernotifications/unusernotificationcenterdelegate/1649518-usernotificationcenter?language=objc

【讨论】:

所以你的意思是当你的应用在前台时调用回调? 我在那个应用程序上工作已经有 2 年了,但当时,是的,当应用程序处于前台时它可以工作。较新版本的 iOS 可能会破坏这一点。

以上是关于是否可以在 iOS 中安排 SILENT 本地通知?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 10 中安排和处理本地通知

在 PhoneGap/Cordova 中安排本地通知在 iOS 模拟器上不起作用

在后台任务中安排通知

如何在 Windows Phone 应用程序 8.1 rt 中安排本地通知?

处理本地通知点击 Xamarin Forms iOS

在本机反应中安排本地通知不起作用