43

我有一个应用程序,实现了推送通知。

我想了解在实现 GCM 时我们需要“GET_ACCOUNTS”(android.permission.GET_ACCOUNTS) 的原因吗?一些用户对此权限表示担忧。我已经在清单中使用了这个权限,因为它是在官方网站上给出

这个权限有多安全?如果我从清单中删除它,推送通知会起作用吗?

4

6 回答 6

62

它使用现有的 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 操作系统以下的设备上工作?

于 2013-08-26T12:40:55.063 回答
14

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 帐户 - 您可以在添加帐户之前使用它,也可以不使用任何帐户。

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

于 2013-10-27T00:22:49.150 回答
7

正如这里的其他人所说,GET_ACCOUNT低于 4.0.4 的 android 设备需要它。

如果你和我一样,已经安装了一个自动添加这个权限的库,但你不需要它,你可以通过添加带有属性AndroidManifest的权限来告诉 删除权限。tools:node="remove"

在您的AndroidManifest.xml文件中,确保xmlns:tools它在您的标签中定义的属性manifest,然后使用removeset 添加权限:

<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

于 2016-09-09T15:11:43.597 回答
3

当你使用

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

  • 例如,如果开发人员必须在项目中仅使用 admob 意味着仅在 build.gradle 文件中指定此权限 compile 'com.google.android.gms:play-services-ads:7.5.0' 如果有任何其他说明,请参阅此链接 https: //developers.google.com/android/guides/setup
于 2015-06-10T05:21:54.133 回答
1

我认为事实并非如此。我使用新的 Gmail 帐户在刚恢复出厂设置的 Gingerbread 设备上对其进行了测试,如果没有该权限,我可以正常接收 GCM 消息。所以文档是错误的。

于 2013-10-26T20:33:27.953 回答
0

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

于 2013-08-26T12:42:35.850 回答