8

Итак, я уже пару дней общался с этим, и я не могу понять, почему он не работает. Я действительно надеюсь, что кто-то может мне помочь.GoogleSignInResult возвращает DEVELOPER_ERROR в Android-приложении, используя Firebase

Я пытаюсь аутентифицировать пользователя с помощью Google с использованием Firebase. Итак, следуя их руководству here Я установил вход в Google, чтобы получить токен OAuth, а затем использовать его для аутентификации с помощью Firebase. Поэтому я создал Google, как они описывают в своем руководстве here, но это насколько я понял. Ток OAuth, который я получаю от Google, всегда является нулевым, а в результате - Status {statusCode = DEVELOPER_ERROR, resolution = null}.

До сих пор моя деятельность выглядит следующим образом:

public static final int RC_GOOGLE_LOGIN = 1; 
private GoogleApiClient mGoogleApiClient; 
final Context context = this; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Firebase.setAndroidContext(this); 

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

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this, this) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

    SignInButton signInButton = (SignInButton) findViewById(R.id.googlebtn); 
    signInButton.setSize(SignInButton.SIZE_WIDE); 
    signInButton.setScopes(gso.getScopeArray()); 
    signInButton.setOnClickListener(this); 

} 

@Override 
public void onClick (View v) { 

    switch (v.getId()) { 
     case R.id.googlebtn: 
      signIn(); 
      break; 
    } 
} 

private void signIn() { 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_GOOGLE_LOGIN); 
} 

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

    if (requestCode == RC_GOOGLE_LOGIN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 
} 

private void handleSignInResult(GoogleSignInResult result) { 
    if (result.isSuccess()) { 
     // Signed in successfully, show authenticated UI. 
     GoogleSignInAccount acct = result.getSignInAccount(); 

     String idToken = acct.getIdToken(); 
    } 
} 

Я прибегая к помощи этого на некоторое время, и думаю, что я попробовал все, что уже предложили. Конечно, я сделал все в руководствах, добавил зависимости («com.google.android.gms: play-services-auth: 8.4.0») и создал необходимых клиентов в консоли разработчика.

Я также проверил (несколько раз), что идентификатор клиента сервера, который я использую, является правильным с консоли разработчика и соответствует имени моего пакета как в моем файле gradle, так и в файле манифеста. Я добавил файл google-services.json в каталог my/app и даже обновил его, чтобы убедиться, что он соответствует. Я также проверил, что ключ SHA1 правильный, и он по-прежнему дает ту же ошибку.

Если я удалю requestIdToken из параметров входа в Google, он работает, но это не помогает мне, поскольку я не могу войти в систему с Firebase. Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы он работал?

+1

Я столкнулся с таким же вопросом. Вы нашли решение для этого? – user3089214

+0

Столкнувшись с тем же, и у меня действительно нет идей. Вы нашли решение? – zuko

ответ

1

У вас есть R.string.server_client_id?

  1. Откройте Credentials page в консоли API.
  2. Идентификатор клиента типа веб-приложения - это идентификатор клиента OAuth 2.0 вашего сервера.

https://developers.google.com/identity/sign-in/android/start-integrating#get_your_backend_servers_oauth_20_client_id

После SHA-1 это следующая точка Камня, что я видел.

Смежные вопросы