在另一个 activity 中获取 google 登录帐户
Get the google signed in account in another activity
我读了一些关于它的帖子,但我没有找到正确的方法。那么问题来了:
我在 login activity
中使用了 google signin
,一切正常。用户转到 another activity
,然后转到第三个,然后再转到另一个。在 fourth activity
中,我需要 google 签名用户(实际上是 activity 来使用 Google Play 服务、成就等)获得登录用户?我必须重新进行所有登录过程吗?
更新:
如前所述,我的 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 用户。我还需要做什么才能让我的 google 登录用户?
您可以使用此功能来检查用户是否已登录。
private boolean isSignedIn() {
return GoogleSignIn.getLastSignedInAccount(context) != null;
}
https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignIn
public static GoogleSignInAccount getLastSignedInAccount (Context
context)
Gets the last account that the user signed in with.
Returns: GoogleSignInAccount from last known successful sign-in. If
user has never signed in before or has signed out / revoked access,
null is returned.
如果 returns 为空,只需重新登录用户即可。就这些了。
我读了一些关于它的帖子,但我没有找到正确的方法。那么问题来了:
我在 login activity
中使用了 google signin
,一切正常。用户转到 another activity
,然后转到第三个,然后再转到另一个。在 fourth activity
中,我需要 google 签名用户(实际上是 activity 来使用 Google Play 服务、成就等)获得登录用户?我必须重新进行所有登录过程吗?
更新:
如前所述,我的 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 用户。我还需要做什么才能让我的 google 登录用户?
您可以使用此功能来检查用户是否已登录。
private boolean isSignedIn() {
return GoogleSignIn.getLastSignedInAccount(context) != null;
}
https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignIn
public static GoogleSignInAccount getLastSignedInAccount (Context context)
Gets the last account that the user signed in with.
Returns: GoogleSignInAccount from last known successful sign-in. If user has never signed in before or has signed out / revoked access, null is returned.
如果 returns 为空,只需重新登录用户即可。就这些了。