Okey。私はアンドロイドアプリにGoogleのサインイン機能を統合しました。 これは私のログイン活動であるGoogleからのユーザーの資格情報をAndroidに保存するには?
public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
//button
private SignInButton signInButton;
//options
private GoogleSignInOptions gso;
//client api
private GoogleApiClient mGoogleApiClient;
private static final int LCD = 4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_google_login);
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
signInButton = (SignInButton) findViewById(R.id.sign_in_button);
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(intent,LCD);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == LCD){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result) {
//check if the operation is successful
if(result.isSuccess()){
goMainScreen();
}else {
Toast.makeText(this,"Something went wrong",Toast.LENGTH_SHORT).show();
}
}
private void goMainScreen() {
Intent secondActivity = new Intent(this, ProfileActivity.class);
secondActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(secondActivity);
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
したら、ログインが成功すると、私はプロフィール活動を開き、ユーザーの画像を取得し、名前 ProfileActivity
public class ProfileActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private ImageView photo;
private TextView name;
private GoogleApiClient googleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
photo = (ImageView) findViewById(R.id.profileImage);
name = (TextView) findViewById(R.id.theName);
GoogleSignInOptions gsp = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gsp)
.build();
}
@Override
protected void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> optionalPendingResult = Auth.GoogleSignInApi.silentSignIn(googleApiClient);
if(optionalPendingResult.isDone()){
GoogleSignInResult sig = optionalPendingResult.get();
handleSigninResult(sig);
}else {
optionalPendingResult.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
handleSigninResult(googleSignInResult);
}
});
}
}
private void handleSigninResult(GoogleSignInResult sig) {
if(sig.isSuccess()){
GoogleSignInAccount acc = sig.getSignInAccount();
//accessing the data
name.setText(acc.getDisplayName());
//image with glide
Glide.with(this).load(acc.getPhotoUrl()).into(photo);
}else {
//in case is not successful
//send the user to the Login Screen
goLoginInScree();
}
}
private void goLoginInScree() {
Intent goUser = new Intent(this, LoginActivity.class);
goUser.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(goUser);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
私の次の問題がありますユーザーがすでにアクティビティにログオンしている場合、自動的にログインするための機能を実装するにはどうすればよいですか?私はアプリが開いているたびにサインインボタンをクリックするのではなく、プロフィールのアクティビティに直接行くことを望んでいます。
は、それが動作するはずログアウトを共有プリファレンス(この) .enableAutoManage(これ、これ)。自動的にセッションを管理します。 – Avi