ios - 通过 didFinishLaunchingWithOptions 通过远程推送启动应用程序时延迟 openURL

标签 ios apple-push-notifications grand-central-dispatch nsoperationqueue

这是我的应用场景:当用户滑动通知时,我将通过 URL 启动其他一些应用。 所以它基本上在通知到达时启动一些其他应用

目前处理滑动通知场景,什么时候

- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)

方法被调用,在这个方法中,我调用了processNotification:方法,它包含:

...
[[UIApplication sharedApplication] openURL:url];
...
  • 如果在应用程序处于事件状态时收到推送url 可以正常打开。
  • 如果通过滑动或点击通知收到推送url 会在后台打开,但当前查看的应用程序是我的应用程序。例如,如果我的 urltel:123-456-7890,iOS 开始通话(您可以听到声音)但事件应用不是 Phone.app ,这是我的应用程序。

我觉得这很奇怪。但是,如果我等待 UI 加载,然后调用 processNotification:,它会正确显示 Phone.app 窗口。 (平台错误?因为调用发生了,但我的用户界面在顶部。)

我需要一种方法来延迟执行此 processNotification: 调用(可能通过操作队列),直到加载 View Controller 。否则,我的应用程序会保持在最前面,而 ​​URL 会在后台打开。

最佳答案

我遇到了同样的问题,我将 openURL 移到了 main_queue 中,它似乎工作正常。我什至不必在 didBecomeActive

中进行更改
dispatch_async(dispatch_get_main_queue(), ^(void){
  [[UIApplication sharedApplication] openURL:url];
});

关于ios - 通过 didFinishLaunchingWithOptions 通过远程推送启动应用程序时延迟 openURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389089/

相关文章:

ruby-on-rails - 我正在使用 `fcm` gem 发送推送通知,它适用于 Android,但不适用于 IOS

ios - 迁移到不同的第三方推送通知服务 - iOS 应用程序

ios - 在 iOS 上使用排队和 Grand Central Dispatch 的一些帮助

ios - 创建基于百分比的 iOS 布局

objective-c - 无法释放 View Controller

ios - 在 swift 类中调用目标 block

iphone - 如何使用苹果推送通知沙箱作为虚拟设备?

ios - 如何正确使用OperationQueue?

ios - dispatch_async 重新加载 UITableView 不起作用

ios - 如何设置视频的 UIImagePickerController 方向?