我有一个应用,推出了推送通知。
我想了解为什么我们需要“GET_ACCOUNTS”(android.permission.GET_ACCOUNTS),同时实施GCM?一些用户对此权限提出了疑虑。我在清单中使用了此权限,因为它是在官方网站here中提供的。
此权限的安全性如何?如果我从我的清单中删除它,推送通知会起作用吗?
答案 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权限。
答案 4 :(得分:1)
我认为事实并非如此。我在新的工厂重置姜饼设备上使用新的Gmail帐户对其进行了测试,我可以在没有该许可的情况下接收GCM消息。所以文档错了。
答案 5 :(得分:0)
GET_ACCOUNT用于验证用户是否在移动设备中同步了Google帐户,并为每个用户(每个Google帐户)生成键值。如果设备运行的版本低于Android 4.0.4,则需要这样做。