这是我的应用场景:当用户滑动通知时,我将通过URL启动一些其他应用。 所以它基本上在通知到达时启动其他应用程序。
目前处理滑动通知方案时,
- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)
调用方法,在此方法中,我调用processNotification:
方法,其中包含:
...
[[UIApplication sharedApplication] openURL:url];
...
url
就会完全正常打开。url
,但当前查看的应用是我的应用。例如,如果我的url
为tel:123-456-7890
,则iOS会启动通话(您可以听到声音),但有效应用不是Phone.app
,而是我的应用。 这对我来说似乎很奇怪。但是,如果我等待加载UI,并在此之后调用processNotification:
,则会正确显示Phone.app
窗口。 (平台中的错误?因为调用发生但我的UI位于顶部。)
我需要一种方法来延迟执行此processNotification:
调用(可能通过操作队列),直到加载视图控制器。否则,我的应用程序会保持在最顶层,并且URL会在后台打开。
答案 0 :(得分:7)
我遇到了同样的问题,我将openURL
移到main_queue
,似乎工作正常。我甚至不必在didBecomeActive
dispatch_async(dispatch_get_main_queue(), ^(void){
[[UIApplication sharedApplication] openURL:url];
});
答案 1 :(得分:3)
您应该延迟处理推送通知(即调用openURL:
)直到applicationDidBecomeActive:
。保留application:didFinishLaunchingWithOptions:
所需的参数,但只能在applicationDidBecomeActive:
中调用您的处理代码。
我认为这里的问题是SpringBoard无法应对正在调用的另一个应用程序转换。当然是一个iOS错误。您应该在https://bugreport.apple.com
打开错误报告