1

私はここ数日からかなり簡単に何かを達成しようとしていますが、私はそれをしませんでした。Googleログイン後に自動的に活動を開始する - Androidスタジオ

基本的に、Google Developersのサンプルアプリケーションを使用して、自分のアプリのログインプロセスを作成しました。ログインボタンをクリックするとGoogleからログインできました。また、ユーザーが既にログインして、自分のアプリを認証しているかどうかを知ることもできました。

私がしたいのは、ユーザーが自分のアプリを起動して既にログインしているときに、ログイン画面をスキップして自動的に次のアクティビティに移動することです。

私はたくさんのテストを行いましたが、私がここで試したすべてを投稿するつもりはありませんでした。ここで私は今のために使用されるコード:

マイMainActivity.java:

public class MainActivity extends AppCompatActivity implements 
     GoogleApiClient.OnConnectionFailedListener, 
     View.OnClickListener { 

    private static final String TAG = "SignInActivity"; 
    private static final int RC_SIGN_IN = 9001; 

    private GoogleApiClient mGoogleApiClient; 
    private ProgressDialog mProgressDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Button listeners 
     findViewById(R.id.sign_in_button).setOnClickListener(this); 

     // [START configure_signin] 
     // Configure sign-in to request the user's ID, email address, and basic 
     // profile. ID and basic profile are included in DEFAULT_SIGN_IN. 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .build(); 
     // [END configure_signin] 

     // [START build_client] 
     // Build a GoogleApiClient with access to the Google Sign-In API and the 
     // options specified by gso. 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
     // [END build_client] 

     // [START customize_button] 
     // Customize sign-in button. The sign-in button can be displayed in 
     // multiple sizes and color schemes. It can also be contextually 
     // rendered based on the requested scopes. For example. a red button may 
     // be displayed when Google+ scopes are requested, but a white button 
     // may be displayed when only basic profile is requested. Try adding the 
     // Scopes.PLUS_LOGIN scope to the GoogleSignInOptions to see the 
     // difference. 
     SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); 
     signInButton.setSize(SignInButton.SIZE_STANDARD); 
     signInButton.setScopes(gso.getScopeArray()); 
     // [END customize_button] 
    } 

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

     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
     if (opr.isDone()) { 
      // If the user's cached credentials are valid, the OptionalPendingResult will be "done" 
      // and the GoogleSignInResult will be available instantly. 
      Log.d(TAG, "Got cached sign-in"); 
      GoogleSignInResult result = opr.get(); 
      handleSignInResult(result); 
     } else { 
      // If the user has not previously signed in on this device or the sign-in has expired, 
      // this asynchronous branch will attempt to sign in the user silently. Cross-device 
      // single sign-on will occur in this branch. 
      showProgressDialog(); 
      opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
       @Override 
       public void onResult(GoogleSignInResult googleSignInResult) { 
        hideProgressDialog(); 
        handleSignInResult(googleSignInResult); 
       } 
      }); 
     } 
    } 

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

     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
     } 
    } 
    // [END onActivityResult] 

    // [START handleSignInResult] 
    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
     if (result.isSuccess()) { 
      // Signed in successfully, show authenticated UI. 
      GoogleSignInAccount acct = result.getSignInAccount(); 
      updateUI(true); 

      Intent myIntent = new Intent(MainActivity.this, SplashScreen.class); 
      startActivity(myIntent); 
      finish(); 
     } else { 
      // Signed out, show unauthenticated UI. 
      updateUI(false); 
     } 
    } 
    // [END handleSignInResult] 

    // [START signIn] 
    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 
    // [END signIn] 

    // [START signOut] 
    private void signOut() { 
     Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
       new ResultCallback<Status>() { 
        @Override 
        public void onResult(Status status) { 
         // [START_EXCLUDE] 
         updateUI(false); 
         // [END_EXCLUDE] 
        } 
       }); 
    } 
    // [END signOut] 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
     // be available. 
     Log.d(TAG, "onConnectionFailed:" + connectionResult); 
    } 

    private void showProgressDialog() { 
     if (mProgressDialog == null) { 
      mProgressDialog = new ProgressDialog(this); 
      mProgressDialog.setMessage(getString(R.string.loading)); 
      mProgressDialog.setIndeterminate(true); 
     } 

     mProgressDialog.show(); 
    } 

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

    private void updateUI(boolean signedIn) { 
     if (signedIn) { 
      findViewById(R.id.sign_in_button).setVisibility(View.GONE); 
     } else { 
      findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.sign_in_button: 
       signIn(); 
       break; 
     } 
    } 
} 

だから私の質問は:どのように、どこ私は次のアクティビティに行くために私の意図を置く必要がありますか?

ありがとうございました!詳細や説明が必要な場合は教えてください。

+1

保存を入れてbooleanは、ユーザーがログインしているかどうかを示します。だからあなたがaganを起動するときには、ブールをチェックしてください。もしfalseならログインフォームを実行してください。 – Raskayu

+0

あなたの 'if(requestCode == RC_SIGN_IN)'の条件にあなたの 'intent'を追加してください。または 'if(result.isSuccess())'を入れます。 – Dhruv

答えて

0

をアプリaのあなたのパラメータファイルにあなたがあなたの意図を置くことができますisSuccessでYourClassAfterLogin.class

private void handleSignInResult(GoogleSignInResult result) { 
      Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
      if (result.isSuccess()) { 
       // Signed in successfully, show authenticated UI. 
       GoogleSignInAccount acct = result.getSignInAccount(); 
       updateUI(true); 

       Intent myIntent = new Intent(MainActivity.this, YourClassAfterLogin.class); 
       startActivity(myIntent); 
       finish(); 
      } else { 
       // Signed out, show unauthenticated UI. 
       updateUI(false); 
      } 
     } 
0
// [START handleSignInResult] 
private void handleSignInResult(GoogleSignInResult result) { 
    Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
    if (result.isSuccess()) { 
     // Signed in successfully, show authenticated UI. 
     GoogleSignInAccount acct = result.getSignInAccount(); 
     updateUI(true); 

     Intent myIntent = new Intent(MainActivity.this, SplashScreen.class); 
     startActivity(myIntent); 
     finish(); 
    } else { 
     // Signed out, show unauthenticated UI. 
     updateUI(false); 

にログイン画面をスキップした後表示したいあなたの活動のクラス..

関連する問題