代码之家  ›  专栏  ›  技术社区  ›  undefined

在android上使用谷歌id令牌

  •  0
  • undefined  · 技术社区  · 8 年前

    我可以用 GoogleSignInAccount.getIdToken()

    1. 令牌约为1kb字符串。我无法将其与每个服务器请求一起发送。那么,正确的方法是什么?如何在服务器端验证它?
    2. 谷歌方面对令牌验证是否有任何限制(配额)?
    1 回复  |  直到 8 年前
        1
  •  0
  •   undefined    8 年前

    2、令牌刷新可以通过再次调用登录功能来实现:

    private void loginGoogle(){
            //context is Activity
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(context.getString(R.string.default_web_client_id)).requestEmail()
                    .build();
            if (googleApiClient!=null) {
                googleApiClient.stopAutoManage((FragmentActivity) context);
                googleApiClient.disconnect();
            }
            googleApiClient = new GoogleApiClient.Builder(context)
                    .enableAutoManage((FragmentActivity) context, new GoogleApiClient.OnConnectionFailedListener() {
                        @Override
                        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                            Log.d("auth", "connection failed");
                        }
                    })
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();
            //
            OptionalPendingResult<GoogleSignInResult> opr =
                    Auth.GoogleSignInApi.silentSignIn(googleApiClient);
            if (opr.isDone()) {
                GoogleSignInResult r = opr.get();
                Log.d("auth", "google silent signin sync");
                fillGoogleProfile(r.getSignInAccount());
            } else {
                opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                    @Override
                    public void onResult(@NonNull GoogleSignInResult result) {
                        Log.d("auth", "google silent signin async");
                        if (result.getSignInAccount()==null) {
                            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                            //catch result in the onActivityResult
                            context.startActivityForResult(signInIntent, RC_SIGN_IN);
                            return;
                        }
                        fillGoogleProfile(result.getSignInAccount());
                    }
                });
            }
        }