【发布时间】:2016-04-20 09:55:24
【问题描述】:
我有一个 React Native 应用程序,我试图将静默 iOS 推送通知发送到 JavaScript 中的处理程序。
我看到的行为是 AppDelegate 中的 didReceiveRemoteNotification 函数被调用,但我在 JavaScript 中的处理程序不会被调用,除非应用程序在前台或最近才关闭。
我感到困惑的是,应用程序显然被唤醒并调用了 didReceiveRemoteNotification 函数,但随后对 [RCTPushNotificationManager didReceiveRemoteNotification:notification] 的调用似乎没有做任何事情。
另外,如果我在收到通知后打开应用程序,我会看到 React Native 处理程序在此时被调用。
我的didReceiveRemoteNotification 函数如下所示:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
{
NSLog(@"didReceiveRemoteNotification");
[RCTPushNotificationManager didReceiveRemoteNotification:notification];
}
在我的 React Native 应用程序的根组件中,我有这个:
componentDidMount() {
AppState.addEventListener('change', this.handleAppStateChange);
PushNotificationIOS.addEventListener('notification', (notification) => {
console.log("notification recieved");
})
}
handleAppStateChange(currentAppState) {
console.log(currentAppState);
}
我正在使用 AWS SNS 发送带有以下消息的推送通知:
{
"APNS_SANDBOX":"{\"aps\":{\"content-available\":\"1\"}}"
}
这是来自 XCode 的日志:
2016-04-20 10:38:01.255 [info][tid:com.facebook.React.JavaScript] inactive
2016-04-20 10:38:01.986 [info][tid:com.facebook.React.JavaScript] background
2016-04-20 10:38:17.279 test[4056:1383261] didReceiveRemoteNotification
2016-04-20 10:38:17.284 [info][tid:com.facebook.React.JavaScript] notification recieved
2016-04-20 10:44:56.330 test[4056:1383261] didReceiveRemoteNotification
2016-04-20 10:44:56.332 [info][tid:com.facebook.React.JavaScript] notification recieved
2016-04-20 10:46:07.091 test[4056:1383261] didReceiveRemoteNotification
2016-04-20 10:49:30.039 [info][tid:com.facebook.React.JavaScript] notification recieved
2016-04-20 10:49:30.639 [info][tid:com.facebook.React.JavaScript] active
在此日志中,发送了 3 个推送通知。 10:38 和 10:44 收到的都正确调用了 JavaScript。 但是,直到我在 10:49 打开应用程序之前,在 10:46 收到的那个并没有调用 JavaScript 中的处理程序。
我能做些什么来确保即使在应用未运行的情况下也能调用我的 React Native 代码?
【问题讨论】:
标签: ios push-notification react-native