gpt4 book ai didi

ios - 当应用程序在后台时使用 React Native 静默 iOS 推送通知

转载 作者:技术小花猫 更新时间:2023-10-29 10:51:19 28 4
gpt4 key购买 nike

我有一个 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 代码?

最佳答案

为了让通知在后台到达您的应用程序,您还需要定义一个 fetchCompletionHandler,它具有如下所示的完成处理函数。 aps:{content-available:1} 负载应该唤醒您的应用程序并在您的 AppDelegate 中触发此代码,然后在 RN 中触发您的 JavaScript。

// fetch notifications in the background and foreground
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

[RCTPushNotificationManager didReceiveRemoteNotification:notification];
completionHandler(UIBackgroundFetchResultNewData);
NSLog(@"Notification Body %@", notification);

}

关于ios - 当应用程序在后台时使用 React Native 静默 iOS 推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36740143/

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