android 安全异常-Google证书结果:不允许

tyu7yeag  于 2022-12-02  发布在  Android
关注(0)|答案(8)|浏览(524)

我们有一个拥有数百万用户的应用程序。在过去的一周里,我们收到了来自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版本和设备供应商之间蔓延。

46scxncf

46scxncf1#

这是Google Play服务中的一个问题,开发关系中的某个人证实了这一点。10月2日推出了一个修复程序,随着更多设备自动更新到最新版本(20.39.15),我们应该会看到这个问题的减少趋势。

4xrmg8kj

4xrmg8kj2#

如果任何人在使用MapView时仍然有这个错误,使用MapView,而不是片段实现,你可以尝试在初始化时添加以下代码:

MapsInitializer.initialize(context, MapsInitializer.Renderer.LATEST, listener)

谷歌从2022年6月开始逐步更新默认渲染,这可能会导致MapsInitializer.Render.LEGACY崩溃。
讨厌,但工作。更多的细节here

a2mppw5e

a2mppw5e3#

下面的解决方案是为我工作,你能试试吗
在Android的“app/build.gradle”中添加了依赖性

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

9udxz4iz4#

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

mf98qq94

mf98qq945#

尝试在创建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)
    ...
}
b5buobof

b5buobof7#

确保API_KEY正确地从项目中提取

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

kuuvgm7e8#

我发现在com.google.android.gms:play-services-basement@17.1.0有些像这样的:

package com.google.android.gms.common; 

import javax.annotation.Nullable;

@javax.annotation.CheckReturnValue
class zzl { zzl(boolean paramBoolean, @Nullable String paramString, @Nullable Throwable paramThrowable) { this.zzap = paramBoolean;
    this.zzaq = paramString;
    this.cause = paramThrowable; }
  
  static zzl zze() { return zzao; }
  static zzl zza(java.util.concurrent.Callable<String> paramCallable) { return new zzn(paramCallable, null); }
  static zzl zzb(@androidx.annotation.NonNull String paramString) { return new zzl(false, paramString, null); }
  static zzl zza(@androidx.annotation.NonNull String paramString, @androidx.annotation.NonNull Throwable paramThrowable) { return new zzl(false, paramString, paramThrowable); } @Nullable
  String getErrorMessage() { return this.zzaq; }
  final void zzf() { if ((!this.zzap) && (android.util.Log.isLoggable("GoogleCertificatesRslt", 3))) {
      if (this.cause != null) {
        android.util.Log.d("GoogleCertificatesRslt", getErrorMessage(), this.cause);return; }
      android.util.Log.d("GoogleCertificatesRslt", getErrorMessage()); } }
  
  static String zzc(String paramString, zzd paramzzd, boolean paramBoolean1, boolean paramBoolean2) { String str = paramBoolean2 ? "debug cert rejected" : "not whitelisted";
    
    zzd localzzd = paramzzd;{ str, paramString }[2] = 
    

      com.google.android.gms.common.util.Hex.bytesToStringLowercase(com.google.android.gms.common.util.AndroidUtilsLight.zzj("SHA-1").digest(localzzd.getBytes())); Object[] 
      tmp50_28 = tmp28_24;tmp50_28[3] = 
      Boolean.valueOf(paramBoolean1); Object[] tmp57_50 = tmp50_28;tmp57_50[4] = "12451009.false";
    return String.format("%s: pkg=%s, sha1=%s, atk=%s, ver=%s", tmp57_50); }
  private static final zzl zzao = new zzl(true, null, null);
  final boolean zzap;
  private final String zzaq;
  private final Throwable cause;
}

类似的错误消息。

相关问题