我有一个 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:46接收到的通知直到我在10:49打开应用程序之前才调用JavaScript处理程序。
有什么方法可以确保即使应用程序未运行,也能调用我的React Native代码吗?