2013-08-26 158 views
40

我有一个应用程序,实施了推送通知。使用GCM时的GET_ACCOUNTS权限 - 为什么需要这样做?

我想理解为什么我们需要“GET_ACCOUNTS”(android.permission.GET_ACCOUNTS),同时实现GCM?一些用户正在对此权限提出担忧。我在清单中使用了此许可,因为它在官方网站here中给出。

此权限有多安全?如果我从我的清单中删除这个推送通知的工作?

+0

你有没有试过* *推送通知没有GET_ACCOUNTS许可?看起来,尝试它比询问和等待答复要快。一旦知道,请将结果发布为答案。 – 323go

+0

GET_ACCOUNT用于验证用户是否同步了移动版Google帐户,并为每个用户(每个Google帐户)生成关键值。如果设备运行的版本低于Android 4.0.4,则这是必需的。 –

+0

Okie ..除此之外,还有其他方式可以做到吗? –

回答

57

它使用Google服务的现有连接。对于3.0 之前的设备,这需要用户在其 移动设备上设置Google帐户。运行Android 4.0.4或更高版本的设备 上不需要Google帐户。

所以这是允许

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

阅读谷歌帐户的要求的原因。

了解更多关于这个GCM Overview


谷歌帐户登录时不再需要GCM工作。所以你不需要android.permission.GET_ACCOUNTS权限。

如果您使用GCG API和GoogleCloudMessaging.register),则不再需要在任何Android版本上配置Google帐户。但是,如果您使用的是过时的库(GCMRegistrar.register),则旧版本(ICS之前)仍需要Google帐户。

更多详情,请登录https://groups.google.com/forum/#!topic/android-gcm/ecG-RfH-Aso。另一个similer线程是Why google Account login is required for GCM to work for devices below 4.0.4 OS?

+0

Okie ..有没有其他的方式来做到这一点,没有在明确表明这一点? –

+5

@VamsiChalla:所有权限必须位于清单中。但是,如果您的'android:minSdkVersion'设置为14或更高,我会将该文档解释为意味着您不需要此权限。 – CommonsWare

+0

@CommonsWare,感谢您的信息.. –

0

GET_ACCOUNT是验证用户是否同步了手机中的Google帐户,并为每个用户(每个Google帐户)生成键值。如果设备运行的版本低于Android 4.0.4,则这是必需的。

1

我不认为这是事实。我使用新的Gmail帐户在新设的工厂重置姜饼设备上进行了测试,未经许可即可收到GCM消息。所以文档是错误的。

12

GCM不再需要GET_ACCOUNTS权限才能工作。它曾经是向GCM注册所必需的,但最近的Play服务更新甚至在Froyo和Gingerbread上使用Google帐户停止。如果您正在使用Play服务注册GCM(即使用GoogleCloudMessaging.register),则不再需要任何Android版本的此权限。如果您使用的是过时的库(GCMRegistrar.register),则仍然需要4.0.4版之前的Google帐户,该帐户需要该权限。

Source(由谷歌开发者在Android-GCM谷歌集团发布):

一些背景资料:

升级Froyo和姜饼登记在 GoogleServicesFramework实现,使用谷歌账号注册。 这对于账户 未处于良好状态的用户会导致很多身份验证错误。

从ICS开始,GCM不依赖或使用Google帐户 - 您可以在添加帐户或没有任何帐户之前使用它。

“播放服务”更新实施新方案对所有 设备 - 但似乎设备少数有 这个问题,我们正在调查 - 但数字远远高于 低与旧计划。

3

当您使用

编译 'com.google.android.gms:发挥服务:7.5.0' 添加的build.gradle文件意味着GET_ACCOUNT权限自动添加。

  • forexample如果开发人员必须使用只在项目的AdMob只是意味着指定的build.gradle文件 编译此权限“com.google.android.gms:发挥服务的广告:7.5.0” 如果有任何其他的澄清看到此链接https://developers.google.com/android/guides/setup
6

其他人一样在这里说,需要为Android设备比4.0.4低GET_ACCOUNT

如果你和我一样,都安装了一个库,自动将此权限,但你不需要它,你可以告诉AndroidManifest通过将许可与tools:node="remove"属性,像这样删除的权限:

在你AndroidManifest.xml文件,确保xmlns:tools属性在您manifest标签定义,然后用remove集添加权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      ...> 

    ... 

    <uses-permission android:name="android.permission.GET_ACCOUNTS" tools:node="remove" /> 

    ... 

</manifest> 

Word或警告,这实际上从未对我的作品,但我知道它为别人工作。如果你能看到我可能做错了什么或有任何更多的信息,请评论!

*编辑:有一个bug报告开得到这个功能工作: https://bugzilla.xamarin.com/show_bug.cgi?id=48153

+0

似乎是旧帖子,但它不适合我。所以我做的是在阅读Android文档后,在用户权限android:maxSdkVersion =“某些您不支持的API”以及工具:node =“remove”中添加了这个附加属性。它有效。 – Devesh

+0

@Devesh非常感谢您的额外信息。我还编辑了我的文章并添加了此功能的错误报告。 – hvaughan3