【问题标题】:Swift Local Network netServiceDidPublish not called未调用 Swift 本地网络 netServiceDidPublish
【发布时间】: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 中不可搜索。

标签: swift bonjour


【解决方案1】:

问题是我没有添加“_lnp._tcp”。到卓悦服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多