android-使用GCM时获得GET_ACCOUNTS权限-为什么需要此权限?

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

我想了解实施GCM时需要“ GET_ACCOUNTS”(android.permission.GET_ACCOUNTS)的原因吗? 一些用户对此许可提出了担忧。 我已经在清单中使用了此许可权,如此处的官方网站所给。

此权限的安全性如何? 如果我从清单中删除了它,推送通知是否有效?

6个解决方案
61 votes

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

所以这就是要求许可的原因

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

阅读Google帐户。

阅读有关此GCM概述的更多信息


GCM不再需要Google帐户登录。 因此,您不需要GCMRegistrar.register权限。

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

有关更多详细信息,请访问[https://groups.google.com/forum/#!topic/android-gcm/ecG-RfH-Aso。]另一个类似的话题是,为什么GCM要在4.0以下的设备上运行,为什么需要使用Google帐户登录。 4个操作系统?

Pankaj Kumar answered 2020-08-11T22:19:41Z
13 votes

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

来源(由Google开发者发布在android-gcm Google Group上):

一些背景:

Froyo和Gingerbread注册在 GoogleServicesFramework,使用Google帐户进行注册。 对于帐户所在的用户,这导致了很多身份验证错误 状况不佳。

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

“播放服务”更新正在所有平台上实施新方案 设备-但似乎少数设备存在问题 我们正在对此进行调查-但该数字远低于这些数字 与旧计划。

Eran answered 2020-08-11T22:20:25Z
6 votes

正如这里的其他所有人所说,低于4.0.4的android设备需要AndroidManifest

如果您和我一样,并且安装了可自动添加此权限的库,但是您不需要它,则可以通过将权限添加到tools:node="remove"属性来告诉AndroidManifest删除权限,如下所示:

在您的AndroidManifest.xml文件中,确保在manifest标记中定义了该属性xmlns:tools,然后添加带有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>

有话或警告说这实际上对我没有用,但我知道它对其他人也有帮助。 如果您看到我可能做错了什么,或者有任何更多有关此的信息,请发表评论!

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

hvaughan3 answered 2020-08-11T22:21:03Z
3 votes

当你使用

编译'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]
user2431979 answered 2020-08-11T22:21:32Z
1 votes

我认为实际上并非如此。 我在使用新的Gmail帐户的全新出厂重置的Gingerbread设备上进行了测试,而没有得到该许可,我可以正常接收GCM消息。 因此,文档是错误的。

markostamcar answered 2020-08-11T22:21:53Z
0 votes

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

Brinda K answered 2020-08-11T22:22:13Z
translate from https://stackoverflow.com:/questions/18444227/get-accounts-permission-while-using-gcm-why-is-this-needed