问各位铁铁们一个问题,手机的唯一标识怎么获取啊,安卓11,目前OAID获取不到,还有其他方法吗?
5条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在Android 11及以上版本中,Google出于隐私保护的原因限制了使用Advertising ID(AdID)和Android ID作为设备唯一标识符。然而,你还可以尝试使用设备的MAC地址、IMEI或序列号作为替代方案。不过需要注意的是,这些方法可能会因为安全策略、飞行模式或用户修改而受到影响。
以下是使用JavaScript获取设备MAC地址的一个示例。由于浏览器的安全限制,通常情况下你无法直接通过JavaScript获取到设备的MAC地址。但可以通过一些间接的方法,比如调用插件或者使用WebRTC API。
首先,确保你已经添加了
getUserMedia
权限:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Device MAC Address</title> </head> <body> <script src="https://webrtc.github.io/adapter/adapter-latest.js"></script> <button onclick="getMacAddress()">Get MAC Address</button> <p id="macAddressResult"></p> <script> function getMacAddress() { if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({video: false, audio: true}) .then(stream => { const tracks = stream.getTracks(); for (let track of tracks) { if (track.kind === 'audio') { const peerConnection = new RTCPeerConnection(); peerConnection.addTrack(track, stream); peerConnection.createOffer().then(offer => { peerConnection.setLocalDescription(offer); const sdpLines = offer.sdp.split('\r\n'); let macAddress = ''; for (let i = 0; i < sdpLines.length; i++) { if (sdpLines[i].indexOf('a=fingerprint:') > -1) { const fingerprintLine = sdpLines[i]; const beginIndex = fingerprintLine.indexOf(':') + 1; const endIndex = fingerprintLine.lastIndexOf(','); macAddress = fingerprintLine.substring(beginIndex, endIndex); break; } } peerConnection.close(); document.getElementById('macAddressResult').innerText = `MAC Address: ${macAddress}`; }); break; } } }) .catch(error => console.error('Error getting user media:', error)); } else { document.getElementById('macAddressResult').innerText = 'Your browser does not support getUserMedia.'; } } </script> </body> </html>
这段代码会在用户点击按钮时尝试获取麦克风权限,并利用WebRTC创建一个临时的PeerConnection。然后从SDP字符串中解析出MAC地址。请注意,这种方法并不是100%可靠,因为它依赖于WebRTC实现,且可能被浏览器更改或阻止。
另外,对于IMEI和序列号,你需要在Android原生应用中获取,而不是在JavaScript环境中。如果你的应用是混合应用(如使用React Native或Cordova),可以调用原生API获取这些信息。例如,在React Native中,你可以使用
react-native-device-info
库来获取这些数据。但在纯Web环境下,这是不可能的,因为浏览器环境不提供这样的接口。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 在虚拟机环境下完成以下,要求截图!
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图
- ¥15 UE5.1局部变量对蓝图不可见