问题:Unity启动时获取了设备信息,其中包括Android_id

以下是在androidstudio中的log,使用Xposed的LoginHook看到Unity启动时获取了android_id信息,如果在用户同意隐私协议之前获取,是不合规的。

05-31 14:06:29.620 4118-4138/com.DefaultCompany.TestHW I/Xposed: com.DefaultCompany.TestHW -> 2 调用Settings.Secure.getstring获取了android_id

05-31 14:06:29.622 4118-4138/com.DefaultCompany.TestHW I/Xposed: dalvik.system.VMStack.getThreadStackTrace(Native Method)

java.lang.Thread.getStackTrace(Thread.java:580)

com.example.hooklogin.HookLogin.getMethodStack(HookLogin.java:205)

com.example.hooklogin.HookLogin.access$000(HookLogin.java:22)

com.example.hooklogin.HookLogin$6.afterHookedMethod(HookLogin.java:178)

de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:374)

android.provider.Settings$Secure.getString()

com.unity3d.player.UnityPlayer.nativeRender(Native Method)

com.unity3d.player.UnityPlayer.access$300(Unknown Source)

com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source)

android.os.Handler.dispatchMessage(Handler.java:98)

android.os.Looper.loop(Looper.java:135)

com.unity3d.player.UnityPlayer$e.run(Unknown Source)

05-31 14:06:29.623 4118-4138/com.DefaultCompany.TestHW D/Unity: UUID: 10xxxxxxxxxxxx95 => 72xxxxxxxxxxxxxxxxxxxxxxxxxxxx06

解决方案:

1:排查java代码

检查是否是我们自己代码,主动获取了android_id。

如以下代码块:

Settings.Secure.getString(
activity.getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);

2:排查第三方插件、接入的SDK、Unity导入的package。

已知,Unity Ads package是会获取设备信息的,第三方插件Bugly也是会获取设备信息的。

这些需要放到游戏的用户隐私协议之后才能获取。

这方面自己通过逻辑控制即可。

3:Unity的相关设置

3.1 检查PlayerSettings 设置,2017及以下需要pro版才能勾选disable HW Statistics、2018个人版也可以、2019及以上已经移除该选项,统一由Services窗口的Analytics控制。

3.2 如果Unity开启过Analytics,然后再关闭依然后收到获取android_id的log。

需要手动将Unity的关于Analytics的setting配置修改掉。

如图左边会获取android_id,右边不在获取android_id。

至此,我想,你的项目不会再出现不受控制的android_id获取的情况,通过合规检查。

关于Unity启动调用Android_id问题排查的更多相关文章

  1. java程序员图文并茂细说Unity中调用Android的接口

    http://bbs.csdn.net/topics/391876421 最近做一个项目,为同事提供接口,能使他在Unity中调用Android中的函数来实现QQ登陆并获取用户信息.按照一些书上和一些 ...

  2. Unity中调用DLL库

    DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...

  3. Android与Unity相互调用

    1. 在Unity里调用Android代码: void OnGUI(){ AndroidJavaClass jc = new AndroidJavaClass("com.some.packa ...

  4. Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数

    Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~    呵呵... 看着有点晕.. 再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在 ...

  5. atitit.流程标准化--- mysql启动不起来的排查流程attilax总结

    atitit.流程标准化--- mysql启动不起来的排查流程attilax总结 1. mysql的启动日志文件 1 2. console方式 1 3. 安装为服务 1 3.1. 使用默认配置文件 1 ...

  6. Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug

    问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...

  7. Unity直接调用Android Toast

    Unity直接调用Android Toast 这两天在搭一套UI框架,想把Android的Toast直接集成上去,有不想直接打jar包,所有写了个C#直接调用,废话不多说,直接干货: using Un ...

  8. Unity全局调用非静态函数

    Unity全局调用非静态函数 情形 大概就是做游戏的时候想做一个给玩家展示信息的东西,比如玩家按了不该按的键提醒一下之类的.这个脚本倒是很简单,找个Text组件往上面加字就行了.问题在于这个脚本游戏中 ...

  9. Unity——Js和Unity互相调用

    Unity项目可以打包成WebGl,打包后的项目文件: Build中是打包后的Js代码: Index.html是web项目的入口,里面可以调整web的自适应,也可以拿去嵌套: TemplateData ...

随机推荐

  1. Git简单操作及原理

    设置签名: ​ 用户名:tom ​ Email地址:goodMorning@atguigu.com ​ git config user.name tom_pro ​ git config user.e ...

  2. 2. Mybatis Select

    mybatis select是mybatis 中最常用的元素之一. 对简单的查询,select 元素的配置是相当简单的: <?xml version="1.0" encodi ...

  3. 在Linux CentOS上搭建Jmeter压测环境

    本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程,来满足我们日常工作中对于压力测试环境搭建.压力测试执行过程的需求. 一.首先我们要准备四个东西, ...

  4. Day16_94_IO_循环读取文件字节流read()方法(二)

    循环读取文件字节流read()方法 通过read()循环读取数据,但是read()每次都只能读取一个字节,频繁读取磁盘对磁盘有伤害,且效率低. import java.io.FileInputStre ...

  5. Day14_81_反射机制获取Class属性

    反射机制获取Class属性 获取属性 方法一: Class对象 . getFields();只能用来获取公开的属性,不能获取有私有的或者受保护的属性 获取属性 方法二: Class对象 . getDe ...

  6. 绕过阿里云waf进行mysql limit注入证明

    朋友发了我一个站点,来看看吧,是limit注入,不太常见.搞一搞吧. POST /Member/CompanyApply/lists HTTP/1.1 Host: * Content-Length: ...

  7. 一文抽丝剥茧带你掌握复杂Gremlin查询的调试方法

    摘要:Gremlin是图数据库查询使用最普遍的基础查询语言.Gremlin的图灵完备性,使其能够编写非常复杂的查询语句.对于复杂的问题,我们该如何编写一个复杂的查询?以及我们该如何理解已有的复杂查询? ...

  8. [CTF]栅栏密码学习

    [CTF]栅栏密码学习 即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码.栅栏密码是一种置换密码. 例如密文:TEOGSDYUTAENNHLNETAMS ...

  9. c/c++ 指针数组 和 数组指针

    看这个标题都要晕了,我们不妨把他拆开来理解,比较容易 指针数组:对象是一个数组,数组元素的类型是指针 指针数组的定义方式: 类型名 *数组名[数组长度]; 如: int *p[8]; 数组指针:对象是 ...

  10. Openstack 虚拟机宽带限速

    修改Neutron配置文件,使其支持Qos 修改Neutron.conf service_plugins = neutron.services.qos.qos_plugin.QoSPlugin 修改p ...