参考网站: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)
}
}