【问题标题】:How to fix the Android AdMob "Unable to obtain a JavascriptEngine" error?如何修复 Android AdMob“无法获取 JavascriptEngine”错误?
【发布时间】:2020-09-23 03:37:57
【问题描述】:

MainActivity

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>
    

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

【问题讨论】:

标签: android admob javascript-engine


【解决方案1】:

可能不是适合所有人的解决方案,但为我解决了这个问题:别忘了关闭各种广告拦截器

我配置了一个广告拦截器 DNS,我花了一些时间才弄明白。

【讨论】:

  • 这是正确的答案,我在安装了 adblocker 的 root 设备上遇到了同样的错误(幸运的补丁程序),当我在 adblocker 上重新启用广告时,错误不再存在。
  • 另外,如果你像我一样有 pi-hole,就会发生这种情况。这个答案很有帮助。
  • 当您在设备连接上使用手动代理时也会发生这种情况
【解决方案2】:

大多数情况下,AdMob 在模拟器上的表现不如预期,因为模拟器上没有类似 Play 商店服务之类的东西。在真实设备上试用。有时在模拟器上冷启动可以解决问题。

【讨论】:

    【解决方案3】:

    我正在为 WIFI 使用手动代理,广告忘记更改,发生在我身上的这个奇怪的事情是 onAdFailedToLoad 中的 Unable to obtain a JavascriptEngine,只是通过长按将 WIFI 网络修改为代理>无在已连接的 WIFI 上

    【讨论】:

      【解决方案4】:

      在使用原生广告时,我在 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
      }
      

      【讨论】:

      • 如果它看起来像我得到的那样,则不需要解决方案,因为该应用程序已被修改,因此它不再是同一个应用程序,因为它可能有自己的错误,你不能修复,甚至不应该关心它。
      • 我在使用调试版本时确实遇到了这个问题。该应用程序依赖于 React Native,并通过原生桥接器访问 Admob。这可能会产生影响。
      • @gbero 你能重现它吗?如果有,请向 Google/Admob 报告。
      【解决方案5】:

      我遇到了同样的问题,我只是通过更换设备来解决它。详细信息:我为原生 android 集成了 google admob 和中介。根据谷歌教程,在为三星 s7 构建时,我遇到了“无法获得 JavascoptEngine”的问题。之后我找到了解决该问题的方法,但没有任何改变。我尝试使用另一台设备(shark 1)并加载了广告. 如果您遇到同样的问题,请尝试使用其他设备。

      【讨论】:

      • 这是否意味着广告永远不会在三星 s7 上展示?或者有时会显示,有时会出现此错误?
      • 这不能是一个公认的答案,因为它不能解决问题。您将如何为所有用户“更换设备”?
      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2019-11-15
      • 2016-06-13
      • 2017-07-13
      相关资源
      最近更新 更多