2017-05-08 15 views
10

Tôi đang cố gắng đăng nhập bằng facebook trong cài đặt lại ứng dụng Android. Ban đầu tôi đã đăng ký sử dụng Google và liên kết thành công với Firebase.Đăng nhập bằng Facebook nếu tài khoản đã được liên kết với google trong khi đăng ký lần đầu trong Firebase Android

Nhưng khi tôi cố gắng để làm với facebook nó mang lại cho một

FirebaseAuthUserCollisionException 

Tôi đọc trong Firebase Documentation mà bạn có thể làm như vậy bằng cách

FirebaseUser prevUser = currentUser; 
currentUser = auth.signInWithCredential(credential).await().getUser(); 
// Merge prevUser and currentUser accounts and data 
// ... 

nhưng đây await() phương pháp không còn tồn tại. Ngoài ra sau khi tìm kiếm một chút, tôi đã tìm ra giải pháp này

Tasks.await(mAuth.signInWithCredential(credential)).getUser(); 

Nhưng điều này cũng gây ra lỗi khi đưa người dùng hiện tại đã được liên kết. Tôi có thể làm gì để giải quyết vấn đề này?

+3

Tôi không chắc chắn vì vậy tôi sẽ không đăng câu trả lời này, nhưng tôi biết điều đó trong bảng điều khiển Firebase, trong phần Xác thực> Phương thức đăng nhập, ở phía dưới, nơi có nội dung Nâng cao, có một nơi để định cấu hình cho phép nhiều tài khoản đến cùng một địa chỉ. Vì tài liệu bạn đã liên kết cho biết bạn phải đăng nhập bằng luồng xác thực trước tiên, bạn phải có khả năng tạo nhiều tài khoản với cùng một email trước khi bạn có thể hợp nhất chúng. https://support.google.com/firebase/answer/6400716?hl=en –

+0

Jen Person là đúng – faruk

+0

làm cách nào để sau đó hợp nhất các tài khoản @faruk – Shubham

Trả lời

0

Không cần theo phương thức .await() để nhận người dùng Firebase.
Sử dụng FirebaseAuth.AuthStateListener để thay thế.

Vì vậy, bạn thực hiện dấu hiệu căn cứ hỏa lực với một cái gì đó như thế này:

FirebaseAuth.getInstance()signInWithCredential(credential) 
       .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         if (task.isSuccessful()) { 
          Log.d(TAG, "login success"); 
         } else { 
          Log.d(TAG, "login error"); 
         } 

        } 
       }); 

Và thực hiện AuthStateListener được trigerred mỗi khi trạng thái người dùng đang thay đổi:

private FirebaseAuth.AuthStateListener authStateListener; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     initAuthStateListener(); 

    } 

private void initAuthStateListener() { 

     authStateListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user == null) { 
        //user is not logged in 
       } else { 
        //user is logged in 
       //logic to finish the activity and proceed to the app can be put here 
       } 
      } 
     }; 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     FirebaseAuth.getInstance().addAuthStateListener(authStateListener); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     FirebaseAuth.getInstance().removeAuthStateListener(authStateListener); 
    } 

Lưu ý: onAuthStateChanged được trigerred một lần khi authStateListener được thêm vào thể hiện autbase của Firebase.

Đồng thời đảm bảo thông số Prevent creation of multiple accounts with the same email address được đặt trên bảng điều khiển firebase (Xác thực >> PHƯƠNG PHÁP ĐĂNG KÝ >> Nâng cao >> Một tài khoản cho mỗi địa chỉ email (Thay đổi)).

+0

điều này sẽ không hữu ích khi người dùng đã đăng ký một lần với google plus id..it cung cấp cho FirebaseAuthUserCollisionException. Sau đó, chúng tôi cần hợp nhất cả hai tài khoản mà tài liệu cho biết sử dụng đang chờ(). nhưng tôi không thể sử dụng thành công – Shubham

+0

khi bạn đăng nhập bằng google và sau đó đăng nhập bằng facebook bằng cùng một email, firebase liên kết các tài khoản đó với một tài khoản theo mặc định (cũng kiểm tra xem cài đặt được đề cập ở cuối câu trả lời của tôi có được đặt không bảng điều khiển firebase của dự án của bạn) – dzikovskyy

+0

liên kết không diễn ra theo mặc định – Shubham

Các vấn đề liên quan