gpt4 book ai didi

iOS 14 如何触发本地网络对话框并检查用户答案?

转载 作者:行者123 更新时间:2023-12-03 09:17:12 29 4
gpt4 key购买 nike

我看过这个问答 What triggers ,但这不是我想要的。我也读过这篇 Network privacy permission check ,但没有答案。我还在这里搜索任何可以帮助我的方法或类:Network ,但又没有运气了。
本地网络授权有一个新对话框,用户可以在其中允许/不允许“查找并连接到本地网络上的设备”。
enter image description here
但是我很难找到任何 API 来了解如何触发此弹出窗口以及如何检查是否授予访问权限(例如在 AVCapture 中,我可以检查 AVMediaType 的授权状态)。
谢谢!

最佳答案

我找到了一种触发提示的方法,接收用户选择的回调,并检测用户之前是否允许或拒绝了已经出现的提示。
为了触发权限,我们使用服务发现 API。当用户拒绝或之前拒绝时,我们会收到错误消息。
它不指示是否已授予权限,因此我们还发布了一个网络服务,如果已授予权限,则返回成功。
通过将 2 组合成一个组件,我们可以触发提示并获得批准或拒绝的指示:直到我们从网络服务收到成功或从服务发现中收到错误,我们假设权限仍在等待中。

import Foundation
import Network

@available(iOS 14.0, *)
public 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)
}
}

如何使用:
  • 将 LocalNetworkAuthorization 类添加到您的项目中
  • 打开 .plist 文件并添加“_bonjour._tcp”、“_lnp._tcp.”作为“Bonjour 服务”下的值
  • 调用 requestAuthorization() 触发提示或获取授权状态,如果已经批准/拒绝
  • 关于iOS 14 如何触发本地网络对话框并检查用户答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63940427/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com