ANDROID:
GAID:
广告id,即Google Advertising ID(GAID),是由Google Play service提供给用户的可以重置的唯一广告id,通常也被用来作为设备的唯一标识,用于数据收集。
但用户手机上必须安装有google play服务,并且网络可以访问google,才可以获取到该id。
(该广告id也被称为AAID —— Android Advertising ID)。由于可以被重置,因此是
非永久性标识符
。
PS:这里的“重置”指的是在Android系统“设置”里,将Google服务将GAID重置,重置之后会生成一个新的GAID。
卸载后重装某个应用并不会改变GAID值
,只有在系统设置中执行指定操作后才会重置GAID。 GAID的作用在于对用户喜好进行跟踪,然后推送跟喜好相关的广告。
开启或关闭该服务并不会减少广告的数量
,只是关闭之后推送的广告是随机选择的,而不是根据用户喜好来推送相关内容的广告。
重置GAID:
"Setting" -> "Ads"
如何获取设备的GAID?
有两种方式:
一种是直接在手机设置“Setting -> Ads”中查询,如上图所示。
但是对于国内Android系统是没有谷歌服务的,在重新安装了Google三件套后依然无法在系统设置中找到“Google”或者“Ads”选项,此时是无法直接从手机设置中获取到GAID的,需要借助第三方软件才能查看到,这里推荐google play store 的“AAID”:
第二种则是通过代码获取:
1.获取当前设备的GAID以及广告跟踪状态:
string GetAdvertisingId()
string advertisingId = "DEFAULT";
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass jc2 = new AndroidJavaClass("com.google.android.gms.ads.identifier.AdvertisingIdClient");
AndroidJavaObject jo2 = jc2.CallStatic<AndroidJavaObject>("getAdvertisingIdInfo", jo);
if (jo2 != null)
//获取广告id:
advertisingId = jo2.Call<string>("getId");
if (string.IsNullOrEmpty(advertisingId))
advertisingId = "none";
//获取广告跟踪状态:当为false时,则无法根据用户行为定向推送广告,但看到的广告数量并不会减少
adTrackLimited = jo2.Call<bool>("isLimitAdTrackingEnabled");
return advertisingId;
运行结果如下:
PS:“isLimitAdTrackingEnabled”:是否限制跟踪用户行为以便投放相应广告,当为false时则无法根据用户行为来投放广告,但看到的广告数量不会减少。默认为false,表示可以会跟踪用户行为
1.如果只是为了获取安卓设备的GAID,则并不需要导入任何其他插件,只用在custom后的 mainTemplate.gradle的依赖关系中添加:implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' 即可
实际项目测试:使用Unity2018.4.1f1新建一个空项目,之后在Player Setting -> Publishing Setting中勾选“Custom Gradle Template”:
在新生成的文件“mainTemplate.gradle”中加入implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' 即可成功调用获取GAID的方法,项目源码:获取安卓设备广告id——GAID-Unity3D文档类资源-CSDN下载
2.C#方法中用到的java类“com.google.android.gms.ads.identifier.AdvertisingIdClient”是在“com.google.android.gms:play-services-ads-identifier”中,而不是“com.google.android.gms:play-services-ads”,所以不要填错依赖关系。
各个Google相关的信息与依赖关系可查阅官方Guide:https://developers.google.com/android/guides/setup
2.检测当前设备Google Play服务是否可用?
//该方法已验证,可以正常得到返回结果,用于获取当前设备的google play服务状态
int CheckGooglePlayServiceAvailable()
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass jc2 = new AndroidJavaClass("com.google.android.gms.common.GoogleApiAvailability");
AndroidJavaObject jo2 = jc2.CallStatic<AndroidJavaObject>("getInstance");
int code = jo2.Call<int>("isGooglePlayServicesAvailable", jo);
return code;
// result codes from https://developers.google.com/android/reference/com/google/android/gms/common/ConnectionResult
// 0 == success
// 1 == service_missing
// 2 == update service required
// 3 == service disabled
// 18 == service updating
// 9 == service invalid
注意:以上方法中用到的java类:“com.google.android.gms.common.GoogleApiAvailability”需要导入Google Play Games插件到项目中才可以正常被调用。
https://github.com/playgameservices/play-games-plugin-for-unity
项目实测:Unity2018.4.1f1,GooglePlayGamesPlugin-0.10.14.unitypackage
运行结果:
项目源码:获取安卓设备的googleplayservice状态以及GAID,和广告跟踪-Unity3D文档类资源-CSDN下载
1.IMEI:可以唯一标识一个设备,并且无法重置,是运营商识别入网设备信息的代码。世界上每一个IMEI都不相同。由于无法重置,因此是永久标识符。
由于IMEI具有唯一性和稳定性,因此当前国内大量使用的都是IMEI。但随着安卓版本升级,到Android 10后,由于Google在隐私保护上的加强,Android Q已经无法再获取到设备的IMEI码。
2.OAID:鉴于国内的特殊环境,无法使用GAID,并且随着安卓系统Android 10的普及,已经无法再获取到IMEI,所以近期由中国移动安全联盟开发的OAID——Open Anonymous Device Identifier,具有稳定性和唯一性,可以用来唯一标识设备。并且该ID还可以用于广告跟踪,可以被重置,所以通常也被用来替代国外的GAID,达到一样的效果。但目前直到Android 10后才逐渐被使用,下图为当前支持OAID的国内终端:
与之相对应的,在IOS设备上,该广告id为“IDFA”,即Identifier For Advertising,是ios为每个用户设置的唯一广告id。由于IOS设备在国内外都可以正常使用,因此IOS设备都使用IDFA来作为唯一标识。
Unity为IOS提供了获取Advertising ID的方法:
//该方法当前尚没有在IOS设备上得到直接验证
Application.RequestAdvertisingIdentifierAsync(
(string advertisingId, bool trackingEnabled, string error) =>
{ Debug.Log("advertisingId " + advertisingId + " " + trackingEnabled + " " + error); }
注:ATT窗口 —— 为了加强用户隐私,IOS14推出ATT窗口:如因跟踪目的收集用户数据,需先取得用户授权才能得到该IOS设备的IDFA,否则应用获取到的IDFA数据为空。
1.导入GoogleMobileAds插件后报错(本项目并不需要导入该插件,之所以遇到该问题是因为在开发时恰好碰到了,所以记录下):
导入谷歌广告的Unity插件时,默认会使用当前最新的版本 —— GoogleMobileAds-v7.0.0.unitypackage。但对于Unity的早期版本如Unity2018.4.1f1是不支持package中有对Timeline的依赖关系的,所以Unity2018.4.1f1导入当前最新版的“GoogleMobileAds-v7.0.0.unitypackage”后会报错:
解决办法:更新Unity版本,如换成Unity2019即可;或者下载GoogleMobileAds的早期版本,如
经测试,在Unity2018.4.1f1中导入“GoogleMobileAds-v3.18.3.unitypackage”后没有如上报错了
2.解析依赖失败:在手动解析依赖时,点击“Resolve”后没有反应
出现这种情况有可能是因为:当第一次导入GoogleMobileAds-v3.18.3.unitypackage插件后,Unity会自动的解析依赖关系,但由于时间过长,那个展示解析进度的窗口被人为打断了。后面再次点击“Resolve”是没有反应的。此时查看“mainTemplate.gradle”发现没有任何改变,依赖关系都没有被添加进来,说明本次解析依赖没有成功。
解决办法:点击截图中的“Delete Resolved Libraries”,然后将项目关闭后再重新打开,再次点击“Resolve”即会重新开始解析依赖。弹出如下窗口则代表解析依赖成功
Unity 是一个功能强大的跨平台游戏引擎,广泛用于开发视频游戏和其他实时3D互动内容,如模拟器和虚拟现实应用。Unity 进阶开发涉及更复杂的技术和更深入的知识,以创建高性能、复杂和专业的游戏和应用程序。
Android Q获取设备唯一ID(UDID\GUID\UUID)一、简介1.问题背景2.关键技术二、解决方案2.1 官方推荐方案 (4种)2.2 研究方案1——GUID方案2.3 研究方案2——数字版权管理(DRM)方案2.4 研究方案3——自定义ID硬件信息拼凑方案2.5 研究方案4——移动安全联盟方案2.6 研究方案5——数字联盟可信ID方案三、方案对比3.1 评估准则3.2 决策分析四、总结
1.问题背景
**技术现状:**存储设备需要用唯一设备ID(Unique Device Iden
1,GetAndroidphoneId.java 这个文件放到Plugins/Android/下
2,AndroidInterface.cs是调用Java的(与java交互)
3,新建脚本->调用 AndroidInterface.GetInstance.GetAndroidPhoneUnid();
Unity3D提供的SystemInfo.deviceUniqueIdentifier是有bug的。
对于iOS设备,在iOS7之前可以获得设备MAC地址的hash值,但在iOS7及之后的设备无法获取正确值。
对于Android设备,一般会返回ANDROID_ID的md5值。
对于Windows Standalone设备会返回由硬件(主板、BIOS、处理器、磁盘驱动等)序列号组成的字符串的h...
方法1. 通过谷歌server的jar包来获取,整个jar包太大.12mb.放弃
方法2. 通过basement的jar包来获取.比较小.300来k的样子,很容易获取(注意:此方法需要在子线程执行)
获取jar包
try {
Advert...
Google Advertising ID (广告ID)
广告id是用户特殊的,独特的,可重置的广告id,由Google Play Service 提供,它为用户更好的控制,为开发人员提供简单、标准的系统继续使用你的应用程序,它用于广告目的的匿名标示符和或者重置起标示符或者退出以利益为基础的Google Play的医用程序。
广告 ID 可以通过简单的API在你的应用程序中实现。
5、获取外网Ip(本地没法获取外网IP,需要访问专门提供访问者IP的外网地址获取,以下脚本中访问的是亚马逊的地址,也可自己编写,修改放问地址)3、获取设备唯一标识码(利用UnityEngine的SystemInfo类)1、获取设备名称(利用UnityEngine的SystemInfo类)2、获取设备模型(利用UnityEngine的SystemInfo类)6、获取网卡MAC地址列表。
对于Google推荐使用Google Advertising ID,通过Google Service可以获取Google Advertising ID(如果没有Google Service就获取不到Google Advertising ID)。所以AndroidId并不能作为唯一识别码。Android 市面上其实有很多获取唯一标识的方法,但是海外广告投放时有很多时候都需要用到广告ID ,也就是 Google Advertising ID 简写 ADID.AdvertisingIdClient类。
两者都可以使用!
play-services-ads-identifier 代替 play-services-ads,只导入广告 ID 类,而不导入 Google Mobile Ads/AdMob,减少包体积。
注意:getAdvertisingIdInfo 方法是耗时
讲解当前环境下 获取安卓手机设备唯一标识的可行方案, 分析优劣势以及容易踩的坑.
公司开发的游戏需要对用户设备进行标识,获得一个稳定可靠并且唯一的识别码,来作游客登录。并考虑后续玩家从游客换成账户登录数据要同步过来。
虽然Android系统中提供了这样设备识别码,但是由于Android系统版本、厂商定制系统中的Bug等限制,稳定性和唯一性并不理想。而通过其他硬件信息标识也因为系统版本、手机硬件等限制存在不同程度的问题。
下面汇总了一些能作为设备唯一标识的方案。
方案大致分为三个方向
安卓系统原生