当应用程序被杀死时,在推送通知后执行操作:react-native,IOS
Posted
技术标签:
【中文标题】当应用程序被杀死时,在推送通知后执行操作:react-native,IOS【英文标题】:Perform action after push notification when app is killed : react-native, IOS 【发布时间】:2017-09-19 15:38:23 【问题描述】:从事 ios react-native 项目。
当应用程序死亡并收到推送通知时 -
我希望应用根据通知的有效负载导航到另一个页面。 当应用程序处于前台或后台时 - 一切正常。 当应用程序被终止时 - 应用程序会自行打开。
下面添加的是我的 Appdelegate.m 代码。 我正在捕获通知并将其记录到控制台,但我不知道如何将其发送到 react-native。
使用 RN 0.46
expo 19(与 ExpoKit 分离)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
_window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
_window.backgroundColor = [UIColor whiteColor];
[[ExpoKit sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
_rootViewController = [ExpoKit sharedInstance].rootViewController;
_window.rootViewController = _rootViewController;
[_rootViewController loadReactApplication];
[_window makeKeyAndVisible];
if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey])
NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (notification)
//logs the notification's payload
NSLog(@"app recieved notification from remote%@",notification);
else
NSLog(@"app did not recieve notification");
return YES;
https://jsfiddle.net/nirbenya/pxojj7qv/
【问题讨论】:
【参考方案1】:要实现这种行为,您需要为您的应用实现某种deep linking。这样你就可以在你的 react-native 应用程序中监听有效载荷并导航到正确的屏幕。 react-navigation 和 react-native-navigation 有自己的深度链接实现。
来自 react-native 文档,
处理深层链接
如果您的应用是从注册到您的应用的外部网址启动的 您可以使用任何您想要的组件访问和处理它
componentDidMount()
Linking.getInitialURL().then((url) =>
if (url)
console.log('Initial url is: ' + url);
).catch(err => console.error('An error occurred', err));
【讨论】:
谢谢,但我的应用不是从外部 URL 启动的。它推出了 @NirBen-Yair 您使用什么服务发送通知? react-native 自带的普通 PushNotificationsIOS。没有什么像一个信号或火力基地那样的定制。我也退出了世博会,我认为这可能是相关的。 那你应该继续实现PushNotificationIOS
API并使用addEventListener
以上是关于当应用程序被杀死时,在推送通知后执行操作:react-native,IOS的主要内容,如果未能解决你的问题,请参考以下文章