我正在使用 UserNotification 框架为带有本地通知的 IOS 应用程序(具有 Objective-C )开发一项功能。
到目前为止,我已经能够安排通知并且它可以正确显示。当我遇到可操作通知类型(带有类别和操作)的问题时,我设法显示带有操作的通知。我实际上可以正确实现 UNUserNotificationCenterDelegate
并验证是否正在调用 didReceiveNotificationResponse
方法,而且确实如此。但我的问题是我试图使用像这样的 URL 方案从那里打开 map 应用程序
- (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
参数上为我提供 0。但是,当我在我的应用程序(前台应用程序)中的按钮中尝试此操作时,这实际上有效。
所以我的问题是:
有没有办法让我可以从通知中的操作按钮打开不同的应用程序(从安排通知的位置),而不仅仅是 map ,我的意思是,无论应用程序已关闭或在后台,任何应用程序都可以?
我说的是关闭应用程序,但苹果文档说,当用户选择并执行操作时,系统会在后台启动应用程序并通知共享的 UNUserNotificationCenter 对象,该对象又通知其委托(delegate)。所以它不会真正关闭(不运行)。
最佳答案
我刚刚找到了解决方案。在定义通知操作时,您可以设置操作标识符、标题和选项。 options arg 需要有 UNNotificationActionOptionForeground
选项,根据 Apple 文档,这将导致应用程序在前台打开,然后在 didReceiveNotificationResponse 方法中,如果您有 openURL,您将根据以下内容重定向到应用程序或 safari url 架构。
关于ios - 从 IOS 上的通知操作按钮打开特定应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58467181/