2016-03-26 5 views
0

で署名した後、私は成功したアプリケーションでGoogleの機能付きでログインを統合しています。私の質問は、ユーザーが次回にログイン画面をスキップして、再度ログインする必要なくアプリケーションに直接アクセスできるように、この情報をどのように保存するのですか?ユーザーがアプリを閉じて、いつでも、後でそれを開いたときについてGoogleのログインを永続ログインは自動的にGoogleログイン

public class Login extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { 

    @Bind(R.id.googleSignIn)SignInButton googleSignIn; 
    GoogleSignInOptions options; 
    GoogleApiClient client; 

    private static final int GOOGLE_SIGN_IN = 101; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 
     ButterKnife.bind(this); 

     /** CONFIGURE THE GOOGLE SIGN IN OPTIONS **/ 
     options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .requestProfile().build(); 
     client = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, options) 
       .addApi(Plus.API) 
       .build(); 

     /** CONFIGURE THE SIGN IN BUTTON **/ 
     googleSignIn.setSize(SignInButton.SIZE_WIDE); 
     googleSignIn.setScopes(options.getScopeArray()); 
     googleSignIn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent signIn = Auth.GoogleSignInApi.getSignInIntent(client); 
       startActivityForResult(signIn, GOOGLE_SIGN_IN); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == GOOGLE_SIGN_IN && resultCode == RESULT_OK) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      GoogleSignInAccount account = result.getSignInAccount(); 
      String name = account.getDisplayName(); 
      Log.e("DISPLAY NAME", name); 
      String email = account.getEmail(); 
      Log.e("USER EMAIL", email); 
      String profile = String.valueOf(account.getPhotoUrl()); 
      Log.e("USER PROFILE", profile); 
     } else { 
      Toast.makeText(getApplicationContext(), "Login failed!!", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    protected void attachBaseContext(Context newBase) { 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 
} 

私が発見していないもの:

これは、これまでのコードがあります。ほとんどのチュートリアルでは、私がすでに作業している統合部分を扱うことがほとんどです。 SOに関する質問はまったく異なっています。この文脈では何もない。

私はSharedPreferencesを言うにアカウントデータを格納する必要がありますか?あるいは、SDKがその部分をすべて処理します。

皆様からお寄せいただきありがとうございます。

P.S:この質問は私のMySQLデータベースのレコードを作成する方法についての私の前の質問と異なっています。

+0

共有設定を使用します。いくつかのブール値を保存し、後で一度あなたはログイン画面に着くuはprefでフラグをチェックすることができます。適切なアクションを実行する:) – DJphy

答えて

1

を格納している、それは2つの答えで提案されたものよりも簡単でした。両方の答えが実際には何かの提案以外の何かを提供していないので、私はもう少し調べました。これはこのGoogle+ Developers Live YouTube videoを見つけることにつながった。そして、このビデオの説明ではhttps://github.com/googlesamples/google-services.gitにさらにつながったQuick Startへのリンクがありました。

GitHubのページでクイックスタートサンプルは、私が探していたものを正確に明らかにしました。

私はこの質問につまずくと、うまくいけば、彼らにいくつかの時間を節約する可能性のある他のユーザーのためにOPに掲載コードの更新版を掲載しています。

若干の構造的変更の他に、最も重要な追加はであり、以前にサインインしたアカウントのアクティブなセッションが存在するかどうかを自動的に判断して自動的にサインインするかどうかを自動的に判断します。セッションが期限切れになっている場合、基本的に追加コードなしで新しいセッションが作成されます。 onStart()のブロックif...elseは、2つの可能性の鍵です。

public class NewLogin extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { 

    @OnClick(R.id.googleSignIn) public void GoogleLogin() { 
     Intent signIn = Auth.GoogleSignInApi.getSignInIntent(client); 
     startActivityForResult(signIn, GOOGLE_SIGN_IN); 
    } 
    GoogleSignInOptions options; 
    GoogleApiClient client; 

    private ProgressDialog mProgressDialog; 

    private static final int GOOGLE_SIGN_IN = 101; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login); 
     ButterKnife.bind(this); 

     /** CONFIGURE THE GOOGLE SIGN IN OPTIONS **/ 
     options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .requestProfile().build(); 
     client = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, options) 
       .addApi(Plus.API) 
       .build(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == GOOGLE_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
     } 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(client); 
     if (opr.isDone()) { 
      GoogleSignInResult result = opr.get(); 
      handleSignInResult(result); 
      Log.e("CACHE STATUS", "Got cached sign-in"); 
     } else { 
      showProgressDialog(); 
      opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
       @Override 
       public void onResult(GoogleSignInResult googleSignInResult) { 
        hideProgressDialog(); 
        handleSignInResult(googleSignInResult); 
       } 
      }); 
     } 
    } 

    // [START handleSignInResult] 
    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d("handleSignInResult:", String.valueOf(result.isSuccess())); 
     if (result.isSuccess()) { 
      GoogleSignInAccount acct = result.getSignInAccount(); 
      Toast.makeText(getApplicationContext(), acct.getDisplayName(), Toast.LENGTH_SHORT).show(); 
      String name = acct.getDisplayName(); 
      Log.e("DISPLAY NAME", name); 
      String email = acct.getEmail(); 
      Log.e("USER EMAIL", email); 
      String profile = String.valueOf(acct.getPhotoUrl()); 
      Log.e("USER PROFILE", profile); 
      Log.e("ID", acct.getId()); 
     } 
    } 

    private void showProgressDialog() { 
     if (mProgressDialog == null) { 
      mProgressDialog = new ProgressDialog(this); 
      mProgressDialog.setMessage("Loading...."); 
      mProgressDialog.setIndeterminate(true); 
     } 

     mProgressDialog.show(); 
    } 

    private void hideProgressDialog() { 
     if (mProgressDialog != null && mProgressDialog.isShowing()) { 
      mProgressDialog.hide(); 
     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    protected void attachBaseContext(Context newBase) { 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 
} 
0

使用SharedPreferencesプロファイル名などのデータを格納するために、プロフィール画像のURLなどログアウトボタンを するとユーザーのクリック、SharedPreferencesからこれらのデータを削除し、また、Googleからユーザーをログアウトします。 このコードを使用してGoogleからログアウトします。

0

SharedPreferences私は統合アカウントシステムの使用をお勧めします。 AccountManager

この方法で実装することは、ちょうどSharedPreferencesを使用するよりも少し難しくなりますが、一度理解すればそれは非常に簡単です。 like this one

SharedPreferencesは、アプリについての好み(日付や時刻の形式など)を保存するためのものです。判明あなたがやりたいことは、実際にアカウント情報

関連する問題