我正在尝试使用react-native-udp,但它在iOS上不起作用。在 Android 上没问题,但在 iOS 上它不发送任何消息。该应用程序安装后会请求许可,但即使拥有权限也无法运行。有人可以让它在 iOS 上运行吗?
代码示例
const socket = dgram.createSocket({
type: 'udp4',
debug: true,
})
socket.bind(BROADCAST_PORT)
socket.once('listening', function () {
socket.send(MSG, undefined, undefined, BROADCAST_PORT, BROADCAST_ADDR, function (err) {
if (err) console.log("ERR:"+err)
})
})
我遇到了同样的问题([电子邮件受保护]),
我找到了解决这个问题的方法: https://www.npmjs.com/package/@generac/react-native-local-network-permission
创建socket之前先获取用户权限,
import {
checkLocalNetworkAccess,
requestLocalNetworkAccess,
} from '@generac/react-native-local-network-permission';
await requestLocalNetworkAccess(); // this will pop-up the dialog for local network permission
const hasAccess = await checkLocalNetworkAccess(); // check if you got access
if(hasAccess) {
const socket = dgram.createSocket({
type: 'udp4',
debug: true,
})
--- remaining Logic ---
}
注意:确保您正在设备上进行测试,这只会在您的设备上打开本地网络请求的对话框。
这更多的是一种解决方法,而不是解决方案。
苹果没有API可以事先征求许可, 有关如何存档此类内容的更多信息: iOS 14 如何触发本地网络对话框并检查用户答案?
我希望他们更新库并修复它。 如果您想贡献,他们有一个针对 ios 14+ 的开放问题:这里