2016-01-08 17 views
8

Ich folge dem Beispiel von Google, um das Token zu erhalten, aber ohne Erfolg. Das Token kann immer nicht abgerufen werden. Dies wird neuesten Art und Weise Google-Anzeigen auf Ihrer Seite Entwickler Ich glaube, der Fehler ist nicht in meinem CodeToken null Anmelden Google-Konto

private String CLIENTE_ID = "...apps.googleusercontent.com"; 



GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(CLIENTE_ID) 
      .requestEmail() 
      .build(); 

// Build GoogleAPIClient with the Google Sign-In API and the above options. 
mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

imgBGoogle.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 

      Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
      startActivityForResult(signInIntent, 9002); 
     } 
}); 



@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == 9002) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 

      handleSignInResult(result, data); 

     } 

if (requestCode == 9002) { 
      // [START get_id_token] 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      Log.d(TAG, "onActivityResult:GET_TOKEN:success:" + result.getStatus().isSuccess()); 

      if (result.isSuccess()) { 
       GoogleSignInAccount acct = result.getSignInAccount(); 
       String idToken = acct.getIdToken(); 

       // Show signed-in UI. 
       Log.d(TAG, "idToken:" + idToken); 
       Log.d(TAG, "\n "); 

       // TODO(user): send token to server and validate server-side 
      } else { 
       // Show signed-out UI. 
       Log.d(TAG, "idToken: fail"); 

      } 
      // [END get_id_token] 
     } 



} 

private void handleSignInResult(GoogleSignInResult result, Intent data) { 

     getToken1(data); 
     getToken2(result); 

     String BOOKS_API_SCOPE = "https://www.googleapis.com/auth/books"; 
     String GPLUS_SCOPE = "https://www.googleapis.com/auth/plus.login"; 
     String mScopes = "oauth2:" + BOOKS_API_SCOPE + " " + GPLUS_SCOPE; 

} 


void getToken1(Intent data){ 

    GoogleSignInResult a = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 

    if (a.isSuccess()) { 

     Log.d(TAG, "TOKEN 1: " + a.getSignInAccount().getIdToken()); 
     Log.d(TAG, "DISPLAY NAME 1: " +a.getSignInAccount().getDisplayName()); 
     Log.d(TAG, "ID 1: " + a.getSignInAccount().getId()+"\n "); 

    }else{ 
     Log.d(TAG, "ID 1: falhou"+"\n "); 
    } 

} 

void getToken2(GoogleSignInResult result){ 

     if (result.isSuccess()) { 

      GoogleSignInAccount acct = result.getSignInAccount(); 

      Log.d(TAG, "TOKEN 2: " + acct.getIdToken()); 
      Log.d(TAG, "DISPLAY NAME 2: " + acct.getDisplayName()); 
      Log.d(TAG, "ID 2: " + acct.getId()+"\n "); 

     }else{ 
      Log.d(TAG, "ID 2: falhou"+"\n "); 
     } 

} 

wie kann ich das Token erhalten? kann mir jemand helfen?

enter image description here

enter image description here

enter image description here

enter image description here

+0

Bitte meine Antwort auf http://stackoverflow.com/questions/34099208/google-sign-in-idtoken lesen, um zu sehen, ob Es kann helfen oder nicht – BNK

+0

@BNK funktioniert nicht :( – FlipNovid

+0

Sind Sie sicher, dass Ihre App Web-Typ-ID, nicht Android-Typ verwendet? – BNK

Antwort

3

Es scheint, Ihr Code ist in Ordnung, aber versuchen, genau die offiziellen Führer zu folgen. Es funktionierte für mich: http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html

Stellen Sie sicher, dass Sie Web-Token verwenden, versuchen Sie, ein neues zu erstellen, und verwenden Sie es.

+0

Könnten Sie mir bitte mit meinem Problem helfen, ich habe einige Tage versucht, es zu lösen ... Ich benutze den gleichen Code, aber schließlich, wenn ich TokenId von Google API retrigiere, bekomme ich eine Zeichenfolge tokenId = <857 chars> ... ?? Wenn ich versuchte, es zu validieren googleapis.com/oauth2/v3/tokeninfo?access_token= <857 chars response> ich alle bekommen 'error_description ":" Ungültiger Wert' ... Wie machen Sie eine Validierung Ihrer Antwort? Erhalten Sie auch String tokenId = <857 chars>? –

+0

Nicht für mich gearbeitet –

+0

@AlekseyTimoshchenko: Sie bekommen ein ID_Token zurück, so sollte es oauth2/v3/tokeninfo sein? Id_token = xxx – dannyroa

14

Ich bin gerade über das ähnliche Problem gestolpert, ich habe keinen Web-OAuth-Client verwendet, es funktionierte mit der Firebase und ich dachte, diese einfachere Lösung könnte für jemanden hilfreich sein.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 

Es besteht keine Notwendigkeit default_web_client_id zu definieren ist, wird es als klebte arbeiten. Es ist eine Zeichenfolge, die vom Google-Services-Plugin generiert wird.

0
public class GplusTokenUtils extends AsyncTask<Void, Void, String> { 

    String accessToken = ""; 

    private GoogleSignInAccount account; 

    public IGetToken iGetTokenListener; 

    public interface IGetToken { 
     void onGetToken(String token); 
    } 

    public void getTokenLitener(IGetToken tokenListener) { 
     this.iGetTokenListener = tokenListener; 
    } 

    public GplusTokenUtils() { 

     iGetTokenListener = new IGetToken() { 

      @Override 
      public void onGetToken(String token) { 

      } 
     }; 
    } 


    private Activity activity; 

    public void setActivity(Activity activity) { 

     this.activity = activity; 
    } 


    public void setAccount(GoogleSignInAccount account) { 

     this.account = account; 
    } 


    @Override 
    protected String doInBackground(Void... voids) { 

     try { 
      accessToken = GoogleAuthUtil.getToken(activity, account.getEmail(), "oauth2:profile email"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (GoogleAuthException e) { 
      e.printStackTrace(); 
     } 

     return accessToken; 
    } 

    @Override 
    protected void onPostExecute(String aVoid) { 

     Log.d("GPLUS_TOKEN", aVoid); 

     iGetTokenListener.onGetToken(aVoid); 

    } 

} 

Und vergessen Sie nicht, diese

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 
Verwandte Themen