登录脸书注册回拨未调用

这是我的 onCreate 方法:

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.activity_social_login);
    init();
    hideActiveSocialNetworks();
    FacebookSdk.sdkInitialize(getApplicationContext());
    CallbackManager callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // not called
            Log.d("fb_login_sdk", "callback success");
        }

        @Override
        public void onCancel() {
            // not called
            Log.d("fb_login_sdk", "callback cancel");
        }

        @Override
        public void onError(FacebookException e) {
            // not called
            Log.d("fb_login_sdk", "callback onError");
        }
    });

    final Activity activity = this;

    findViewById(R.id.fb_login_sdk).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("fb_login_sdk", "click");
            List<String> perm = new ArrayList<String>();
            perm.add("user_friends");
            LoginManager.getInstance().logInWithReadPermissions(activity, perm);
        }
    });
}

登录后,不会触发 onSuccess()、onCancel()、onError() 方法。

文档:https://developers.facebook.com/docs/facebook-login/android/v2.3


答案 1

在我的活动中缺少这个:

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

答案 2

以下是检查您的Facebook Sdk设置是否正确的清单:-

  1. 检查您的清单,如果您已正确设置Facebook初始化。

    <meta-data android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
    
    <activity android:name="com.facebook.FacebookActivity"
        android:configChanges=
                "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name" />
    <activity
        android:name="com.facebook.CustomTabActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>
    
  2. 创建 Facebook CallBackManager 变量

    var fbCallManager = CallbackManager.Factory.create()
    
  3. 点击使用脸书登录按钮。将所需的权限放在数组中。

      LoginManager.getInstance()
        .logInWithReadPermissions(this, Arrays.asList("public_profile", "email", "user_friends"))
      LoginManager.getInstance().registerCallback(fbCallManager, object : FacebookCallback<LoginResult> {
        override fun onSuccess(result: LoginResult?) {
           //login success
        }
    
        override fun onCancel() {
            //login cancelled by user
    
        }
    
        override fun onError(error: FacebookException?) {
            //login error handle exception
        }
    
    })
    

    }

  4. 在 onActivityResult 方法中添加回调结果

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        fbCallManager.onActivityResult(requestCode, resultCode, data)
    }
    
  5. 为您的开发和发布密钥哈希

    keytool -exportcert -alias androiddebugkey -keystore “C:\Users\USERNAME.android\debug.keystore” |“PATH_TO_OPENSSL_LIBRARY\bin\openssl” sha1 -binary |“PATH_TO_OPENSSL_LIBRARY\bin\openssl” base64

从这里下载打开

  1. 在 Facebook 开发者控制台中设置您的密钥哈希和启动器活动。

参考资料 : 脸书