【发布时间】:2016-07-15 04:12:22
【问题描述】:
有没有什么方法可以在 Android 应用程序中使用 GoogleApiClient 验证 Google Endpoints 而无需强制获得 GET_ACCOUNTS 权限?
具有新运行时权限的 Android 23+ 将要求用户提供不需要的 READ_CONTACTS 权限。奇怪的是,所有带有 Google Endpoints 的 Android 应用现在都需要 READ_CONTACTS 权限。
我能找到的最接近的 StackOverflow 问题是 this,但它声称它可能只能在非常有限的时间内工作。这个 Google post 提供了一些使用令牌的指导,但不适用于端点。
【问题讨论】:
-
如果您查看 Google 文档,唯一的方法是使用 ACCOUNTS 权限。在支持对需要身份验证的端点的请求时,您的 Android 客户端需要获取用户凭据并将其传递给服务对象。检查此page 了解更多信息。此外,在您的游戏可以对 Google Play 游戏服务进行任何调用之前,它必须首先通过使用 GoogleApiClient 对象并使用 Google Play 游戏服务对用户进行身份验证来建立与 Google Play 服务器的异步连接。
-
@aez - 你能参考它说你需要 GET_ACCOUNTS 的地方吗? READ_CONTACTS 仅在您正在读取联系人或获取当前用户的联系信息时才需要。
-
@KENdi - 是的,需要 GET_ACCOUNTS 权限是问题所在。 Android Marshmallow 及更高版本 (23+) 将 GET_ACCOUNTS 与 READ_CONTACTS(@Clayton 参见 this)权限分组,然后在运行时需要用户对 READ_CONTACTS 的权限。这对我来说意味着任何使用 Google Endpoints 的 Marshmallow 或更高版本的 Android 应用都需要在运行时获得 READ_CONTACTS 权限。
-
当您说“Google Endpoints”时,您是什么意思?例如,您可以在没有此权限的情况下调用游戏服务 API(无需其他权限)。
-
我认为正确的名称是“Google Cloud Endpoints”,描述为here。如果您使用经过身份验证的 Google Cloud Endpoints,则必须使用 GET_ACCOUNTS。所以,是的,我可以使用游戏服务 API,但如果我使用经过身份验证的 Google Cloud Endpoints 后端,我就会遇到权限问题。
标签: android google-cloud-endpoints google-play-games google-api-client