2017-09-14 30 views
0

我能收到谷歌ID标记GoogleSignInAccount.getIdToken()这样,我对如何处理它几个问题,谷歌ID令牌工作与Android

  1. 令牌约1KB string.I不能发送与每个服务器请求。那么,如何才能在服务器端验证它的正确方法是什么?
  2. 我没有看到刷新id令牌的方法。这是否会在GoogleSignInAccount类中自动发生?
  3. 谷歌方面对令牌验证有任何限制(配额)吗?

回答

0

1.To不超载服务器我们决定以产生具有相同的到期时间内(短)的访问令牌(1小时)

2.Token刷新可以再次调用登录功能来实现:

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

3.仍未找到答案