如何修复Android AdMob“无法获取Javascript引擎”错误?

uqzxnwby  于 2023-01-03  发布在  Android
关注(0)|答案(8)|浏览(683)

第一个月

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        MobileAds.initialize(this) {}
        MobileAds.setRequestConfiguration(
            RequestConfiguration.Builder()
                .setTestDeviceIds(listOf("ABCDEF012345"))
                .build()
        )

        val adRequest = AdRequest.Builder().build()
        Log.d("Activity", "Is Test Device? : ${adRequest.isTestDevice(this)}")
        adView.loadAd(adRequest)

        adView.adListener = object : AdListener() {
            override fun onAdLoaded() {
                super.onAdLoaded()
                Log.d("Activity", "@@ onAdLoaded()")
            }

            override fun onAdFailedToLoad(err: LoadAdError?) {
                super.onAdFailedToLoad(err)
                Log.d("Activity", "@@ onAdFailedToLoad()\n$err")
            }

            override fun onAdOpened() {
                super.onAdOpened()
                Log.d("Activity", "@@ onAdOpened()")
            }

            override fun onAdClicked() {
                super.onAdClicked()
                Log.d("Activity", "@@ onAdClicked()")
            }

            override fun onAdLeftApplication() {
                super.onAdLeftApplication()
                Log.d("Activity", "@@ onAdLeftApplication()")
            }

            override fun onAdClosed() {
                super.onAdClosed()
                Log.d("Activity", "@@ onAdClosed()")
            }
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout                       
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id_for_test" />

</LinearLayout>

string.xml

<resources>
    <string name="admob_app_id">ca-app-pub-000000000000~00000000000</string>
    <string name="bannera_ad_unit_id_for_test">ca-app-pub-3940256099942544/6300978111</string>
</resources>

我在清单中创建了<meta-dat>,并添加了admob_app_id作为里面的android:value值。在Android Studio提供的AVD测试设备中,出现了一个测试广告,没有出现任何问题,但测试广告并没有出现在实际设备上,所以,和上面的MainActivity代码一样,我打电话给RequestConfiguration,把我的移动的设备ID("ABCDEF012345")加到测试设备ID中,但问题没有解决,错误内容如下。

yzxexxkh

yzxexxkh1#

可能不是每个人的解决方案,但为我修复了它:别忘了关闭各种广告拦截器
我有一个广告拦截DNS配置,花了我一些时间,终于弄清楚了。

t1qtbnec

t1qtbnec2#

我用的是手动代理的WIFI,忘了换,发生在我身上的奇怪事情是onAdFailedToLoad中的Unable to obtain a JavascriptEngine,只是通过长按已连接的WIFI,将高级选项中的WIFI网络修改为代理〉无来解决

olqngx59

olqngx593#

大多数情况下,AdMob在模拟器上无法按预期执行,因为它没有播放存储服务之类的功能。请在真实的设备上尝试。有时,在模拟器上进行**冷 Boot **可以解决问题。
1.访问AdMob策略中心查看任何未决违规。
1.不要使用VPN,不要使用代理服务器。
1.调试时,请确保使用测试广告单元ID。
1.在模拟器上执行冷 Boot 。
1.使用真实的设备代替模拟器。

p4tfgftt

p4tfgftt4#

在我的情况下,设备wifi是开着的,但没有互联网连接,一旦我修复了互联网问题,广告开始加载。

xeufq47z

xeufq47z5#

在proguard-rule文件中添加以下行

-keep class com.google.android.gms.ads.** { *; }
-keep class com.google.ads.** { *; }

另请阅读Proguard和AdMob
Proguard and AdMob mediation

h7wcgrx3

h7wcgrx36#

对于俄罗斯的AdMob是由谷歌阻止现在,否则你应该switchVPN上.

rjee0c15

rjee0c157#

我在Android上使用原生广告时遇到了类似的问题。错误信息非常相似:

code:0 message:Unable to obtain a JavascriptEngine. domain:com.google.android.gms.ads cause:null responseInfo:{
  "Response ID": "null",
  "Mediation Adapter Class Name": "",
  "Adapter Responses": []
}

但是,我有一个线索,这可能是原因:由于我注意到应用程序有时会出现奇怪的崩溃,我决定通过检查其签名来添加一个检查,以确保应用程序确实有效。
我发现,在这个案例中,至少有2台设备更改了应用程序(可能是同一个人更改的)。所以这个用户出于某种原因试图更改应用程序。不知道他试图用它做什么,但我希望这能解决你的问题。
如果你愿意,这里有一个基本的方法:

private var sIsValidInstall: Boolean? = null
private const val BYTE_SIZE_FOR_DEBUG_SIGNATURE=...
private const val CRC_FOR_DEBUG_SIGNATURE=...
private const val BYTE_SIZE_FOR_DEBUG_SIGNATURE=...
private const val CRC_FOR_DEBUG_SIGNATURE=...

@SuppressLint("PackageManagerGetSignatures")
fun isValidInstall(context: Context): Boolean {
    sIsValidInstall?.let { return it }
    var isValid = false
    val signatures = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
        context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNING_CERTIFICATES).signingInfo.apkContentsSigners
    else context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES).signatures
    for (signature in signatures) {
        val bytes = signature.toByteArray()
        if (bytes != null) {
            val bytesSize = bytes.size
            val checksum = CRC32()
            checksum.update(bytes, 0, bytes.size)
            val crc = checksum.value
            isValid = (BuildConfig.DEBUG && bytesSize == BYTE_SIZE_FOR_DEBUG_SIGNATURE && crc == CRC_FOR_DEBUG_SIGNATURE) || (!BuildConfig.DEBUG && bytesSize == BYTE_SIZE_FOR_DEBUG_SIGNATURE && crc == CRC_FOR_DEBUG_SIGNATURE)
            if (isValid)
                break

        }
    }
    sIsValidInstall = isValid
    return isValid
}
hwazgwia

hwazgwia8#

我遇到了同样的问题,我只是通过更换设备修复了它。详细信息:我集成了Google Admob和原生Android中介。基于Google教程,在为三星S7构建时,我遇到了“无法获得JavascroptEngine”的问题。之后我找到了解决这个问题的方法,但没有任何变化。我尝试使用另一台设备(Shark 1)并加载了广告。如果你遇到了同样的问题,请尝试使用另一台设备。

相关问题