5

我正在开发一个最小的测试应用程序,以使用 AndroidX 库获取 Google Advertising ID。我尝试按照 Google 的文档检索广告 ID:https ://developer.android.com/training/articles/ad-id

但是,AdvertisingIdClient.isAdvertisingIdProviderAvailable()总是返回 false,并且,正如预期的那样,onFailure()future 回调的方法被触发,但异常No compatible AndroidX Advertising ID Provider available.。我已经在 3 部手机上对此进行了测试,其中 1 部有 SIM 卡和运营商(Android 9),而其中 2 部没有(Android 9 和 10)。

我找不到任何有关如何获取或使用“Androidx 广告 ID 提供程序”来使我的最小示例工作的文档(即检索我可以在调试器或日志中看到的广告 ID,即使它没有被使用任何地方)。任何人都可以阐明解决此异常吗?这是我正在使用的代码。我在调用MoreExecutors.directExecutor()中添加了一个调用,addCallback因为谷歌的代码不能按原样工作(看起来它已经过时了)。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val isProviderAvailable: Boolean = AdvertisingIdClient.isAdvertisingIdProviderAvailable(this)
        Log.i("Provider is available: ", isProviderAvailable.toString())
        val x = Runnable { run { determineAdvertisingInfo() } }
        x.run()
    }
    private fun determineAdvertisingInfo() {
        val advertisingIdInfoListenableFuture =
            AdvertisingIdClient.getAdvertisingIdInfo(applicationContext)
        addCallback(
            advertisingIdInfoListenableFuture,
            object : FutureCallback<AdvertisingIdInfo> {
                override fun onSuccess(adInfo: AdvertisingIdInfo?) {
                    val id: String? = adInfo?.id
                    val providerPackageName: String? = adInfo?.providerPackageName
                    val isLimitTrackingEnabled: Boolean? = adInfo?.isLimitAdTrackingEnabled
                }
                override fun onFailure(t: Throwable) {
                    Log.e("=====", "Failed to connect to Advertising ID provider.")
                }
            }, MoreExecutors.directExecutor()
        )
    }
}

分级文件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "redacted"
        minSdkVersion 14
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'androidx.ads:ads-identifier:1.0.0-alpha03'
    implementation 'com.google.guava:guava:28.0-android'
    implementation 'com.google.android.gms:play-services-analytics:17.0.0'
}

我不为此致力于 Kotlin,所以如果你有 Java 解决方案,请发表。

4

0 回答 0