Ich folge dem Beispiel von google, um das Token zu erhalten, aber ohne Erfolg. Das Anfordern des Tokens ist immer fehlgeschlagen. Dies ist die neueste Art und Weise, wie Google bei Ihren Seitenentwicklern angezeigt wird. Ich glaube, der Fehler liegt nicht in meinem Code
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?
Ich bin gerade auf ein ähnliches Problem gestoßen, 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 ist nicht erforderlich, default_web_client_id zu definieren. Es funktioniert wie eingefügt. Es ist eine Zeichenfolge, die vom Google-Services-Plugin generiert wird.
Es scheint, dass Ihr Code in Ordnung ist, aber versuchen Sie, die offiziellen Anweisungen genau zu befolgen. Es hat für mich funktioniert: http://Android-developers.blogspot.com/2016/03/Registrieren-oauth-clients-for-google.html
Stellen Sie sicher, dass Sie das Web-Token verwenden, versuchen Sie, ein neues zu erstellen, und verwenden Sie es .
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 vergiss das nicht
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();