【问题标题】:How to open WIFI setting in Swift 3如何在 Swift 3 中打开 WIFI 设置
【发布时间】:2017-02-07 10:33:48
【问题描述】:

我想从我的 iOS 应用程序中打开 WIFI 设置部分,我的代码在 Swift 3 和 iOS 9.2 之前运行良好

if let settingsURL = URL(string: AppSettingsWifiUrl) {
    UIApplication.shared.openURL(settingsURL)
}

但更新后它不适用于 Xcode 8 + Swift 3 + iOS 10,有人可以帮忙吗?

【问题讨论】:

标签: swift3 ios10 openurl


【解决方案1】:
 let url=URL(string: "App-Prefs:root=Privacy&path=LOCATION")
        if UIApplication.shared.canOpenURL(url!)
        {
            UIApplication.shared.open(url!, options: [:], completionHandler: {sucess in
            
            })
            
        }
        else{
            UIApplication.shared.open(url!, options: [:], completionHandler: {sucess in
                
            })
        }

【讨论】:

    【解决方案2】:

    已于 26-02-20 编辑, 注意,在 ios 10 之后的版本中,您的二进制文件将被拒绝

    iOS 10Swift 3

    上可以
    let url = URL(string: "App-Prefs:root=WIFI") //for WIFI setting app
    let app = UIApplication.shared
    app.openURL(url!)
    

    【讨论】:

    • 您从哪里获得这些信息?能否提供出处?
    • @winklerrr 我在 ios dev iphonedevwiki.net/index.php/Preferences.app 的这个 wiki 上找到了这个信息,还有更多信息 medium.com/@thanhvtrn/…
    • 最近对一款应用进行了审核,“App-Prefs:root=Wifi”是苹果阻止该版本发布的一个原因。这是邮件的一部分:您的应用程序使用“prefs:root=”非公共 URL 方案,这是一个私有实体。 App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。
    • @MarcelT 根据第二个source Lito 提供的评论(您必须向下滚动到评论部分),Apple 不应该拒绝该应用程序?!
    • 根据 Apple 爱斯基摩人的 forum postprefs:root=App-Prefs:root= 被视为私有 API,因此禁止使用并导致应用程序被拒绝。
    【解决方案3】:

    iOS 9+

    您无法直接从您的应用打开 Wi-Fi 设置选项卡。一般只允许您打开设置应用程序。

    以下代码适用于Swift 4 + iOS 9+

    func openWifiSettings() {
        print("Opening Wi-Fi settings.")
    
        let shared = UIApplication.shared
        let url = URL(string: UIApplicationOpenSettingsURLString)!
    
        if #available(iOS 10.0, *) {
            shared.open(url)
        } else {
            shared.openURL(url)
        }
    }
    

    来源: Apple 开发者文档openopenURL


    iOS 9 中实际上可以直接打开 Wi-Fi 设置选项卡(使用私有 API URL 方案),但这被认为是错误使用。

    因此:请勿使用 App-Prefs:rootpref:root URL 方案,因为它们会导致您的应用被 Apple 的审核检查拒绝。

    来源: Apple 开发者论坛 post 来自 Apple 的爱斯基摩人。


    iOS 11+

    如果您需要连接到某个 Wi-Fi 网络NEHotspotConfigurationManager 可能会有所帮助。

    来源:苹果技术问答QA1942

    【讨论】:

    • 是的,由于 Themis 解决方法,我的应用程序也被拒绝了。解释很清楚,即使苹果也不能保证它将来会起作用。恕我直言,应用程序不应有权访问 WiFi 设置。只允许在应用程序的设置选项卡中更改应用程序的使用设置,对于 WiFi 使用,这也是可能的。
    【解决方案4】:

    在 iOS 11 上我们不能再这样做了,我们可以打开设置:

    if let url = URL(string:UIApplicationOpenSettingsURLString) {
        if UIApplication.shared.canOpenURL(url) {
           let url =  UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }
    }
    

    【讨论】:

    • 而不是直接到wifi屏幕?
    【解决方案5】:

    这个东西也适用于 iOS 10,但你必须在你的项目设置信息中添加 URL 类型。 URL 方案应该是首选 如果您需要我会分享屏幕截图,以便您轻松实现。

    谢谢??

    【讨论】:

      【解决方案6】:

      对 iOS 10 及更高版本使用以下内容:

      if let url = URL(string:"App-Prefs:root=Settings&path=General") { 
          UIApplication.shared.openURL(url)
      }
      

      【讨论】:

      • 顺便说一句:App-Prefs:prefs: URL 方案被认为是私有 API。它的使用只能作为iOS9 上的“错误”。只需使用 UIApplicationOpenSettingsURLString 作为 URL 字符串。来源:forum post 来自 Apples 的爱斯基摩人。
      • Apple 也会拒绝使用私有 API 的应用。
      【解决方案7】:

      只需使用:

      UIApplication.shared.openURL(URL(string:"prefs:root=WIFI")!)
      

      【讨论】:

      • 此“错误”仅适用于 iOS 9,并已于 iOS 10 修复。使用此错误会导致您的应用被拒绝。来源:forum post 来自 Apples 的爱斯基摩人。
      • 如果您使用“prefs:root=",Apple 将拒绝您的应用
      猜你喜欢
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2017-02-08
      • 2013-02-07
      • 1970-01-01
      • 2016-01-30
      • 2017-01-30
      相关资源
      最近更新 更多