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)
在您尝试安排通知时观察崩溃
在您的设备上将其作为发布版本运行。
观察通知立即触发(请注意,如果计划的通知被分配了空日期或已过的日期,这是预期的 iOS 行为。)
请注意,为了观察立即触发的通知,您必须设置一个侦听器来处理它并提供反馈。如果其关联的应用程序在前台(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] 应用被通知打开时如何捕捉事件
react-native init 指定 react 版本和 react-native 版本
添加 React-Native-Camera 和 React-Native-Push-Notification 后无法构建 React Native