我正在尝试在 Unity 中获取 google play 广告 ID,但它似乎根本不起作用。
这是我在几个 SO 中找到的代码,例如 this one :
AndroidJavaClass up = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = up.GetStatic<AndroidJavaObject> ("currentActivity");
AndroidJavaClass client = new AndroidJavaClass ("com.google.android.gms.ads.identifier.AdvertisingIdClient");
AndroidJavaObject adInfo = client.CallStatic<AndroidJavaObject> ("getAdvertisingIdInfo",currentActivity);
advertisingID = adInfo.Call<string> ("getId").ToString();
using(AndroidJavaClass pluginClass = new AndroidJavaClass("example.com.Toast")) {
if(pluginClass != null) {
toastClass = pluginClass.CallStatic<AndroidJavaObject>("getInstance");
activityContext.Call("runOnUiThread", new AndroidJavaRunnable(() => {
toastClass.Call("toastMessage", advertisingID);
}));
}
}
我必须在实际设备上执行此操作,并且还没有找到实际记录任何内容(保存 Toast 消息)的好方法,该消息在这里不显示任何内容。但如果我这样做(获取 Android 设备 ID),toast 就会显示得很好。
AndroidJavaClass up = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = up.GetStatic<AndroidJavaObject> ("currentActivity");
AndroidJavaObject contentResolver = currentActivity.Call<AndroidJavaObject> ("getContentResolver");
AndroidJavaClass secure = new AndroidJavaClass ("android.provider.Settings$Secure");
string android_id = secure.CallStatic<string> ("getString", contentResolver, "android_id");
知道我应该如何获取 Google Play 广告 ID?
我也尝试过在 jar 代码本身中执行此操作,如下所示:
AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
AdvertisingIdClient.Info idInfo = null;
try {
idInfo = AdvertisingIdClient.getAdvertisingIdInfo(ToastCLass.getInstance().context);
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String advertId = null;
try{
advertId = idInfo.getId();
}catch (NullPointerException e){
e.printStackTrace();
}
return advertId;
}
@Override
protected void onPostExecute(String advertId) {
Toast.makeText(ToastClass.getInstance().context, advertId, Toast.LENGTH_LONG).show();
}
};
task.execute();
但这只会在我的应用程序运行时导致错误(我认为是因为它试图在 UI 线程上运行 AsyncTask?)。再次困难,因为我还没有真正找到显示日志/错误的方法。
如果我在模拟器上运行我的应用程序,我似乎可以访问日志,这确实有助于注销信息。
最佳答案
我知道这个答案有点晚了,但这可能对面临此问题的人有所帮助。
首先汤姆给出的答案是正确的,它有效。但出现此错误的原因是,当我们添加包的 aar 文件时,我们没有包含它所具有的所有依赖项。实际上,您可以通过检查 pom 文件来做到这一点。
因此,为了避免此错误,您只需将 play-services-ads-identifier-16.0.0.aar
包与 play-service-ads 一起添加即可。
您可以在 here 中找到此软件包
关于java - Unity Android 获取 Google Play 广告 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582610/