我读了一些关于它的帖子,但我没有找到正确的方法。所以问题来了:
我在login activity
中使用了google signin
,一切都很好。用户转到another activity
,然后转到第三个,然后转到另一个。在fourth activity
中,我需要谷歌签名用户(实际上是一种使用谷歌播放服务、成就等的活动(什么是获得签名用户的最佳和更短的方式?我必须重新进行所有登录过程吗?
更新:
如前所述,在我的活动中更新的代码如下:
@Override
protected void onStart() {
super.onStart();
if (!isSignedIn()) {
signInSilently();
}
和
private boolean isSignedIn() {
return GoogleSignIn.getLastSignedInAccount(this) != null;
}
private void signInSilently() {
Log.d(TAG, "signInSilently()");
mGoogleSignInClient.silentSignIn().addOnCompleteListener(this,
new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if (task.isSuccessful()) {
Log.d(TAG, "signInSilently(): success");
onConnected(task.getResult());
} else {
Log.d(TAG, "signInSilently(): failure", task.getException());
onDisconnected();
}
}
});
因为我不想有一个新的登录(按钮等(。首先,我认为用户应该连接。但是,即使断开了连接,signInSilently((也应该再次连接用户。
我的最后一个问题是,我在中得到了一个空对象异常
mLeaderboardsClient.submitScore(getString(R.string.leaderboard_leaderboard),
private void onConnected(GoogleSignInAccount googleSignInAccount) {
Log.d(TAG, "onConnected(): connected to Google APIs");
mAchievementsClient = Games.getAchievementsClient(this, googleSignInAccount);
mLeaderboardsClient = Games.getLeaderboardsClient(this, googleSignInAccount);
mEventsClient = Games.getEventsClient(this, googleSignInAccount);
mPlayersClient = Games.getPlayersClient(this, googleSignInAccount);
我可以理解,因为没有GOOGLE用户。我还需要做什么才能让我的谷歌用户签名?
您可以使用此函数检查用户是否登录。
private boolean isSignedIn() {
return GoogleSignIn.getLastSignedInAccount(context) != null;
}
https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignIn
公共静态GoogleSignInAccount getLastSignedInAccount(上下文上下文(
获取用户登录的最后一个帐户。
返回:上次已知成功登录的GoogleSignInAccount。如果用户以前从未登录过或已注销/撤消访问,返回null。
如果返回null,则重新登录用户。仅此而已。