当应用程序在 iOS 中处于后台时,openURL 不起作用

Posted

技术标签:

【中文标题】当应用程序在 iOS 中处于后台时,openURL 不起作用【英文标题】:openURL is not working when App is in background in iOS 【发布时间】:2014-08-05 07:01:28 【问题描述】:

当应用程序在后台时,我试图从我的应用程序在 Safari 中打开一个 URL,下面是我的代码

    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:strURL]];

我的应用在调试过程中遇到了上述行,但没有使用给定的 URL 打开 Safari。

【问题讨论】:

UIKit 调用只能在主线程上运行。我认为因为这是在后台线程上运行的,所以 Safari 仍会访问 URL,但您的应用程序仍处于活动状态。稍后尝试打开 Safari,看看它是否加载了 URL。解决方案是将其放在主线程上,从而在代码运行时离开您的应用程序。这听起来不像你想要的,抱歉。如果你想在你的应用中访问 URL,你可以展示一个 UIWebView。 if([[UIApplication sharedApplication]canOpenURL:url]) [[UIApplication sharedApplication]openURL:url]; @MohitPopat:我尝试在 MainThread 上运行上述代码行,尽管它不起作用并且我们的客户不想在 UIWebView 中显示,他们只喜欢 Safari。 你试过了吗system([[NSString stringWithFormat:@"uiopen \"%@\"", myUrlToOpen] UTF8String]); 此命令不适用于模拟器。它只适用于越狱设备 【参考方案1】:

这是不可能的,您不能从后台状态启动另一个应用程序。如果应用程序在后台,那么您将无法从 iPhone/iPad 屏幕处理您的应用程序事件。您必须唤醒您的应用程序。您可以使用本地通知。

【讨论】:

以上是关于当应用程序在 iOS 中处于后台时,openURL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在 iOS 11.4.1 中处于后台时,静默通知不起作用

当应用程序处于后台时,在 iOS appDelegate didReceiveRemoteNotification 中调用 lambda 函数

应用程序在 iOS 11 中处于后台时未收到推送通知

当应用程序处于后台时,iOS 处理通知和有效负载

当应用程序在iOS swift 3中处于后台模式时如何每10秒获取一次纬度和经度

Flutter:当应用程序处于后台但未在 iOS 中终止时,无法在通知单击时重定向到特定屏幕