GoogleAuthUtil.getToken SecurityException

15

尝试调用GoogleAuthUtil.getToken(args)时,在最新的Google Play服务中,我在一台ICS设备上遇到了此故障。通过从手机中删除并添加Google帐户来解决了这个问题。我无法复现这个错误。通过搜索堆栈跟踪,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)"
  • 设备上的 Google Play 服务版本为 4.0.31

已将库更新为 4.0.30 并在清单中添加所请求的权限,似乎已经解决了问题。 正在等待谷歌确认新库版本是否修复了此问题,因为添加新权限是一种不太理想的解决方法。

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


2
您是否正在请求com.google.android.providers.gsf.permission.READ_GSERVICES权限,正如错误所示? - acj
2
不需要,Google Play服务的文档也没有说我需要。此外,我似乎无法重现这个错误 - 大多数情况下,它可以在不请求该权限的情况下正常工作。我想我可以将该权限添加到清单中,并希望它能防止出现问题。谢谢! - zavidovych
1
我们的应用也出现了这种情况。今天已经有1200次崩溃报告了,越来越多的用户受到了影响。我们正在准备一个补丁程序,包括以下更改:1. 添加READ_GSERVICES权限 2. 使用最新的Google Play服务API。希望在我们发布之前,Google能够解决这个问题。 - SXC
今天我也收到了这个崩溃报告。 - Maragues
1
我也遇到了这个问题...这是Android的一个已报告的错误:http://code.google.com/p/android/issues/detail?id=61934 似乎这个错误是由Google Play服务4.0引入的。我已经在我的应用程序中添加了com.google.android.providers.gsf.permission.READ_GSERVICES权限,并将在接下来的几天内查看它是否有所帮助... - petrsyn
显示剩余14条评论
2个回答

2

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

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

如果有人能够重现这个bug,请告诉我们4.0.33是否为您修复了它。(我们从安装基数中获得了无数跟踪,但从未能够在开发设备上重现该错误。)

[更新] Google肯定推出了一个修复程序,我们在11月15日只收到了少量报告,在11月16日则没有任何报告。


应用商店确实显示服务昨天(11月14日)已更新 - https://play.google.com/store/apps/details?id=com.google.android.gms - stan0

2

你应该添加

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

只需将代码添加到AndroidManifest.xml文件中即可。就这么简单。


6
这确实解决了问题,但很遗憾我们必须进行快速部署并请求新的权限,这总是会阻止用户升级。 - Maragues
6
我希望听Google关于是什么原因导致了这个问题的说明,以及Google是否能够在不要求应用程序添加此权限的情况下消除对getToken()的权限依赖。正如@Maragues所说,我们无法强制所有用户升级。这是一个非常严重的操作系统退化问题。 - mwk
1
我们不想添加任何不必要的权限。READ_GSERVICES文档不太完善。有人提到它是最糟糕的权限请求。 - SXC
如果您在应用程序中使用Google Maps,则必须包含此权限。我认为这没有任何害处。您正在使用Google的服务,因此应该获得使用它们的许可。但仅为了获取此权限而升级是很遗憾的。 - tasomaniac
1
在添加权限之前,我们也希望能够听到来自Google的官方消息。最终,我想我们要么添加这个神秘的权限,要么删除GPS。但如果Google能够确认问题并说明他们可以采取什么措施来防止类似的问题发生,那就太好了。我们不能让我们的用户安装基础突然出现问题,唯一拯救我们的是我们已经将所有GPS调用都包装在完整的try/catch中。但我们下一个版本需要认证,所以我们需要选择一个解决方案。 - mwk
显示剩余2条评论

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