web-dev-qa-db-ja.com

androidで広告IDプロバイダーを取得できません

アプリの広告IDを取得したいのですが、うまくいきません。

import androidx.ads.identifier.AdvertisingIdClient;
import androidx.ads.identifier.AdvertisingIdInfo;

public class addUtilsJava extends AsyncTask<Context, String, String> {

    static String TAG = "addUtilsJava";


    private String getIdThread(Context context) {

        AdvertisingIdInfo adInfo = null;
        try {
            adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context).get();

        } catch (Exception exception) {
            exception.printStackTrace();
        }
        if (adInfo != null) {
            final boolean isLAT = adInfo.isLimitAdTrackingEnabled();
            return adInfo.getId();
        }
        return null;
    }
    @Override
    protected String doInBackground(Context... contexts) {
        return getIdThread(contexts[0]);
    }
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        if (s != null)
            Log.d(TAG, s);
    }
}

それは私を示唆している例外をスローしますandroidx.ads.identifier.AdvertisingIdNotAvailableException: No Advertising ID Provider available。私は2つの携帯電話とエミュレータで試してみましたが、すべて同じ結果でした。

前もって感謝します

pS:私はAndroid docで提供されているソリューションをチェックしますが、それは動作しませんhttps ://developer.Android.com/training/articles/ad-id
そして私は依存関係を必要としないソリューションを持っています

5
nima moradi

このコードを試してみてください。

import com.google.Android.gms.ads.identifier.AdvertisingIdClient;
import com.google.Android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.Android.gms.common.GooglePlayServicesRepairableException;
import Android.widget.Toast;
public class MainActivity extends AppCompatActivity {
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
                    @Override
                    protected String doInBackground(Void... params) {
                        AdvertisingIdClient.Info idInfo = null;
                        try {
                            idInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
                        } 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(getApplicationContext(), advertId, Toast.LENGTH_LONG).show();
                    }

                };
                task.execute();

}

}

build.gradleに追加された依存関係

dependencies {
        implementation 'com.google.Android.gms:play-services-ads-lite:18.1.1'
}
0
Moorthy

トレーニングサンプル で説明されているように、コールバックで使用してみてください。メインスレッドからすべての呼び出しを行います。それが役に立てば幸い

0
Dmytro Batyuk

以下はKotlinの実用的なソリューションです。

まず、このルールをアプリモジュールレベルに追加しますbuild.gradle依存関係にあるファイル:
implementation 'com.google.Android.gms:play-services-ads-lite:11.8.0'

これはAddUtilsJavaクラスです:

package com.example.myapplication


import Android.content.Context
import Android.os.AsyncTask
import Android.util.Log
import com.google.Android.gms.ads.identifier.AdvertisingIdClient
import com.google.Android.gms.common.GooglePlayServicesNotAvailableException
import com.google.Android.gms.common.GooglePlayServicesRepairableException
import Java.io.IOException

class AddUtilsJava : AsyncTask<Context, String, String>() {

    private fun getIdThread(context: Context): String? {
        var idInfo: AdvertisingIdClient.Info? = null
        try {
            idInfo = AdvertisingIdClient.getAdvertisingIdInfo(context.applicationContext)
        } catch (e: GooglePlayServicesNotAvailableException) {
            e.printStackTrace()
        } catch (e: GooglePlayServicesRepairableException) {
            e.printStackTrace()
        } catch (e: IOException) {
            e.printStackTrace()
        }

        var advertId: String? = null
        try {
            advertId = idInfo!!.id
        } catch (e: NullPointerException) {
            e.printStackTrace()
        }

        return advertId
    }

    override fun doInBackground(vararg contexts: Context): String? {
        return getIdThread(contexts[0])
    }

    override fun onPostExecute(s: String?) {
        super.onPostExecute(s)
        if (s != null)
            Log.d(TAG, s)
    }

    companion object {
        internal var TAG = "addUtilsJava"
    }
}

これはbuild.gradleファイルです。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'

    implementation 'com.google.Android.gms:play-services-ads-lite:11.8.0' //for ads

    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
    testImplementation 'junit:junit:4.13-beta-3'
    androidTestImplementation 'androidx.test:runner:1.3.0-alpha02'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-alpha02'
}
0