安全异常 - GoogleCertificatesRslt:不允许。

86
我们拥有一款有数百万用户的应用程序。在过去的一周中,我们从 Firebase Crashlytics 接收到了约 30 条“速度警报”通知,来自旧版本的应用程序,其中包含以下错误信息:
Fatal Exception: java.lang.SecurityException
GoogleCertificatesRslt: not allowed: pkg=com.example.app, sha1=<sha1 redacted>, atk=false, ver=203914019.true (go/gsrlt)
android.os.Parcel.readException (Parcel.java:1959)
android.os.Parcel.readException (Parcel.java:1905)
com.google.android.gms.common.internal.s.r (s.java:37)
com.google.android.gms.common.internal.W.u (W.java:90)
com.google.android.gms.common.api.internal.At.q (At.java:17)
com.google.android.gms.common.api.internal.rt.run (rt.java:5)
java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:457)
java.util.concurrent.FutureTask.run (FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:636)
com.google.android.gms.internal.ef.run (ef.java:6)
java.lang.Thread.run (Thread.java:764)

这并没有影响到很多用户,可能只有几百到一千人。通常情况下,我们不会太在意这么小的问题,但因为这似乎一再发生在这些用户身上,所以我们收到了所有这些速度警报——这让它更加明显。

为什么会这样?堆栈跟踪略有不同,但看起来与 Google 的 GMS 有关。

我们或者我们的用户是否有什么方法可以避免这种情况?

这个问题似乎在 Android 版本和设备供应商之间存在分散情况。


同时,80%的崩溃报告发生在后台而非前台。 - Pablo Escobar
有人找到了解决这个问题的方法吗? - Cyph3rCod3r
我的发现显示致命异常:java.lang.SecurityException: GoogleCertificatesRslt:使用未知证书签名的包(go/gsrlt)。这只会在Android 9设备上发生100%的情况。 - Cyph3rCod3r
8
过去五天中出现的上升趋势: (1) GoogleCertificatesRslt: Package signed with unknown certificate (go/gsrlt),适用于 Android 9 的 HE.java。 (2) GoogleCertificatesRslt: not allowed,适用于 Android 8 的 HT.java。 (3) GoogleCertificatesRslt: not allowed,适用于 Android 6 的 nK.java - nlmm01
在我的情况下,过去5天内有9个用户出现了75个错误。虽然不是很多,但数量正在增长。操作系统版本主要是9和8.x,设备制造商各不相同。几乎所有的异常情况都发生在 BOOT_COMPLETED 接收器完成工作之后(有时是1秒钟后,有时是20秒钟后)。用户甚至没有进入应用程序(只有一个例外情况是用户打开了应用程序)。 - Kenumir
显示剩余5条评论
15个回答

22

根据开发关系人员的确认,这是Google Play服务中存在的问题。该问题已于10月2日进行了修复,随着更多设备自动更新到最新版本(20.39.15),我们应该会看到此类问题逐渐减少。


11
您好,nlmm01。我想了解详情,您能提供详细信息吗?比如Google问题追踪链接之类的。谢谢。 - Elirex
1
我没有官方链接或文档可以提供,但是我从一位正在处理此问题的人那里得到了同样的消息。这是com.google.android.gms版本20.39.14中的一个错误,已在20.39.15中修复。那些使用完全相同版本的人 - 在等待升级时 - 可以通过升级其WebView实现来解决问题。 - Roy Solberg
我也遇到了我的应用程序相同的问题,主要发生在OS 9和8上。很奇怪所有的问题都发生在十月的第一周。关于这些问题还有更多的信息吗?在过去的三天里我没有看到任何问题,它可能已经被修复了吗? - bobby I.
这个问题正在修复中。最近我将我的应用程序定位到API 29,当我尝试发布我的应用程序更新时,预启动报告显示使用调试密钥签名的包在Android OS 8上崩溃。 - Sai Sunkari
2
但是我遇到了错误:无法解析:com.google.android.gms:play-services-maps:20.39.15 - gumuruh
显示剩余5条评论

16
如果有人在使用MapView而不是片段实现时仍然遇到play-services-maps错误,您可以尝试在初始化时添加以下代码:
MapsInitializer.initialize(context, MapsInitializer.Renderer.LATEST, listener)

Google从2022年6月开始逐步更新默认渲染,这可能会导致使用MapsInitializer.Render.LEGACY时崩溃。在我的情况下,确实如此。
有点烦人,但还是能用。更多详情请点击这里

2
令人惊讶的是,这解决了问题。而且它也为Compose解决了问题,因为在底层,Compose使用带有MapView的AndroidView。 - Kuruchy

12

以下解决方法适合我,你可以试试

在' app/build.gradle '中添加 Android 的依赖项

dependencies {
...
implementation 'com.google.android.gms:play-services-maps:18.1.0'
}

4

如果您第一次运行应用程序,请确保打开安卓设备的Wi-Fi。


2
在创建MapView对象之前(在布局被填充之前),尝试将此放置在代码中:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    MapsInitializer.initialize(this, MapsInitializer.Renderer.LATEST) {
        //println(it.name)
    }
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)
    ...
}

1
这段代码对我有效,感谢Álvaro Santos的帮助,使用以下代码行:MapsInitializer.initialize(this, MapsInitializer.Renderer.LATEST, new OnMapsSdkInitializedCallback() { @Override public void onMapsSdkInitialized(@NonNull MapsInitializer.Renderer renderer) { //println(it.name) Log.d("TAG", "onMapsSdkInitialized: "); } }); - Zonouzi


0

另一个由于Google API json密钥文件访问权限引起的情况,您可以将以下代码添加到Android的AndroidManifest.xml文件中:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

以及 IOS 的 Info.plist 文件

<key>NSLocationWhenInUseUsageDescription</key>
<string>Your message goes here</string>

0

请确保您的API_KEY从您的项目中正确获取

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="API_KEY" />

这并没有展示如何确保正确获取密钥。 - JCutting8

0

实际上我意识到问题与API密钥有关。在使用Firebase的Flutter项目中,我遇到了相同的错误。

在使用Google Cloud控制台上的密钥运行应用程序以解决问题后,我再次在Firebase中下载了google-services.json文件时发现了变化。 现在我的问题已经解决了。


0

对于那些遇到这个错误并且地图根本无法加载的人,请尝试使用Google Play设备而不是Google API设备。对我有用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接