Unity中的设备唯一码GAID、IDFA,用于广告跟踪和数据统计
當前可以唯一標識設(shè)備,用于程序的數(shù)據(jù)收集和統(tǒng)計的ID
ANDROID:
國外:
GAID:廣告id,即Google Advertising ID(GAID),是由Google Play service提供給用戶的可以重置的唯一廣告id,通常也被用來作為設(shè)備的唯一標識,用于數(shù)據(jù)收集。但用戶手機上必須安裝有g(shù)oogle play服務(wù),并且網(wǎng)絡(luò)可以訪問google,才可以獲取到該id。(該廣告id也被稱為AAID —— Android Advertising ID)。由于可以被重置,因此是非永久性標識符。
PS:這里的“重置”指的是在Android系統(tǒng)“設(shè)置”里,將Google服務(wù)將GAID重置,重置之后會生成一個新的GAID。卸載后重裝某個應(yīng)用并不會改變GAID值,只有在系統(tǒng)設(shè)置中執(zhí)行指定操作后才會重置GAID。?GAID的作用在于對用戶喜好進行跟蹤,然后推送跟喜好相關(guān)的廣告。開啟或關(guān)閉該服務(wù)并不會減少廣告的數(shù)量,只是關(guān)閉之后推送的廣告是隨機選擇的,而不是根據(jù)用戶喜好來推送相關(guān)內(nèi)容的廣告。
重置GAID:? "Setting" -> "Ads"
? ??
如何獲取設(shè)備的GAID?
有兩種方式:
一種是直接在手機設(shè)置“Setting -> Ads”中查詢,如上圖所示。
但是對于國內(nèi)Android系統(tǒng)是沒有谷歌服務(wù)的,在重新安裝了Google三件套后依然無法在系統(tǒng)設(shè)置中找到“Google”或者“Ads”選項,此時是無法直接從手機設(shè)置中獲取到GAID的,需要借助第三方軟件才能查看到,這里推薦google play store 的“AAID”:
第二種則是通過代碼獲取:
?1.獲取當前設(shè)備的GAID以及廣告跟蹤狀態(tài):
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";//獲取廣告跟蹤狀態(tài):當為false時,則無法根據(jù)用戶行為定向推送廣告,但看到的廣告數(shù)量并不會減少adTrackLimited = jo2.Call<bool>("isLimitAdTrackingEnabled");}return advertisingId; }運行結(jié)果如下:
PS:“isLimitAdTrackingEnabled”:是否限制跟蹤用戶行為以便投放相應(yīng)廣告,當為false時則無法根據(jù)用戶行為來投放廣告,但看到的廣告數(shù)量不會減少。默認為false,表示可以會跟蹤用戶行為
注意:
1.如果只是為了獲取安卓設(shè)備的GAID,則并不需要導(dǎo)入任何其他插件,只用在custom后的 mainTemplate.gradle的依賴關(guān)系中添加: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' 即可成功調(diào)用獲取GAID的方法,項目源碼:獲取安卓設(shè)備廣告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”,所以不要填錯依賴關(guān)系。
各個Google相關(guān)的信息與依賴關(guān)系可查閱官方Guide:https://developers.google.com/android/guides/setup
2.檢測當前設(shè)備Google Play服務(wù)是否可用?
//該方法已驗證,可以正常得到返回結(jié)果,用于獲取當前設(shè)備的google play服務(wù)狀態(tài)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”需要導(dǎo)入Google Play Games插件到項目中才可以正常被調(diào)用。
https://github.com/playgameservices/play-games-plugin-for-unity
項目實測:Unity2018.4.1f1,GooglePlayGamesPlugin-0.10.14.unitypackage
運行結(jié)果:
?項目源碼:獲取安卓設(shè)備的googleplayservice狀態(tài)以及GAID,和廣告跟蹤-Unity3D文檔類資源-CSDN下載
國內(nèi):
1.IMEI:可以唯一標識一個設(shè)備,并且無法重置,是運營商識別入網(wǎng)設(shè)備信息的代碼。世界上每一個IMEI都不相同。由于無法重置,因此是永久標識符。
由于IMEI具有唯一性和穩(wěn)定性,因此當前國內(nèi)大量使用的都是IMEI。但隨著安卓版本升級,到Android 10后,由于Google在隱私保護上的加強,Android Q已經(jīng)無法再獲取到設(shè)備的IMEI碼。
2.OAID:鑒于國內(nèi)的特殊環(huán)境,無法使用GAID,并且隨著安卓系統(tǒng)Android 10的普及,已經(jīng)無法再獲取到IMEI,所以近期由中國移動安全聯(lián)盟開發(fā)的OAID——Open Anonymous Device Identifier,具有穩(wěn)定性和唯一性,可以用來唯一標識設(shè)備。并且該ID還可以用于廣告跟蹤,可以被重置,所以通常也被用來替代國外的GAID,達到一樣的效果。但目前直到Android 10后才逐漸被使用,下圖為當前支持OAID的國內(nèi)終端:
IOS:
與之相對應(yīng)的,在IOS設(shè)備上,該廣告id為“IDFA”,即Identifier For Advertising,是ios為每個用戶設(shè)置的唯一廣告id。由于IOS設(shè)備在國內(nèi)外都可以正常使用,因此IOS設(shè)備都使用IDFA來作為唯一標識。
Unity為IOS提供了獲取Advertising ID的方法:
//該方法當前尚沒有在IOS設(shè)備上得到直接驗證 Application.RequestAdvertisingIdentifierAsync((string advertisingId, bool trackingEnabled, string error) =>{ Debug.Log("advertisingId " + advertisingId + " " + trackingEnabled + " " + error); });注:ATT窗口 —— 為了加強用戶隱私,IOS14推出ATT窗口:如因跟蹤目的收集用戶數(shù)據(jù),需先取得用戶授權(quán)才能得到該IOS設(shè)備的IDFA,否則應(yīng)用獲取到的IDFA數(shù)據(jù)為空。
PS:
1.導(dǎo)入GoogleMobileAds???????插件后報錯(本項目并不需要導(dǎo)入該插件,之所以遇到該問題是因為在開發(fā)時恰好碰到了,所以記錄下):
導(dǎo)入谷歌廣告的Unity插件時,默認會使用當前最新的版本 —— GoogleMobileAds-v7.0.0.unitypackage。但對于Unity的早期版本如Unity2018.4.1f1是不支持package中有對Timeline的依賴關(guān)系的,所以Unity2018.4.1f1導(dǎo)入當前最新版的“GoogleMobileAds-v7.0.0.unitypackage”后會報錯:
解決辦法:更新Unity版本,如換成Unity2019即可;或者下載GoogleMobileAds的早期版本,如
經(jīng)測試,在Unity2018.4.1f1中導(dǎo)入“GoogleMobileAds-v3.18.3.unitypackage”后沒有如上報錯了
2.解析依賴失敗:在手動解析依賴時,點擊“Resolve”后沒有反應(yīng)
?出現(xiàn)這種情況有可能是因為:當?shù)谝淮螌?dǎo)入GoogleMobileAds-v3.18.3.unitypackage插件后,Unity會自動的解析依賴關(guān)系,但由于時間過長,那個展示解析進度的窗口被人為打斷了。后面再次點擊“Resolve”是沒有反應(yīng)的。此時查看“mainTemplate.gradle”發(fā)現(xiàn)沒有任何改變,依賴關(guān)系都沒有被添加進來,說明本次解析依賴沒有成功。
解決辦法:點擊截圖中的“Delete Resolved Libraries”,然后將項目關(guān)閉后再重新打開,再次點擊“Resolve”即會重新開始解析依賴。彈出如下窗口則代表解析依賴成功
總結(jié)
以上是生活随笔為你收集整理的Unity中的设备唯一码GAID、IDFA,用于广告跟踪和数据统计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不注册Nvidia账号下载cuDNN的方
- 下一篇: JavaScript高级程序设计之表单基