Giter Site home page Giter Site logo

Comments (6)

yzjjdcf avatar yzjjdcf commented on August 22, 2024 1

android.provider.Settings.Secure.getString(App.getInstance().getContentResolver(),android.provider.Settings.Secure.ANDROID_ID)
获取Android_ID的方式:目前来看除了网上流传的某些设备会返回相同“9774d56d682e549c”字符串,或为null的情况不能识别。Android_ID应该是最简单,相对来说最合适的获取设备唯一性的吧? 目前测试的设备没有为null,和返回9774d56d682e549c这个串。这个问题是否只发生在老版本或者很小众(譬如非洲市场)呢?如果不涉及到很精准的譬如快手一元抢购业务,是否可以就用Android_ID的方式相对代替成唯一ID?

另外还看到一种通过MediaDrm这个类获取一个设备唯一值,这个类是用在音视频版权保护上的类,目前检索到的资料没有大量的测试100%证明获取的id唯一和获取这个值的设备的兼容性是否好,未来官方是否会收紧这个类?所以这种方式保持怀疑态度。

from android_cn_oaid.

yzjjdcf avatar yzjjdcf commented on August 22, 2024

拜占庭容错方案 按我的理解是需要后台人员进行精准查询,目前有什么好的方案只通过Android端自己生成一个唯一ID呢?

from android_cn_oaid.

liyujiang-gzu avatar liyujiang-gzu commented on August 22, 2024

拜占庭容错方案 按我的理解是需要后台人员进行精准查询,目前有什么好的方案只通过Android端自己生成一个唯一ID呢?

我感觉的比较可靠的方案就是拜占庭容错方案,要服务端人员写个设备ID接口进行配合,Android端同时尝试获取IMEI、OAID、伪造硬件ID、AndroidID以及自行生成的GUID,将这五种ID传到服务端存储起来,服务端可以加黑名单排除“000000-000-0000-00000000”之类的无效ID,具体实施方案可参阅这个哥们的开源项目“@No89757/Udid”。
image
快手一元购貌似也是类似的方案,采集IMEI、OAID、AndroidID、MAC及IP。
image

from android_cn_oaid.

liyujiang-gzu avatar liyujiang-gzu commented on August 22, 2024

拜占庭容错方案 按我的理解是需要后台人员进行精准查询,目前有什么好的方案只通过Android端自己生成一个唯一ID呢?

如果不结合服务端,Android端可以在APP首次安装使用时生成一个全局的UUID存到SharedPreferences及外部存储卡里,只要用户不卸载APP就可以保证设备唯一。

from android_cn_oaid.

liyujiang-gzu avatar liyujiang-gzu commented on August 22, 2024

以前是通过IMEI通过权限确定设备的唯一性,不过目前如果用户匿名权限关闭了,是不是就不能确定这个设备的唯一性了?看其他issues有的关闭权限返回的OAID是一个000000-000-0000-00000000这种常量,如何过滤掉这种未知的假OAID,未知常量的存在?

就是这种,OAID全是0:
微信截图_20210429151936

from android_cn_oaid.

liyujiang-gzu avatar liyujiang-gzu commented on August 22, 2024

如果不结合服务端,纯客户端的话,当IMEIOAIDAAID不可用时,可以使用GUID来确保设备的唯一性,在Android6.0以上版本,只要用户不卸载APP就能保证唯一性,Android6.0以下版本就算卸载了APP基本上也能保证唯一性:

    /**
     * 随机生成全局唯一标识并存到{@code SharedPreferences}、{@code ExternalStorage}及{@code SystemSettings}。
     * 为保障在Android10以下版本上的稳定性,需要加入权限{@code WRITE_EXTERNAL_STORAGE}及{@code WRITE_SETTINGS}。
     * <pre>
     *     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     *         android:maxSdkVersion="29"
     *         tools:ignore="ScopedStorage" />
     *     <uses-permission
     *         android:name="android.permission.WRITE_SETTINGS"
     *         tools:ignore="ProtectedPermissions" />
     * </pre>
     *
     * @return GUID,不会为空,但应用卸载后会丢失
     * @see android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS
     */
    @NonNull
    public static String getGUID(@NonNull Context context) {
        String uuid = getUuidFromSystemSettings(context);
        if (TextUtils.isEmpty(uuid)) {
            uuid = getUuidFromExternalStorage(context);
        }
        if (TextUtils.isEmpty(uuid)) {
            uuid = getUuidFromSharedPreferences(context);
        }
        if (TextUtils.isEmpty(uuid)) {
            uuid = UUID.randomUUID().toString();
            OAIDLog.print("Generate uuid by random: " + uuid);
            saveUuidToSharedPreferences(context, uuid);
            saveUuidToSystemSettings(context, uuid);
            saveUuidToExternalStorage(context, uuid);
        }
        return uuid;
    }

from android_cn_oaid.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.