m0_72288394 2024-05-06 22:53 采纳率: 0%
浏览 4

安卓11手机的唯一标识

问各位铁铁们一个问题,手机的唯一标识怎么获取啊,安卓11,目前OAID获取不到,还有其他方法吗?

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-06 22:53
    关注

    引自免费微信小程序:皆我百晓生

    在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环境下,这是不可能的,因为浏览器环境不提供这样的接口。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月6日

悬赏问题

  • ¥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局部变量对蓝图不可见