java - Unity Android 获取 Google Play 广告 ID

标签 java c# android unity-game-engine

我正在尝试在 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/

相关文章:

c# - 使用 Request.UrlReferrer 保留 url 哈希值

c# - HttpClient 的进度条

java - 布局显示不正确

C# 有抽象类和接口(interface),它也应该有 "mixins"吗?

android - 当我添加工具时发生了什么 :replace ="android:appComponentFactory"

android - 在 AndroidManifest.xml 中哪里添加 Intent 过滤器?

java - 在 Windows 中使用 jmx 和 jconsole for Solr

java - mViewPager.getCurrentItem() 没有返回第一个和最后一个寻呼机的正确位置

java - 如何增加 selenium chrome 驱动程序的页面加载超时

Java CMS GC 行为