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));
}
}
で置く私の断片は、いくつかのいずれかを教えてもらえますか?ありがとうございました。私はどんな助けにも感謝します。
Rashpal ji、私のために働かなかった – Raju