Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌云端点&x2B;Android中的GoogleAppClient未经GET_帐户许可_Android_Google Cloud Endpoints_Google Play Games_Google Api Client - Fatal编程技术网

谷歌云端点&x2B;Android中的GoogleAppClient未经GET_帐户许可

谷歌云端点&x2B;Android中的GoogleAppClient未经GET_帐户许可,android,google-cloud-endpoints,google-play-games,google-api-client,Android,Google Cloud Endpoints,Google Play Games,Google Api Client,有没有办法在android应用程序中使用GoogleAppClient对Google端点进行身份验证,而无需获得GET_ACCOUNTS权限 具有新运行时权限的Android 23+将向用户请求不需要的READ_CONTACTS权限。奇怪的是,所有带有谷歌端点的android应用程序现在都需要READ_CONTACTS权限 我能找到的最接近StackOverflow的问题是,但它声称它可能只在非常有限的时间内起作用。谷歌提供了一些使用代币的指导,但不针对端点。我最终找到了解决方案。我更新了答案

有没有办法在android应用程序中使用GoogleAppClient对Google端点进行身份验证,而无需获得GET_ACCOUNTS权限

具有新运行时权限的Android 23+将向用户请求不需要的READ_CONTACTS权限。奇怪的是,所有带有谷歌端点的android应用程序现在都需要READ_CONTACTS权限


我能找到的最接近StackOverflow的问题是,但它声称它可能只在非常有限的时间内起作用。谷歌提供了一些使用代币的指导,但不针对端点。

我最终找到了解决方案。我更新了答案

要避免1小时令牌限制,请使用 在每个月之前获得一个新令牌 给你的终点打电话。例如,如果您不在UI中 线程:


如果您检查Google文档,唯一的方法是使用ACCOUNTS权限。为了支持对需要身份验证的端点的请求,您的Android客户端需要获取用户凭据并将其传递给服务对象。查看此以了解更多信息。另外,在您的游戏可以调用Google Play games服务之前,它必须首先使用GoogleAppClient对象与Google Play服务器建立异步连接,并使用Google Play games服务对用户进行身份验证。@aez-您可以参考它说您需要GET_帐户的地方吗?只有当您正在读取联系人或获取当前用户的联系信息时,才需要READ\u CONTACTS。@KENdi-是的,需要GET\u ACCOUNTS权限才是问题所在。Android Marshmallow及以上版本(23+),哪些组获得具有READ_CONTACTS(@Clayton see)权限的_帐户,则在运行时需要用户对READ_CONTACTS的权限。这对我来说意味着,任何使用谷歌端点的棉花糖或以上android应用程序在运行时都需要READ_CONTACTS权限。当你说“谷歌端点”是什么意思?例如,您可以在没有此权限的情况下调用游戏服务API(不需要其他权限)。我认为正确的名称是“Google Cloud Endpoints”,如前所述。如果您使用经过身份验证的Google云端点,则必须使用GET_帐户。所以,是的,我可以使用游戏服务API,但是如果我使用经过验证的Google Cloud Endpoints后端,我就有权限问题。
GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail()
                .requestIdToken(CLIENT_ID)
                .build();
GoogleSignInClient client = GoogleSignIn.getClient(context, options);
GoogleSignInAccount user = Tasks.await(getGoogleSignInClient(context).silentSignIn());

// Use the new user token as before 
GoogleCredential credential = new GoogleCredential.Builder().setTransport(new NetHttpTransport())
        .setJsonFactory(JacksonFactory.getDefaultInstance())
        .build();
credential.setAccessToken(user.getIdToken());