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

Ahm*_*gle 3 apple-push-notifications nsoperationqueue grand-central-dispatch ios

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

目前处理滑动通知方案的时候

- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)
Run Code Online (Sandbox Code Playgroud)

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

...
[[UIApplication sharedApplication] openURL:url];
...
Run Code Online (Sandbox Code Playgroud)
  • 如果在app激活时收到推送,url则打开完全正常.
  • 如果通过滑动或点击通知收到推送,url则在后台打开,但当前查看的应用程序是我的应用程序.例如,如果我urltel:123-456-7890,iOS启动呼叫(你可以听到声音)但活动的应用程序不是Phone.app,它是我的应用程序.

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

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

dar*_*nde 7

我遇到了同样的问题,我openURL进入了main_queue它,似乎工作正常.我甚至没有做出改变didBecomeActive

dispatch_async(dispatch_get_main_queue(), ^(void){
  [[UIApplication sharedApplication] openURL:url];
});
Run Code Online (Sandbox Code Playgroud)