没有GET_ACCOUNTS权限的Android版Google Cloud Endpoints + GoogleApiClient

时间:2016-03-27 22:06:58

标签: android google-cloud-endpoints google-play-games google-api-client

有没有办法在使用GoogleApiClient的Android应用中对经过身份验证的Google终端进行验证,而不必强制获得GET_ACCOUNTS权限?

然后,具有新运行时权限的Android 23+将询问用户不受欢迎的READ_CONTACTS权限。使用Google Endpoints的所有Android应用程序现在都需要READ_CONTACTS权限,这似乎很奇怪。

我能找到的最接近的StackOverflow问题是this,但它声称它可能只在非常有限的时间内工作。此Google post提供了一些使用令牌的指导,但不适用于终端。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。我更新了答案on the question you mentioned

  

为避免1小时令牌限制,请使用   GoogleSignInApi.silentSignIn()以在每次   打电话给您的端点。例如,如果您不在用户界面中   线程:

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());