【问题标题】:GoogleAuthUtil.getToken SecurityExceptionGoogleAuthUtil.getToken SecurityException
【发布时间】:2013-11-06 15:59:55
【问题描述】:

在尝试调用 GoogleAuthUtil.getToken(args) 时,我在具有最新 Google Play 服务的 ICS 设备上遇到此故障。该问题已通过删除 Google 帐户并将其添加到手机中得到解决。我无法重现该错误。谷歌搜索堆栈跟踪没有提供任何见解。任何有关如何防止此问题及其含义的想法都值得赞赏!

W/System.err( 3145): java.lang.SecurityException: Permission Denial: reading com.google.android.gsf.gservices.GservicesProvider uri content://com.google.android.gsf.gservices/prefix from pid=3145, uid=10055 requires com.google.android.providers.gsf.permission.READ_GSERVICES
W/System.err( 3145):    at android.os.Parcel.readException(Parcel.java:1327)
W/System.err( 3145):    at android.os.Parcel.readException(Parcel.java:1281)
W/System.err( 3145):    at com.google.android.gms.internal.a$a$a.a(Unknown Source)
W/System.err( 3145):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
W/System.err( 3145):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
W/System.err( 3145):    at com.xxxxx.Backend.obtainSheetKeyAndInitService(Backend.java:112)
W/System.err( 3145):    at com.xxxxx.Backend.fetchColumns(Backend.java:103)
W/System.err( 3145):    at com.xxxxx.ProgressActivity$DummySectionFragment$3.doInBackground(ProgressActivity.java:288)
W/System.err( 3145):    at com.xxxxx.ProgressActivity$DummySectionFragment$3.doInBackground(ProgressActivity.java:1)
W/System.err( 3145):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
W/System.err( 3145):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W/System.err( 3145):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err( 3145):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
W/System.err( 3145):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err( 3145):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err( 3145):    at java.lang.Thread.run(Thread.java:856)

编辑

截至报告错误时:

  • google_play_services-lib android:versionName="3.2.65 (834000-30)"
  • 设备 4.0.31 上的 Google Play 服务版本

将库更新到 4.0.30 并向清单添加了请求的权限,这似乎有效。等待 Google 确认新的库版本修复了这个问题,因为添加新权限是非常不受欢迎的修复。

错误报告:http://code.google.com/p/android/issues/detail?id=61934

【问题讨论】:

  • 您是否按照错误提示请求com.google.android.providers.gsf.permission.READ_GSERVICES 权限?
  • 不,Google Play 服务的文档并没有说我应该这样做。此外,我似乎无法重现此错误 - 大多数情况下它无需请求该许可即可工作。我想我可以将该许可放入 Manifest 并希望它可以防止问题发生。谢谢!
  • 您能否更新您的问题以包含发生错误时您使用的 Google Play 服务版本?看起来这可能是最新版本中的一个错误。
  • 我们的应用程序也发生了这种情况。今天发生了 1200 次崩溃。越来越多的用户受到影响。我们现在正在准备一个补丁,其中包含以下更改: 1. 添加 READ_GSERVICES 权限 2. 使用最新的 Google Play Service Api。希望谷歌能在我们发布之前修复它。
  • 也有这个问题... 报告了 Android 错误:code.google.com/p/android/issues/detail?id=61934 Google Play Service 4.0 似乎引入了这个错误。我已将 com.google.android.providers.gsf.permission.READ_GSERVICES 权限添加到我的应用中,并会在接下来的几天内查看它是否有帮助...

标签: android google-play-services


【解决方案1】:

你应该添加

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

AndroidManifest.xml 文件。就是这样。

【讨论】:

  • 这确实解决了这个问题,但我们不得不进行快速部署以请求新权限,这总是让用户无法升级
  • 我想听听 Google 关于导致此问题的原因,以及 Google 是否可以在不要求应用添加此权限的情况下删除 getToken() 的此权限依赖项。正如@Maragues 所说,我们无法强制所有用户升级。这是一个非常严重的操作系统回归
  • 我们不想添加任何不必要的权限。 READ_GSERVICES 没有很好的文档记录。有人提到这是最糟糕的要求。
  • 如果您在应用中使用 Google 地图,则必须包含此权限。我看不出这有什么害处。您正在使用 Google 的服务,并且您应该获得使用它们的许可。只是为了这个权限而升级是可悲的。
  • 在添加权限之前,我们还想听听 Google 的官方消息。最终我想我们要么添加神秘许可,要么移除 GPS。但如果谷歌能够确认这个问题以及他们可以做些什么来防止将来出现类似问题,那就太好了。我们不能让我们的已安装用户群突然像这样中断,唯一能救我们的是我们将所有 GPS 调用都包含在一个完整的 try/catch 中。但是我们的下一个版本需要身份验证,所以我们需要选择一个解决方案。
【解决方案2】:

今天 2013 年 11 月 14 日,由于此异常,我们收到的错误报告数量大幅下降。我还看到 Google Play Services 版本 4.0.33 已经发布,我没有注意到它发布的确切时间,但看起来就像昨天一样。

也许 Google 在 4.0.33 中发布了修复?那太好了!

如果有人能够重现此错误,请告诉我们 4.0.33 是否为您修复了它。 (我们从未能够在开发设备上重现该错误,尽管我们已经从我们的安装基础中获得了数以百万计的痕迹。)

[更新] Google 确实推出了一个修复程序,我们在 11 月 15 日只有少数报告,而在 11 月 16 日则为零

【讨论】:

猜你喜欢
  • 2015-03-28
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2014-01-31
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多