【问题标题】:Detect my iOS App as a web browser将我的 iOS 应用检测为网络浏览器
【发布时间】:2016-09-30 06:54:07
【问题描述】:

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

我试过this answer

【问题讨论】:

  • 我不想更改,我希望我的应用被检测为浏览器
  • 上述请求有什么解决办法吗?
  • 我认为 Share Extension 是你在 iOS 中可以做的事情
  • @xi.lin,你能详细说明一下吗?
  • 你好 Vaibhav。我注意到您没有与下面的一些非常有用的答案进行太多互动,除了请求一个示例,当您收到该示例时,您没有回复。 Stack Overflow 在社区的基础上工作,该原则的宗旨是人们互相回复,适当地投票,并适当地接受答案(使用对勾图标)。您现在可以采取其中一项或多项行动吗?迟到总比不到好!谢谢。

标签: ios swift xcode browser


【解决方案1】:

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

但是,如果您希望您的应用显示在“打开方式”弹出窗口中,您可以set your app as able to open certain document typessystem-declared document types 有很多,但您可能需要特别注意与 web 相关的那些,例如 public.html (kUTTypeHTML)。

不幸的是,我相当确定 iOS 不允许应用程序声明支持打开纯 http URL,只允许自定义 URL 方案,但您仍可能希望声明支持某些文件类型,例如 HTML,以防万一用户尝试打开一个。这是一个例子:

首先,您需要告诉 Xcode 您支持哪些文档,您可以通过选择目标、转到 info 并添加文档类型来做到这一点:

然后,无论何时要求您的应用打开 .webarchive 文件,This document 都会描述您必须从哪里打开它。基本上,因为您不拥有文件类型,所以您可以在 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 提供的最接近您想要的东西。

【讨论】:

  • @Mathew,你能举个例子吗?
【解决方案2】:

Not possible 定义应用程序中的任何位置,以便其他应用程序将您的应用程序视为浏览器,但如果您想将其他应用程序的 URL 带到您的应用程序,您可以为您的应用程序创建共享类型的应用程序扩展。这将允许其他应用与您的应用共享 URL。当用户选择 URL 并分享时,他们将看到您的应用。您可以从 NSExtensionMainStoryboard 为您的班级自定义共享视图的视图。您可以从Apple's Developer website了解更多信息

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

每当用户与您的应用程序共享 URL 时,您的 SharingViewController 中的 didSelectPost() 委托方法将被调用,您可以从该方法获取共享 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 中获取价值存储,并从中显示 URL。

    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")
    }

【讨论】:

    【解决方案3】:

    这个不行,http是保留的URL scheme,见Using URL Schemes to Communicate with Apps

    Apple 为 http、mailto、tel 和 sms URL 提供内置支持 计划等。它还支持针对 地图、YouTube 和 iPod 应用程序。这些方案的处理程序是固定的 并且无法更改。如果您的 URL 类型包含的方案是 与 Apple 定义的相同,Apple 提供的应用程序已启动 而不是你的应用。

    您可以在您的应用中使用Universal Links,并将您的应用(如果已安装)用作您网站的浏览器。但是,您不能对所有 URL 都实现这一点。

    【讨论】:

      【解决方案4】:

      现在可以在 iOS 14 上完成:查看 Apple 网站上的这篇文章了解更多信息。

      Preparing Your App to be the Default Browser or Email Client

      【讨论】:

        猜你喜欢
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 2011-11-30
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 2011-08-29
        相关资源
        最近更新 更多