【发布时间】:2022-10-24 02:33:09
【问题描述】:
第一个问题:我正在使用这个this method 来触发LocalNetwork Permission 对话框,但是在对话框出现并且用户授予访问权限之后,没有委托触发,但是它进入了就绪状态。 你知道为什么吗?
第二个问题:是否有可能检测是否在不触发对话框的情况下授予 LocalNetwork 权限?
import Foundation
import Network
public class LocalNetworkAuthorization: NSObject {
private var browser: NWBrowser?
private var netService: NetService?
private var completion: ((Bool) -> Void)?
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: "_wobie._tcp", domain: nil), using: parameters)
self.browser = browser
browser.stateUpdateHandler = { newState in
switch newState {
case .failed(let error):
print("::: ->> error: \(error.localizedDescription)")
case .ready:
print("::: ->> ready")
case .cancelled:
print("::: ->> canceled")
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 LocalNetworkAuthorization : NetServiceDelegate {
public func netServiceDidPublish(_ sender: NetService) {
self.reset()
print("::: Local network permission has been granted")
completion?(true)
}
public func netService(_ sender: NetService, didNotResolve errorDict: [String : NSNumber]) {
print("::: error: \(errorDict)")
}
public func netService(_ sender: NetService, didAcceptConnectionWith inputStream: InputStream, outputStream: OutputStream) {
print("")
}
public func netServiceWillResolve(_ sender: NetService) {
print("")
}
}
【问题讨论】:
-
欢迎来到 SO - 请使用 tour 并阅读 How to Ask 以改进、编辑和格式化您的问题。如果没有Minimal Reproducible Example,就无法帮助您进行故障排除。所有代码都应该在问题中,因为代码不是指向回购的链接,链接会随着时间的推移而中断,并且在 SO 中不可搜索。