iOS 请求本地网络权限状态

这篇具有很好参考价值的文章主要介绍了iOS 请求本地网络权限状态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

//
//  KdLocalNetworkManager.swift
//  
//
//  Created by bob bob on 2023/4/13.
//

import Foundation
import Network

/// Uses bonjour networking to relialby check if user has granted local network access
/// How to use:
/// Add LocalNetworkAuthorization class to your project
/// Open .plist file and add "_bonjour._tcp", "_lnp._tcp.", as a values under "Bonjour services"
/// Call requestAuthorization() to trigger the prompt or get the authorization status if it already been approved/denied
/// about the author: https://stackoverflow.com/a/67758105/705761
public class KdLocalNetworkManager: NSObject {
    private var browser: NWBrowser?
    private var netService: NetService?
    private var completion: ((Bool) -> Void)?
    
    public func requestAuthorization() async -> Bool {
        return await withCheckedContinuation { continuation in
            requestAuthorization() { result in
                continuation.resume(returning: result)
            }
        }
    }
    
    private func requestAuthorization(completion: @escaping (Bool) -> Void) {
        self.completion = completion
        
            // Create parameters, and allow browsing over peer-to-peer link.
        let parameters = NWParameters()
        parameters.includePeerToPeer = true
        
            // Browse for a custom service type.
        let browser = NWBrowser(for: .bonjour(type: "_bonjour._tcp", domain: nil), using: parameters)
        self.browser = browser
        browser.stateUpdateHandler = { newState in
            switch newState {
            case .failed(let error):
                print(error.localizedDescription)
            case .ready:
                break
            case .cancelled:
                break
            case let .waiting(error):
                print("Local network permission has been denied: \(error)")
                self.reset()
                self.completion?(false)
            default:
                break
            }
        }
        
        self.netService = NetService(domain: "local.", type:"_lnp._tcp.", name: "LocalNetworkPrivacy", port: 1100)
        self.netService?.delegate = self
        
        self.browser?.start(queue: .main)
        self.netService?.publish()
    }
    
    
    private func reset() {
        self.browser?.cancel()
        self.browser = nil
        self.netService?.stop()
        self.netService = nil
    }
}

extension KdLocalNetworkManager : NetServiceDelegate {
    public func netServiceDidPublish(_ sender: NetService) {
        self.reset()
        print("Local network permission has been granted")
        completion?(true)
    }
}

1 在 .plist 添加"_bonjour._tcp", “_lnp._tcp.”, 到 “Bonjour services”
2 使用,只有被拒绝时候才会回调回来文章来源地址https://www.toymoban.com/news/detail-723943.html

    Task.init {
            do{
                let isOK = try await  KdLocalNetworkManager().requestAuthorization()
                print("ok")
                 if(!isOK){
                    let settingStrUrl = UIApplication.openSettingsURLString//"App-Prefs:root=Bluetooth"
                    let alertStr = NSLocalizedString("请打开本地网络权限", comment: "")
                     let url = URL(string: settingStrUrl)
                        guard let url = url else{
                            return
                        }
                        if(UIApplication.shared.canOpenURL(url)){
                            UIApplication.shared.open(url)
                        }
                    }
            }catch{
                print("exception")
            }
        }

到了这里,关于iOS 请求本地网络权限状态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【iOS】json数据解析以及简单的网络数据请求

    近期写完了暑假最后一个任务——天气预报,在里面用到了简单的网络数据请求以及json数据的解析,特此记录博客总结 JSON是一种轻量级的数据格式,一般用于数据交互。目前JSON的使用非常广泛,绝大多数网络请求都采用了JSON格式。 举个例子: 这就是我们利用API请求到的

    2024年02月14日
    浏览(50)
  • iOS开发集成framework、Bundle文件获取

    有些时候,我们开发的SDK并不需要对外隐藏,那么就可以将源码都打包给对方,也可以集成cocopods仓库,供外部使用。但有些时候,出于版权等原因,我们提供的代码只希望对方能够正常使用,却不希望对方看到内部的实现细节,就像苹果官方一样,给我们开发者提供的API只

    2024年02月12日
    浏览(34)
  • uniapp 打包ios,首次安装允许网络请求后页面空白(问题已解决)

    找了很多文章都没有比较靠谱的方案; 现提供有效的解决方案记录一下: app.vue文件中在首次加载调用个方法检测网络: setInterval(() = {                 uni.getNetworkType({                     success: res = {                         uni.showToast({                          

    2024年02月09日
    浏览(48)
  • iOS开发-WebRTC本地直播高分辨率不显示画面问题

    iOS开发-WebRTC本地直播高分辨率不显示画面问题 在之前使用WebRTC结合ossrs进行推流时候,ossrs的播放端无法看到高分辨率画面问题。根据这个问题,找到了解决方案。 WebRTC是什么呢? WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒

    2024年02月13日
    浏览(48)
  • ios开发 swift5 苹果手机怎样获取蓝牙设备的mac地址

    如设备蓝牙名为: 蓝牙名_mac app这边展示蓝牙名的时候,就只展示 蓝牙名 , 去掉后面的 _mac 其他用到蓝牙名的地方,都用这样的方式处理 如下图,箭头部分就是广播出的mac地址 如果不是通过搜索获取到peripheral,而是通过retrievePeripherals方法获取到peripheral。这个时候就只能获

    2024年02月03日
    浏览(53)
  • iOS开发Swift-10-位置授权, cocoapods,API,天气获取,城市获取-和风天气App首页代码

     1.获取用户当前所在的位置 在infi中点击加号,选择权限:当用户使用app的时候获取位置权限. 填写使用位置权限的目的.  2.获取用户的经纬度. ViewController:  3.通过第三方服务获取当前天气 (1)安装cocoapods https://dev.qweather.com/ 在网站中可以找到,当向 https://devapi.qweather.com/v7/weathe

    2024年02月09日
    浏览(53)
  • CSS_IOS适配状态栏和IOS底部安全区域

    计算属性 先constant再env 计算属性 safe-area-inset-left: 安全区域距离左边界的距离 safe-area-inset-right: 安全区域距离右边界的距离 safe-area-inset-top: 安全区域距离顶部边界的距离 safe-area-inset-bottom: 安全区域距离底部边界的距离

    2024年02月10日
    浏览(40)
  • iOS 两种方式设置状态栏

    1、ios9.0以前设置状态栏字体颜色 ///白色  [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; ///黑色  [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault]; 会看到如下提示: \\\'setStatusBarStyle:\\\' is deprecated: first deprecated in iOS 9.0 - Use -[UIViewController preferredStatusBa

    2024年02月14日
    浏览(35)
  • IOS 设置UIButton按钮的选中状态样式

    设置按钮的边框 设置按钮的文字样式 设置按钮的背景颜色 设置按钮的文字内容 附上按钮的各种状态及交互

    2024年04月27日
    浏览(34)
  • 如何解决iOS打包工具AppUploader登录权限问题?

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包