如何在 Swift 3 中打开 WIFI 设置

Posted

技术标签:

【中文标题】如何在 Swift 3 中打开 WIFI 设置【英文标题】:How to open WIFI setting in Swift 3 【发布时间】: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,有人可以帮忙吗?

【问题讨论】:

***.com/questions/28152526/… @SinaKH:谢谢你的回复,但是会打开应用设置我要打开WIFI设置。 【参考方案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 post,prefs: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 将拒绝您的应用

以上是关于如何在 Swift 3 中打开 WIFI 设置的主要内容,如果未能解决你的问题,请参考以下文章

如何开启wifi直连

电信如何设置wifi密码

如何打开苹果手机wifi开关?

如何在Ubuntu下建立虚拟wifi热点供Android,Kindle

如何直接打开android系统的wifi设置页面,防止intent劫持

如何设置wifi网页认证登录