2017-11-13 9 views
0

firebaseのデモアプリケーションを開発していますが、firebaseのfacebookとgoogleのログインを追加していますので、グーグルはうまく動作しますが、いつでもfacebookを使用してログインしようとしていれば実行時にAuthentication failedすべてのstackOverflowソリューションを試してみましょうが、うまくいかなかったので、誰もこの問題を解決する方法を知っていますか?以下はファイヤーベースのfacebookログインで認証に失敗しました

私のログインコードです: -

public class SplashScreen extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { 

    //constant values 
    public static final String USER_NAME="com.gaurav.javascripttutorial.username"; 
    public static final String USER_IMAGE="com.gaurav.javascripttutorial.userimage"; 
    public static final String USER_ID="com.gaurav.javascripttutorial.userid"; 

    int RC_SIGN_IN = 1000; 

    //Firebase 
    FirebaseAuth mAuth; 
    GoogleApiClient mGoogleApiClient; 
    CallbackManager mCallbackManager; 

    //views 
    private SignInButton googleLogin; 
    private LoginButton facebookLogin; 
    private ProgressDialog dialog; 

    //Shared Preference 
    SharedPreferences pref; 
    SharedPreferences.Editor editor; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.setApplicationId(getString(R.string.fb_app_id)); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.main_splashscreen); 
     googleLogin = (SignInButton) findViewById(R.id.googleLogin); 
     facebookLogin = (LoginButton) findViewById(R.id.facebookLogin); 

     pref = this.getSharedPreferences("user",0); 
     editor = pref.edit(); 

     dialog = new ProgressDialog(this); 
     dialog.setMessage("Loading, Please wait...."); 

     //Google configuration 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .requestProfile() 
       .build(); 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(this, this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API,gso) 
       .build(); 

     //Facebook configuration 
     mCallbackManager = CallbackManager.Factory.create(); 

     mAuth = FirebaseAuth.getInstance(); 

     if (mAuth.getCurrentUser()!= null){ 
      FirebaseUser user = mAuth.getCurrentUser(); 
      editor.clear(); 
      editor.putString(USER_NAME,user.getDisplayName()); 
      editor.putString(USER_ID, user.getUid()); 
      editor.putString(USER_IMAGE, user.getPhotoUrl().toString()); 
      editor.commit(); 
      Intent intent = new Intent(SplashScreen.this, MainActivity.class); 
      startActivity(intent); 
      finish(); 
     } 

     googleLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       googleSignIn(); 
      } 
     }); 
     facebookLogin.setReadPermissions("email","public_profile"); 
     facebookLogin.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       handleFacebookAccessToken(loginResult.getAccessToken()); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(SplashScreen.this, "Facebook login cancel.", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Toast.makeText(SplashScreen.this, "Something went wrong! Please try again", Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 

    private void googleSignIn(){ 
     Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(intent,RC_SIGN_IN); 
    } 

    private void handleFacebookAccessToken(AccessToken token){ 
     final AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         if (task.isSuccessful()) { 
          // Sign in success, update UI with the signed-in user's information 
          FirebaseUser user = mAuth.getCurrentUser(); 
          editor.clear(); 
          editor.putString(USER_NAME,user.getDisplayName()); 
          editor.putString(USER_ID, user.getUid()); 
          editor.putString(USER_IMAGE, user.getPhotoUrl().toString()); 
          editor.commit(); 
          Intent intent = new Intent(SplashScreen.this, MainActivity.class); 
          startActivity(intent); 
          finish(); 
          dialog.dismiss(); 
         } else { 
          // If sign in fails, display a message to the user. 
          Toast.makeText(SplashScreen.this, "Authentication failed.", Toast.LENGTH_LONG).show(); 
         } 
        } 
       }); 
    } 

    private void firebaseAuthWithGoogle(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()){ 
          FirebaseUser user = mAuth.getCurrentUser(); 
          editor.clear(); 
          editor.putString(USER_NAME,user.getDisplayName()); 
          editor.putString(USER_ID, user.getUid()); 
          editor.putString(USER_IMAGE, user.getPhotoUrl().toString()); 
          editor.commit(); 
          Intent intent = new Intent(SplashScreen.this, MainActivity.class); 
          startActivity(intent); 
          finish(); 
          dialog.dismiss(); 
         }else { 
          Toast.makeText(SplashScreen.this, "Authentication Failed", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
    } 

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

     if (requestCode == RC_SIGN_IN){ 
      if (resultCode == RESULT_OK) { 
       GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
       dialog.show(); 
       if (result.isSuccess()) { 
        GoogleSignInAccount account = result.getSignInAccount(); 
        firebaseAuthWithGoogle(account); 

       } else { 
        Log.d("Status", String.valueOf(result.getStatus().getStatusCode())); 
        Toast.makeText(this, "SignIn failed", Toast.LENGTH_SHORT).show(); 
       } 
      }else { 
       Toast.makeText(this, "Result Code error", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_LONG).show(); 

    } 
} 
+0

エラーは何ですか? logcat stacktraceを投稿する –

答えて

0

あなたは(read the docs、そうでない場合は)正しく設定すべてを持っていると仮定すると、これはKotlinコードは申し訳ありませんが、(私のために正常に動作しているあなたは、Javaが必要な場合は、ちょうど。作る翻訳):

マイActivityが伸びるAppCompatActivity

class ActivityLogin : AppCompatActivity() { 

    private val callbackManager: CallbackManager = CallbackManager.Factory.create() 
    private val mAuth: FirebaseAuth = FirebaseAuth.getInstance() 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.main_splashscreen) 

     loginButton.setReadPermissions("email", "public_profile") 
     loginButton.registerCallback(callbackManager, object : FacebookCallback<LoginResult> { 
      override fun onSuccess(result: LoginResult) { 
       handleFacebookAccessToken(result.accessToken) 
      } 

      override fun onCancel() { 
       Toast.makeText([email protected], "Facebook Authentication canceled.", Toast.LENGTH_SHORT).show() 
      } 

      override fun onError(error: FacebookException?) { 
       Toast.makeText([email protected], "Facebook Authentication failed.", Toast.LENGTH_SHORT).show() 
      } 
     }) 
    } 

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { 
     super.onActivityResult(requestCode, resultCode, data) 
     callbackManager.onActivityResult(requestCode, resultCode, data) 
    } 

    private fun handleFacebookAccessToken(token: AccessToken) { 
     val credential = FacebookAuthProvider.getCredential(token.token) 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this) { task -> 
        if (task.isSuccessful) { 
         val mainIntent = Intent([email protected], ActivityFeed::class.java) 
         startActivity(mainIntent) 
         finish() 
        } else { 
         Toast.makeText([email protected], "Firebase Authentication failed.", Toast.LENGTH_SHORT).show() 
        } 
       } 
    } 
} 

あなたが見ることができるように、あなたの活動のonCreate()中に

FacebookSdk.setApplicationId(getString(R.string.fb_app_id)); 
FacebookSdk.sdkInitialize(getApplicationContext()); 

を呼び出す必要はありません。

+0

これは疑問に答えるかもしれませんが、NAAとしてフラグが立てられないように、KotlinコードをJavaに変換することを検討してください。 [質問が特定の言語に関する質問であれば、別の言語の回答が有効ですか?](https://meta.stackoverflow.com/q/290046) – Grimthorr

関連する問題