ios - 从 IOS 上的通知操作按钮打开特定应用程序?

标签 ios objective-c localnotification

我正在使用 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/

相关文章:

iphone - iOS 5 在现有应用程序中使用 Storyboards 实现页面 Controller

ios - Swift 3 转换 NSClassFromString 需要一个 ","分隔符

ios - 如何根据 iPhone 中的 Internet 连接可用性来触发 LocalNotification?

ios - UITableViewController 不显示自定义原型(prototype)单元格

Objective-C - iOS - 类方法行为不正常

ios - 取消具有重复间隔的 UILocalNotification

iphone - UILocalNotification 每分钟重复一次

ios - 如何在 CoreData 中监听特定实体的保存/更新

ios - UITableView 在 UICollectionView 中

objective-c - 设置UILABEL的初始值