2016-09-12 1 views
0

私はhttps://firebase.google.com/docs/auth/android/google-signinに従って、アンドロイドアプリケーションにGoogleのサインインを含めています。しかし、唯一の違いは、私はSigninボタンをアクティビティではなくフラグメントで使用していることです。ログインボタンをクリックしてログインしようとするとログインできません。私はコードをデバッグするとき、私はGoogle認証がonActivityResultメソッドで失敗したことを知る必要があります。フラグメント内にGoogle Signinボタンを使用する

WelcomeActivity.java

public class WelcomeActivity extends AppCompatActivity { 
    private static final String TAG = "WelcomeActivity"; 


    private ViewPager welcomeViewPager; 
    private WelcomePagerAdapter welcomePagerAdapter; 
    @BindView(R.id.skip) TextView skip; 
    @BindView(R.id.login) TextView login; 

    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 

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

     ButterKnife.bind(this); 


     mAuth = FirebaseAuth.getInstance(); 

     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
        finishOnboarding(); 
       } else { 
        // User is signed out 
        Log.d(TAG, "onAuthStateChanged:signed_out"); 
       } 
       //updateUI(user); 
      } 
     }; 

     welcomeViewPager = (ViewPager) findViewById(R.id.welcome_viewPager); 
     welcomePagerAdapter = new WelcomePagerAdapter(getSupportFragmentManager()); 
     welcomeViewPager.setAdapter(welcomePagerAdapter); 

     InkPageIndicator inkPageIndicator = (InkPageIndicator) findViewById(R.id.indicator); 
     inkPageIndicator.setViewPager(welcomeViewPager); 

    } 



    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 


    private void finishOnboarding() { 
     startActivity(new Intent(this, MainActivity.class)); 
    } 
} 

と私が間違ってやっている。ここで、iは、GoogleのSIGINボタンを

public class OverviewFragment extends Fragment implements GoogleApiClient.OnConnectionFailedListener{ 
    private static final String TAG = "OverviewFragment"; 
    private static final int GOOGLE_RC_SIGN_IN = 9001; 
    private static final int TWITTER_RC_SIGN_IN = 140; 

    private GoogleApiClient mGoogleApiClient; 
    @BindView(R.id.sign_in_button) SignInButton mGoogleSigninButton; 
    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_overview, container, false); 
     ButterKnife.bind(this, rootView); 

     mAuth = FirebaseAuth.getInstance(); 

     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); 
        finishOnboarding(); 
       } else { 
        // User is signed out 
        Log.d(TAG, "onAuthStateChanged:signed_out"); 
       } 
       //updateUI(user); 
      } 
     }; 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 
     mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
       .enableAutoManage(getActivity(),this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API,gso) 
       .build(); 
     mGoogleSigninButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent signinIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
       startActivityForResult(signinIntent, GOOGLE_RC_SIGN_IN); 
      } 
     }); 

     return rootView; 
    } 

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

     if (requestCode == GOOGLE_RC_SIGN_IN){ 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       GoogleSignInAccount account = result.getSignInAccount(); 
       handleGoogleAuthentication(account); 
      } else { 
       //Google Login Failed 
       Log.d(TAG, "Google Login Failed "+result.getSignInAccount()+"Status is "+result.getStatus()); 
      } 
     } else if (requestCode == TWITTER_RC_SIGN_IN) { 
      //mTwitterLoginButton.onActivityResult(requestCode,resultCode,data); 
     } else { 
      //callbackManager.onActivityResult(requestCode,resultCode,data); 
     } 
    } 


    private void handleGoogleAuthentication(GoogleSignInAccount account) { 
     AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null); 
     mAuth.signInWithCredential(credential).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       if (task.isSuccessful()) { 
        //Save Credentials in Google Smart Lock 
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
        //updateUser(user); 
       } else { 
        // 
        Log.d(TAG, "Login failed"); 
       } 
      } 
     }); 
    } 
    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 
    private void finishOnboarding() { 
     startActivity(new Intent(getActivity(), MainActivity.class)); 
    } 
} 

で置く私の断片は、いくつかのいずれかを教えてもらえますか?ありがとうございました。私はどんな助けにも感謝します。

答えて

2

このコードを試してみて、あなたの活動ののonCreateでは私のため

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(getString(R.string.default_web_client_id)) 
      .requestServerAuthCodegetString(R.string.default_web_client_id) 
      .requestEmail() 
      .build(); 

mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
      .enableAutoManage(getActivity(), this) 
      .addApi(Plus.API, Plus.PlusOptions.builder().build()) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

オーバーライドonActivityResult

グーグルの
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    mCallbackManager.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == mController.RC_GET_TOKEN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 
} 

onClickプラスのログインボタンを

を作業してください

try { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_GET_TOKEN); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
+0

Rashpal ji、私のために働かなかった – Raju

関連する問題