从 IOS 上的通知操作按钮打开特定应用程序?
Posted
技术标签:
【中文标题】从 IOS 上的通知操作按钮打开特定应用程序?【英文标题】:open an especific app from notification Action Button on IOS? 【发布时间】:2019-10-19 19:16:34 【问题描述】:我正在使用 UserNotification 框架为带有本地通知的 ios 应用程序(带有目标 C)开发一项功能。
到目前为止,我已经能够安排一个通知并且它可以正确显示。当我遇到可操作通知类型(带有类别和操作)的问题时,我设法显示带有操作的通知。我实际上可以正确实现UNUserNotificationCenterDelegate
并验证是否正在调用didReceiveNotificationResponse
方法,并且确实如此。但我的问题是我试图使用这样的 URL 方案从那里打开地图应用程序
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler
NSString * mapsURL = @"http://maps.apple.com/?saddr=35.6813023,139.7640529&daddr=33.4657901,132.6201192";
//if ( [response.actionIdentifier isEqualToString:@"GoToMaps" ])
//Display the map with URL
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mapsURL] options:@ completionHandler:^(BOOL success)
NSLog(@"BOOL value: %d",success);
];
//
completionHandler();
注意:我正在模拟器中测试这个应用程序。
但这不起作用,因为当应用程序处于后台时,这会给我在 success
arg 上的 0。但是当我在我的应用程序(前台应用程序)中的一个按钮中尝试这个时,这实际上是有效的。
所以我的问题是:
有没有一种方法可以让我从通知中的操作按钮打开不同的应用程序(从安排通知的位置),而不仅仅是地图,我的意思是,无论应用程序是否关闭或在后台运行?
我说的是关闭的应用程序,但苹果的文档说,当用户选择并采取行动时,系统会在后台启动应用程序并通知共享的 UNUserNotificationCenter 对象,该对象会通知其代表。所以它不会真正关闭(不运行)。
【问题讨论】:
我一直在研究。我发现如果它不在前台,则无法从另一个打开带有 URL 架构的应用程序 【参考方案1】:我刚刚找到了解决方案。在定义通知操作的那一刻,您设置了 actionIdenfier、标题和选项。选项 arg 需要有 UNNotificationActionOptionForeground
选项,根据 Apple 文档,这将导致应用程序在前台打开,然后在 didReceiveNotificationResponse 方法中,如果您有 openURL,您将根据 url 架构重定向到应用程序或 safari。
【讨论】:
以上是关于从 IOS 上的通知操作按钮打开特定应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
Swift IOS:从通知打开应用程序时调用 UIviewController 的特定功能
如何在此扩展程序中创建一个按钮,在不使用操作按钮的情况下在主应用程序中打开特定视图?
iOS 8 推送通知操作按钮 - 当应用程序在后台时,handleActionWithIdentifier 中的代码并不总是运行