react-native:0.44.3
目标平台:iOS
开发操作系统:macOS Sierra 10.12.4
构建工具:XCode
这种行为会导致一个非常令人困惑的错误,即计划通知在模拟器上按预期工作,但在设备上以非常神秘的方式失败。
要重现:
将来安排本地通知一分钟:
PushNotificationIOS.scheduleLocalNotification({
fireDate: new Date(Date.now() + 60 * 1000),
alertBody: 'message'
});
在模拟器中运行此构建(默认情况下,这是一个Debug构建,除非你搞乱设置,我相信)
观察您的通知按预期进行安排。
通过XCode在您的设备上运行此构建作为Debug构建(编辑您的方案,以便Run使用Debug而不是Release)
在您尝试安排通知时观察崩溃
在您的设备上将其作为发布版本运行。
观察通知立即触发(请注意,如果为预定通知指定了空日期或已经过的日期,则这是预期的iOS行为。)
请注意,为了观察立即触发的通知,您必须设置一个侦听器来处理它并提供反馈。如果其关联的应用程序位于前台(AppState:'active'),则iOS上似乎不会显示本地通知。
答案 0 :(得分:2)
为了解决这个问题,请将Date对象转换为Unix时间。此示例将fireDate设置为将来一分钟:
let fireDate = new Date(Date.now() + 60 * 1000).getTime();
日期对象无法通过RCT桥传递,必须转换为字符串或数字。
但是,请注意,在Date对象上调用toString()也不起作用。建议的解决方案是使用getTime()来获取Unix时间戳。