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

安卓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日