Android: вход через Google – разница между DEFAULT_SIGN_IN и DEFAULT_GAMES_SIGN_IN

Я пытаюсь внедрить вход Google в свое приложение в AndroidStudio. У меня работает с:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();

Мой идентификатор клиента правильно настроен на идентификатор клиента веб-приложения из консоли API, и SHA1 определенно настроен правильно.

Когда я перехожу к этому (вместо этого использую DEFAULT_GAMES_SIGN_IN):

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();

Я получаю сообщение об ошибке с нулевым значением и кодом состояния 12501.

В чем разница между DEFAULT_GAMES_SIGN_IN и DEFAULT_SIGN_IN? Нужно ли мне делать что-то другое для входа в игры?

Вот весь мой код:

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;

public class MainActivity extends AppCompatActivity {

GoogleSignInClient mGoogleSignInClient;
String clientID;
int RC_SIGN_IN = 9001;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    clientID = getString(R.string.client_id);

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().requestServerAuthCode(clientID).build();

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

    signInSilently();

}

private void signInSilently(){
    mGoogleSignInClient.silentSignIn().addOnCompleteListener(this, new OnCompleteListener<GoogleSignInAccount>() {
        @Override
        public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
            if(task.isSuccessful()){
                GoogleSignInAccount signedInAccount = task.getResult();
                setText(signedInAccount.getEmail(), signedInAccount.getDisplayName());
            }else{
                interactiveSignIn();
            }
        }
    });
}

private void interactiveSignIn(){
    Intent i = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(i, RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == RC_SIGN_IN){
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if(result.isSuccess()){
            GoogleSignInAccount signedInAccount = result.getSignInAccount();
            setText(signedInAccount.getEmail(), signedInAccount.getDisplayName());
        }else{
            String message = "ERROR: " + result.getStatus().getStatusMessage() + " - CODE: " + result.getStatus().getStatusCode();
            showAlert(message);
        }
    }
}

void showAlert(String message){
    new AlertDialog.Builder(this).setMessage(message).setNeutralButton("OK", null).show();
}

void setText(String email, String name){
    TextView tv = (TextView) findViewById(R.id.Test_TextView);

    tv.setText("EMAIL: " + email + "   NAME: " + name);
}

}


person Ross Patterson    schedule 27.02.2018    source источник
comment
Если вы посмотрите этот блог, то увидите, как DEFAULT_GAMES_SIGN_IN был реализован. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestEmail().build();. Проверьте, работает ли это.   -  person MαπμQμαπkγVπ.0    schedule 28.02.2018


Ответы (1)


Одно отличие состоит в том, что DEFAULT_GAMES_SIGN_IN запрашивает игры. .SCOPE_GAMES_LITE.

Это необходимо для использования API Google Play Games в вашем приложении.

(Примечание: я не уверен на 100 %, что это lite scope. Вместо этого он может запросить Games.SCOPE_GAMES. Однако поиск по SCOPE_GAMES в документации выдает устаревшие интерфейсы, все новые альтернативы которых требуют SCOPE_GAMES_LITE)

Однако, чтобы войти в Google Play Games, ваше приложение должно быть настроено для работы с Google Play Games Services.

Информацию о том, как это сделать, см. в официальном руководстве.

Внимательно следуйте инструкциям в первый раз, так как любая небольшая ошибка приведет к неудачному входу в систему.

После настройки вы можете ознакомиться с руководством по входу в игру< /а>.

person Chanic Panic    schedule 30.11.2018