3

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

目前处理刷卡通知场景,当

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

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

...
[[UIApplication sharedApplication] openURL:url];
...
  • 如果在应用程序处于活动状态时收到推送url则可以很好地打开。
  • 如果通过滑动或点击通知收到推送url则在后台打开,但当前查看的应用程序是我的应用程序。例如,如果 my urlis tel:123-456-7890,iOS 启动呼叫(您可以听到声音)但活动应用程序不是Phone.app,它是我的应用程序。

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

我需要一种方法来延迟执行此processNotification:调用(可能通过操作队列),直到加载视图控制器。否则,我的应用程序将保持在顶部,并且 URL 在后台打开。

4

2 回答 2

7

我遇到了同样的问题,我搬进去openURLmain_queue,它似乎工作正常。我什至不必在didBecomeActive

dispatch_async(dispatch_get_main_queue(), ^(void){
  [[UIApplication sharedApplication] openURL:url];
});
于 2013-12-30T09:08:38.060 回答
3

您应该延迟处理推送通知(即调用openURL:),直到applicationDidBecomeActive:。保留您需要的参数,application:didFinishLaunchingWithOptions:但仅在applicationDidBecomeActive:.

我认为这里的问题是 SpringBoard 无法应对一个应用程序转换被调用而另一个应用程序正在进行中。当然是一个 iOS 错误。您应该在https://bugreport.apple.com打开错误报告

于 2013-10-18T01:57:28.760 回答