我有一个应用程序,实现了推送通知。
我想了解在实现 GCM 时我们需要“GET_ACCOUNTS”(android.permission.GET_ACCOUNTS) 的原因吗?一些用户对此权限表示担忧。我已经在清单中使用了这个权限,因为它是在官方网站上给出的。
这个权限有多安全?如果我从清单中删除它,推送通知会起作用吗?
我有一个应用程序,实现了推送通知。
我想了解在实现 GCM 时我们需要“GET_ACCOUNTS”(android.permission.GET_ACCOUNTS) 的原因吗?一些用户对此权限表示担忧。我已经在清单中使用了这个权限,因为它是在官方网站上给出的。
这个权限有多安全?如果我从清单中删除它,推送通知会起作用吗?
它使用现有的 Google 服务连接。对于 3.0 之前的设备,这要求用户在其移动设备上设置其 Google 帐户。运行 Android 4.0.4 或更高版本的设备不需要 Google 帐户。
所以这是要求许可的原因
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
阅读谷歌帐户。
阅读有关此GCM 概述的更多信息
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。另一个类似的线程是为什么 GCM 需要 google 帐户登录才能在 4.0.4 操作系统以下的设备上工作?
GCM 工作不再需要 GET_ACCOUNTS 权限。过去注册 GCM 需要它,但最近的 Play 服务更新停止使用 Google 帐户,即使在 Froyo 和 Gingerbread 上也是如此。如果您使用 Play Services 注册到 GCM(即使用 GoogleCloudMessaging.register),则在任何 Android 版本上都不再需要此权限。如果您使用的是已弃用的库 (GCMRegistrar.register),您仍然需要 4.0.4 之前版本的 Google 帐户,这需要该权限。
来源(由 Google 开发人员在 android-gcm Google Group 上发布):
一些背景:
Froyo 和 Gingerbread 注册是在 GoogleServicesFramework 中实现的,使用 Google 帐户进行注册。对于帐户状态不佳的人来说,这导致了很多身份验证错误。
从 ICS 开始,GCM 不依赖或不使用 Google 帐户 - 您可以在添加帐户之前使用它,也可以不使用任何帐户。
“播放服务”更新正在所有设备上实施新方案- 但似乎有少数设备存在问题,我们正在调查 - 但数字远低于旧方案。
正如这里的其他人所说,GET_ACCOUNT
低于 4.0.4 的 android 设备需要它。
如果你和我一样,已经安装了一个自动添加这个权限的库,但你不需要它,你可以通过添加带有属性AndroidManifest
的权限来告诉 删除权限。tools:node="remove"
在您的AndroidManifest.xml
文件中,确保xmlns:tools
它在您的标签中定义的属性manifest
,然后使用remove
set 添加权限:
<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>
警告说这实际上对我有用,但我知道它对其他人有用。如果您能看到我可能做错了什么或有更多相关信息,请发表评论!
*编辑:打开了一个错误报告以使此功能正常工作: https ://bugzilla.xamarin.com/show_bug.cgi?id=48153
当你使用
compile 'com.google.android.gms:play-services:7.5.0' 添加 build.gradle 文件意味着自动添加 GET_ACCOUNT 权限。
我认为事实并非如此。我使用新的 Gmail 帐户在刚恢复出厂设置的 Gingerbread 设备上对其进行了测试,如果没有该权限,我可以正常接收 GCM 消息。所以文档是错误的。
GET_ACCOUNT 用于验证用户是否在手机中同步了谷歌账户,并为每个用户(每个谷歌账户)生成键值。如果设备运行的版本低于 Android 4.0.4,则需要这样做。