参考网站:https://qa.1r1g.com/sf/ask/4475829921/

iOS主动触发查找本地网络设备的弹框

还需要做的操作

1、打开 .plist 文件并添加“_bonjour._tcp”、“_lnp._tcp.”作为“Bonjour 服务”下的值

 

2、使用:

// 本地网络权限

if #available(iOS 14.0, *) {

let localNS = LocalNetworkAuthorization()

localNS.requestAuthorization { isAgree in

DLog("是否同意\(isAgree)")

}

} else {

}

//

// LocalNetworkAuthorization.swift

// SosUser

//

// Created by kk on 2022/10/12.

//

import Foundation

import Network

@available(iOS 14.0, *)

class LocalNetworkAuthorization: NSObject {

private var browser: NWBrowser?

private var netService: NetService?

private var completion: ((Bool) -> Void)?

public 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, .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

}

}

@available(iOS 14.0, *)

extension LocalNetworkAuthorization : NetServiceDelegate {

public func netServiceDidPublish(_ sender: NetService) {

self.reset()

print("Local network permission has been granted")

completion?(true)

}

}

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: