React Native 0.44 PushNotifcationIOS.scheduleLocalNotification 在模拟器中处理 JavaScript Date 对象,而不是在设备上

Posted

技术标签:

【中文标题】React Native 0.44 PushNotifcationIOS.scheduleLocalNotification 在模拟器中处理 JavaScript Date 对象,而不是在设备上【英文标题】:React Native 0.44 PushNotifcationIOS.scheduleLocalNotification handles JavaScript Date objects in simulator, not on devices 【发布时间】:2017-09-07 20:15:18 【问题描述】:

反应原生:0.44.3

目标平台:ios

开发操作系统:macOS Sierra 10.12.4

构建工具:XCode

这种行为会导致一个非常令人困惑的错误,即计划通知在模拟器上按预期工作,但在设备上却以一种非常神秘的方式失败。

重现:

安排未来一分钟的本地通知:

PushNotificationIOS.scheduleLocalNotification( 
  fireDate: new Date(Date.now() + 60 * 1000), 
  alertBody: 'message'
);

在模拟器中运行这个构建(默认情况下这是一个调试构建,除非你弄乱了设置,我相信)

观察您的通知是否按预期安排。

通过 XCode 在您的设备上将此构建作为 Debug 构建运行(编辑您的方案,以便 Run 使用 Debug 而不是 Release)

在您尝试安排通知时观察崩溃

在您的设备上将其作为发布版本运行。

观察通知立即触发(请注意,如果计划的通知被分配了空日期或已过的日期,这是预期的 iO​​S 行为。)

请注意,为了观察立即触发的通知,您必须设置一个侦听器来处理它并提供反馈。如果其关联的应用程序在前台(AppState:'active'),则似乎不会在 iOS 上显示本地通知。

【问题讨论】:

【参考方案1】:

为了解决这个问题,请将您的 Date 对象转换为 Unix 时间。此示例将 fireDate 设置为未来一分钟:

let fireDate = new Date(Date.now() + 60 * 1000).getTime();

日期对象不能通过 RCT 桥,必须转换为字符串或数字。

但是,请注意,在 Date 对象上调用 toString() 也不起作用。推荐的解决方案是使用 getTime() 来获取 Unix 时间戳

【讨论】:

以上是关于React Native 0.44 PushNotifcationIOS.scheduleLocalNotification 在模拟器中处理 JavaScript Date 对象,而不是在设备上的主要内容,如果未能解决你的问题,请参考以下文章

React Native 0.44 PushNotifcationIOS.scheduleLocalNotification 在模拟器中处理 JavaScript Date 对象,而不是在设备上

[React Native][IOS] 应用被通知打开时如何捕捉事件

windows下 react-native环境搭建

react-native init 指定 react 版本和 react-native 版本

添加 React-Native-Camera 和 React-Native-Push-Notification 后无法构建 React Native

react native 增加react-native-camera