登录帐户以使用Google Play排行榜

时间:2018-04-15 21:44:50

标签: google-play-services google-signin

以下登录代码会导致我的游戏闪烁然后在打印“坏东西”后崩溃。我究竟做错了什么?我试图实现显示here的代码。我尝试静默登录,如果这不起作用,我尝试进行交互式登录。我正在使用最新版本的Android 8.1.0测试物理Nexus 5.

public class MainActivity extends Activity {

private GLSurfaceView mGLView;
private GoogleSignInAccount account;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create a GLSurfaceView instance and set it
    // as the ContentView for this Activity.
    mGLView = new MyGLSurfaceView(this, this);
    setContentView(mGLView);
    hideStatusBar();
    getAccount();
}
public void hideStatusBar() {
    View decorView = getWindow().getDecorView();
    // Hide the status bar.
    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);
    // Remember that you should never show the action bar if the
    // status bar is hidden, so hide that too if necessary.
    //ActionBar actionBar = getActionBar();
    //actionBar.hide();
}
private void getAccount() {
    account = GoogleSignIn.getLastSignedInAccount(this);
    if (account == null) {
        signInSilently();
    }
}
public void submitScore(int score) {
    if (account == null) {
        getAccount();
    } else {
        Games.getLeaderboardsClient(this, account)
                .submitScore("leaderboardID", score);
    }
}
private static final int leaderboardRequestCode = 9004;
private static final int signInRequestCode = 101;
public void showLeaderboard() {
    if (account == null) {
        getAccount();
    } else {
        Games.getLeaderboardsClient(this, account)
                .getLeaderboardIntent("leaderboardID")
                .addOnSuccessListener(new OnSuccessListener<Intent>() {
                    @Override
                    public void onSuccess(Intent intent) {
                        startActivityForResult(intent, leaderboardRequestCode);
                    }
                });
    }
}

//interactive sign in
private void startSignInIntent() {
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
            GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    Intent intent = signInClient.getSignInIntent();
    startActivityForResult(intent, signInRequestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == signInRequestCode) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            account = result.getSignInAccount();
        } else {
            String message = result.getStatus().getStatusMessage();
            if (message == null || message.isEmpty()) {
                message = "bad stuff";
            }
            new AlertDialog.Builder(this).setMessage(message)
                    .setNeutralButton(android.R.string.ok, null).show();
        }
    }
}

//silent sign in
private void signInSilently() {
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
            GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
    signInClient.silentSignIn().addOnCompleteListener(this,
            new OnCompleteListener<GoogleSignInAccount>() {
                @Override
                public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                    if (task.isSuccessful()) {
                        account = task.getResult();
                    } else {
                        startSignInIntent();
                    }
                }
            });
}
@Override
protected void onResume() {
    super.onResume();
    signInSilently();
}
}

0 个答案:

没有答案