使用GCM时获得GET_ACCOUNTS权限 - 为什么需要这样做?

时间:2013-08-26 12:35:55

标签: android push-notification google-cloud-messaging

我有一个应用,推出了推送通知。

我想了解为什么我们需要“GET_ACCOUNTS”(android.permission.GET_ACCOUNTS),同时实施GCM?一些用户对此权限提出了疑虑。我在清单中使用了此权限,因为它是在官方网站here中提供的。

此权限的安全性如何?如果我从我的清单中删除它,推送通知会起作用吗?

6 个答案:

答案 0 :(得分:61)

  

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

这就是要求许可

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

阅读Google帐户。

详细了解此GCM Overview


GCM不再需要Google帐户登录。 所以您不需要android.permission.GET_ACCOUNTS权限。

如果您将GCM 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?

答案 1 :(得分:13)

GCM不再需要GET_ACCOUNTS权限。曾经需要注册GCM,但最近的Play服务更新停止使用Google帐户,即使是在Froyo和Gingerbread上也是如此。如果您使用Play服务注册GCM(即使用GoogleCloudMessaging.register),则不再需要此任何Android版本的此权限。如果您使用的是已弃用的库(GCMRegistrar.register),则仍需要4.0.4之前版本的Google帐户,这需要该权限。

Source(由Google开发人员发布在android-gcm Google Group上):

  

一些背景知识:

     

Froyo和Gingerbread注册实施于   GoogleServicesFramework,使用Google帐户进行注册。   这导致帐户中的人员出现了很多身份验证错误   不是很好。

     

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

     

“Play服务”更新正在全部实施新计划   设备 - 但似乎有少数设备存在问题   我们正在调查 - 但这些数字远远低于那些数字   与旧计划。

答案 2 :(得分:6)

正如此处的其他人所说,对于低于4.0.4的Android设备,需要GET_ACCOUNT

如果您和我一样并且安装了一个自动添加此权限的库但您不需要它,则可以通过向{{1}添加权限来告知AndroidManifest删除权限像这样的属性:

在您的tools:node="remove"文件中,确保在AndroidManifest.xml标记中定义了xmlns:tools属性,然后添加manifest设置的权限:

remove

言语或警告,这对我来说实际上并不适用,但我知道它对其他人有效。如果您可以看到我可能做错了或有任何更多信息,请发表评论!

*编辑:有一个错误报告打开以使此功能正常工作: https://bugzilla.xamarin.com/show_bug.cgi?id=48153

答案 3 :(得分:3)

使用时

编译'com.google.android.gms:play-services:7.5.0' 添加build.gradle文件意味着自动添加GET_ACCOUNT权限。

  • 例如,如果开发人员必须在项目中仅使用admob,则只在build.gradle文件中指定此权限 编译'com.google.android.gms:play-services-ads:7.5.0' 如果有任何其他说明,请参阅此链接https://developers.google.com/android/guides/setup

答案 4 :(得分:1)

我认为事实并非如此。我在新的工厂重置姜饼设备上使用新的Gmail帐户对其进行了测试,我可以在没有该许可的情况下接收GCM消息。所以文档错了。

答案 5 :(得分:0)

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