मैं अपने एंड्रॉइड एप्लिकेशन को फेसबुक लॉगिन करने के लिए फायरबेस दस्तावेज़ का उपयोग कर रहा हूं। मैं Google और ट्विटर का उपयोग कर उपयोगकर्ताओं को लॉगिन करने में सफलतापूर्वक सक्षम हूं। लेकिन जब मैं फेसबुक के साथ लॉगिन पर क्लिक करता हूं, तो बटन लॉगआउट बटन में बदल रहा है। दरअसल इसे लॉग इन सफलता गतिविधि पर रीडायरेक्ट करना चाहिए, क्योंकि मैंने FirebaseAuth.AuthStateListener
कॉन्फ़िगर किया है।FirebaseAuthUserCollisionException?
मैं Activity
पोस्ट कर रहा हूं, कृपया मुझे बताएं कि क्या मैं कुछ गलत कर रहा हूं।
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = "MainActivity";
private static final int GOOGLE_RC_SIGN_IN = 9001;
private static final int TWITTER_RC_SIGN_IN = 140;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private GoogleApiClient mGoogleApiClient;
CallbackManager callbackManager;
@BindView(R.id.google_signin_button) SignInButton mGoogleSigninButton;
@BindView(R.id.facebook_login_button) LoginButton mFacebookLoginButton;
@BindView(R.id.twitter_login_button) TwitterLoginButton mTwitterLoginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TwitterAuthConfig authConfig = new TwitterAuthConfig(getString(R.string.twitter_consumer_key), getString(R.string.twitter_consumer_secret));
Fabric.with(this, new Twitter(authConfig));
FacebookSdk.sdkInitialize(this);
setContentView(R.layout.activity_main);
ButterKnife.bind(MainActivity.this);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this,this)
.addApi(Auth.GOOGLE_SIGN_IN_API,gso)
.build();
mAuth = FirebaseAuth.getInstance();
mAuthStateListener = new FirebaseAuth.AuthStateListener(){
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
//User is signed in
Log.v(TAG, "Yo Baby");
Log.d(TAG,"name"+user.getDisplayName());
goToHome();
} else {
//Do some logic
}
}
};
mGoogleSigninButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent signinIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signinIntent, GOOGLE_RC_SIGN_IN);
}
});
callbackManager = CallbackManager.Factory.create();
mFacebookLoginButton.setReadPermissions("email", "public_profile");
mFacebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
handleFacebookAuthentication(loginResult.getAccessToken());
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
mTwitterLoginButton.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
handleTwitterAuthentication(result.data);
}
@Override
public void failure(TwitterException exception) {
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.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
}
} 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(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//Save Credentials in Google Smart Lock
} else {
//
}
}
});
}
private void handleFacebookAuthentication(AccessToken accessToken) {
AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getToken());
mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//Save Credentials in Google Smart Lock
} else {
}
}
});
}
private void handleTwitterAuthentication(TwitterSession session) {
AuthCredential credential = TwitterAuthProvider.getCredential(session.getAuthToken().token, session.getAuthToken().secret);
mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//Save credentials in Google Smart lock
} else {
}
}
});
}
private void goToHome() {
startActivity(new Intent(MainActivity.this, HomeActivity.class));
finish();
return;
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthStateListener);
}
@Override
protected void onStop() {
super.onStop();
if (mAuthStateListener != null) {
mAuth.removeAuthStateListener(mAuthStateListener);
}
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
Update1
अंत में मैं कारण है कि फेसबुक लॉगिन काम नहीं कर रहा समझा। ऐसा इसलिए है क्योंकि मैंने Google साइनइन का उपयोग करके ऐप में पहले ही लॉग इन किया है। चूंकि Google और Facebook के लिए मेरा ईमेल समान है, इसलिए यह FirebaseAuthUserCollisionException
दे रहा है। Stackoverflow में प्रश्न पोस्ट करने से पहले मुझे एप्लिकेशन को डीबग किया जाना चाहिए था।
Update2
मैं इस सवाल यह कोई है जो मुझे पसंद स्थिति का सामना करना पड़ा मदद मिल सकती है के रूप में बंद करने नहीं कर रहा हूँ। और मैं FirebaseAuthUserCollisionException
के लिए समाधान भी अपडेट करूंगा, क्योंकि मैं इसमें अधिक खोदता हूं।
कैसे आप टक्कर त्रुटि संभाल किया? क्या आप दोनों प्रदाताओं को एक फायरबेस खाते में विलय करने में सक्षम हैं? –