将我的iOS应用程序检测为Web浏览器

我正在构建浏览器应用程序。 我希望iOS将其作为浏览器进行检测。 我尝试向URL Schemes添加http ,但徒劳无功。

我试过这个答案。


在iOS中,操作系统不会跟踪哪些应用程序是浏览器,并且就系统而言,用户应该使用Safari的一切功能。 因此,没有类似于您所链接的问题的API,它是指macOS。

但是,如果您希望自己的应用显示在“Open In”弹出窗口中,则可以将应用设置为可打开某些文档类型。 有很多系统声明的文档类型,但您可能需要特别注意与web相关的文档,如kUTTypeHTMLkUTTypeHTML )。

不幸的是,我相当肯定iOS不允许应用程序声明支持打开普通http URL,仅支持自定义URL方案,但您仍然可能需要声明对某些文件类型(如HTML)的支持,以防万一用户试图打开一个。 这是一个例子:

首先,你需要告诉Xcode你支持哪些文档,你需要选择你的目标,去信息,然后添加文档类型:

将public.html添加到文档类型

然后,无论何时,当您的应用程序被要求打开一个.webarchive文件时,本文档描述您必须从哪里打开它。 基本上,因为你不拥有文件类型,你可以在任何一个application:didFinishLaunchingWithOptions:查看选项字典application:didFinishLaunchingWithOptions:application:willFinishLaunchingWithOptions

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {

    if let url = launchOptions?[UIApplicationLaunchOptionsKey.url] as? URL {
        // This code would probably exist in one of your controllers
        let request = URLRequest(url: url)
        webview.load(request)
    }

    return true
}

所以实际上, AppDelegate很可能会通过将URL传递给应用程序,将其委托给另一部分应用程序。

但是,用户仍然可能无法仅访问Safari,只是将一个网页分享给您的应用。 您的应用可能只会在用户真正在实际的html文件上点击共享时显示,但它可能是iOS为您提供的最接近的内容。


Not possible在应用程序中定义任何位置,所以其他应用程序将您的应用程序视为浏览器,但是如果您想将其他应用程序的URL应用到您的应用程序您可以为您的应用程序创建类型共享的应用程序扩展。 这将允许其他应用与您的应用分享网址。 当用户选择URL并分享时,他们会看到你的应用。 您可以从NSExtensionMainStoryboard为您的课程自定义共享视图的视图。 您可以从Apple的开发人员网站了解更多信息

但是,当用户选择URL时,这不会打开您的应用程序。 用户将不得不关闭其他应用程序并打开您的应用程序以在您的应用程序中查看共享URL。 为此,您可以显示来自SharingViewController类的正确消息。

无论何时用户将与您的应用程序共享URL,您的SharingViewController didSelectPost()委托方法将被调用,您可以从此方法获取共享URL并在您的应用程序中使用该URL。

    override func didSelectPost() {
        if let item = extensionContext?.inputItems.first as? NSExtensionItem {
            if let itemProvider = item.attachments?.first as? NSItemProvider {
                if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeURL) {
                    itemProvider.loadItemForTypeIdentifier(kUTTypeURL, options: nil, completionHandler: { (url, error) -> Void in
                        if let shareURL = url as? NSURL {
                            var defaults = NSUserDefaults(suiteName: "group.com.yourapp.extension")
                            defaults?.setObject(url.absoluteString(), forKey: "sharedURL")
                            defaults?.synchronize()
                        }
                        self.extensionContext?.completeRequestReturningItems([], completionHandler:nil)
                    })
                }
            }
        }
    }

您可以在应用中使用套装名称在NSUserDefalts中获取价值商店,并显示它的网址。

    var defaults = NSUserDefaults(suiteName: "group.com.yourapp.extension")
    defaults?.synchronize()

    // Check for null value before setting
    if let restoredValue = defaults!.stringForKey("sharedURL") {

        //create url with sctring and use it as per your requirement
    }
    else {
      // ("Cannot find value")
    }

这不能完成, http是一个保留的URL方案,请参阅使用URL方案与应用程序通信

Apple为http,mailto,tel和sms URL等方案提供了内置支持。 它还支持针对地图,YouTube和iPod应用的基于http的URL。 这些方案的处理程序是固定的,不能更改。 如果您的URL类型包含与Apple定义的方案相同的方案,则会启动Apple提供的应用程序,而不是您的应用程序。

您可以做的是将Universal Links与您的应用程序一起使用,并将您的应用程序(如果已安装)用作您网站的浏览器。 不过,您无法为所有网址实现此目标。

链接地址: http://www.djcxy.com/p/36495.html

上一篇: Detect my iOS App as a web browser

下一篇: How do I install a .whl file in a PyCharm virtualenv?