gpt4 book ai didi

javascript - 如何使用 react-native 的 PushNotificationIOS.getInitialNotification

转载 作者:行者123 更新时间:2023-11-29 14:40:40 30 4
gpt4 key购买 nike

我正在尝试检测我的 native react 应用程序是否由用户点击推送通知横幅启动(请参阅有关该主题的 this excellent SO answer)。

我已经实现了 Mark 描述的模式,并且发现 PushNotificationIOS.getInitialNotification 提供的“通知”对象真的很奇怪,至少在没有通知的情况下取回。检测这个案例是一个 PITA,我其实很困惑。

据我所知,PushNotificationIOS.getInitialNotification 返回一个 promise ;当没有通知等待用户时,这个 promise 应该用 null 或实际的通知对象 -- null 来解决。这是我试图检测和支持的场景。

这就是为什么检测起来如此痛苦;以下测试都是在没有找到通知的情况下运行的:

// tell me about the object
JSON.stringify(notification);
//=> {}

// what keys does it have?
Object.keys(notification);
//=> [ '_data', '_badgeCount', '_sound', '_alert' ]

所以它字符串化为空,但它有四个键? K...

// tell me about the data, then
JSON.stringify(notification._data);
//=> undefined
// wtf?

这些奇怪的事实让我无法理解和区分有实际通知作出 react 的情况与邮箱为空的情况。基于这些事实,我假设我可以测试我想要的成员,但即使是最仔细的探测也会在 100% 的时间内产生误报:

PushNotificationIOS.getInitialNotification()
.then((notification) => {

// usually there is no notification; don't act in those scenarios
if(!notification || notification === null || !notification.hasOwnProperty('_data')) {
return;
}

// is a real notification; grab the data and act.

let payload = notification._data.appName; // TODO: use correct accessor method, probably note.data() -- which doesn't exist
Store.dispatch(Actions.receivePushNotification(payload, true /* true = app was awaked by note */))
});

每次我运行此代码时,它都无法触发逃生舱口并抛出 let payload 因为 undefined 不是对象(正在评估“notification._data.appName”).

有人能解释一下这是怎么回事吗? PushNotificationIOS.getInitialNotification 损坏或弃用了吗?在 JS 中怎么可能有一个评估为未定义的键?我怎样才能检测到这种情况?

有经验的javascripter,在这里很困惑。感谢您的帮助。

顺便说一句:使用 react-native v0.29.0

最佳答案

通知an instance of PushNotification,不是一个普通对象,这就是为什么它被字符串化为一个空对象,因为没有为它实现自定义 toString。

在没有可用通知时创建对象对我来说听起来像是一个错误(如果尚未报告则应该报告)。

无论如何,要解决此问题,您的检查实际上应该是:

if(!notification || !notification.getData()) {
return;
}

更新:问题已在 0.31 中得到修复 - 请参阅 Github issue了解更多详情。

关于javascript - 如何使用 react-native 的 PushNotificationIOS.getInitialNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645181/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com