0

Firebase를 사용하여 Facebook에 로그인 한 다음 이름, 이메일, 프로필 사진 및 uid를 가져 와서 Firebase 데이터베이스에 저장하려고합니다.firebase의 Facebook 인증이 작동하지 않습니다.

로그인 버튼을 클릭하고 Facebook 계정 창이 팝업 될 때까지 모든 것이 잘 작동합니다. 그 후에 "계속 Rishabh"을 클릭하여 계정을 선택하면 아무 일도 일어나지 않습니다.

인증 없음, 오류 없음, 아무 것도 없음. 동일한 Facebook 계정 선택 창이 화면에 그대로 유지되고 아무 일도 일어나지 않습니다.

도움이 될 것입니다. 응용 프로그램이 넣어

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

     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()); 
       } else { 
        // User is signed out 
        Log.d(TAG, "onAuthStateChanged:signed_out"); 
       } 
       // ... 
      } 
     }; 

     mSignInToolbar = (Toolbar) findViewById(R.id.signInToolbar); 
     setSupportActionBar(mSignInToolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     mRef = FirebaseDatabase.getInstance().getReference().child("Users"); 
     mRef.keepSynced(true); 

     mEmailField = (EditText) findViewById(R.id.emailField); 
     mPasswordField = (EditText) findViewById(R.id.passowrdField); 
     mSigninBtn = (Button) findViewById(R.id.signinBtn); 
     mProgress = new ProgressDialog(this); 

     // Initialize Facebook Login button 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     mCallbackManager = CallbackManager.Factory.create(); 
     loginButton = (LoginButton) findViewById(R.id.button_facebook_login); 
     loginButton.setReadPermissions("email", "public_profile"); 
     loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       Log.d(TAG, "facebook:onSuccess:" + loginResult); 
       handleFacebookAccessToken(loginResult.getAccessToken()); 
      } 

      @Override 
      public void onCancel() { 
       Log.d(TAG, "facebook:onCancel"); 
       // ... 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.d(TAG, "facebook:onError", error); 
       // ... 
      } 
     }); 

    } 


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


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

     // Pass the activity result back to the Facebook SDK 
     mCallbackManager.onActivityResult(requestCode, resultCode, data); 
    } 


    private void handleFacebookAccessToken(AccessToken token) { 
     Log.d(TAG, "handleFacebookAccessToken:" + token); 
     mProgress.setMessage("Logging in..."); 
     mProgress.show(); 

     AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          Log.w(TAG, "signInWithCredential", task.getException()); 
          Toast.makeText(SignInActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
          mProgress.dismiss(); 
         }else{ 
          String uid=task.getResult().getUser().getUid(); 
          String name=task.getResult().getUser().getDisplayName(); 
          String email=task.getResult().getUser().getEmail(); 
          String image=task.getResult().getUser().getPhotoUrl().toString(); 

          DatabaseReference childRef = mRef.child(uid); 
          childRef.child("name").setValue(name); 
          childRef.child("email").setValue(email); 
          childRef.child("image").setValue(image); 

          mProgress.dismiss(); 

          Intent mainIntent = new Intent(getApplicationContext(), MainActivity.class); 
          mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
          startActivity(mainIntent); 


         } 

        } 
       }); 
    } 
+0

문제가 무엇인지 알아 냈습니까? –

+0

예, 페이스 북 개발자 페이지에서 기본 권한을 변경하기 만하면됩니다. –

+0

제발,이 같은 문제에 대한 도움이 필요해. 좀 더 설명해 주시겠습니까? –

답변

2

당신이해야 할 일은 페이스 북 개발자 페이지에서 일부 권한을 변경하는 것입니다. 아래 그림을 참조하십시오. 내가 한 것처럼 필요한 권한을 "예"로 만들어야합니다. enter image description here

0
FacebookSdk.sdkInitialize(getApplicationContext()); 

:

여기 내 SignInActivity.java입니다.

+0

죄송합니다. 이미 이미 있습니다. –

+0

'YourAppNameApplication'이'Application'을 확장하는 새로운 클래스를 만듭니다. onCreate를 재정 의하여 코드를 거기에 놓습니다. manifest.xml의 ''에 'android : name = "YourAppNameApplication'을 입력하십시오. –

+0

그 방법을 시도했지만 작동하지 않았습니다. –

0

실제 장치 (에뮬레이터가 아닌)에서 응용 프로그램을 실행하여 문제를 해결했습니다.

관련 문제