Java 未调用登录Facebook registerCallback

Java 未调用登录Facebook registerCallback,java,android,facebook,facebook-javascript-sdk,Java,Android,Facebook,Facebook Javascript Sdk,以下是我的onCreate方法: @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_social_login); init(); hideActiveSocialNetworks(); FacebookSdk.sdkInitialize(getApplicationContext());

以下是我的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);
        }
    });
}
@覆盖
创建时受保护的void(捆绑){
super.onCreate(bundle);
setContentView(R.layout.activity\u social\u登录);
init();
hideActiveSocialNetworks();
sdkinInitialize(getApplicationContext());
CallbackManager CallbackManager=CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
//不打电话
Log.d(“fb_登录_sdk”,“回调成功”);
}
@凌驾
公开作废{
//不打电话
Log.d(“fb_登录_sdk”,“回调取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
//不打电话
Log.d(“fb_登录_sdk”,“回调onError”);
}
});
最终活动=此;
findviewbyd(R.id.fb_login_sdk).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Log.d(“fb_登录_sdk”,“单击”);
List perm=new ArrayList();
永久添加(“用户朋友”);
LoginManager.getInstance().logInWithReadPermissions(活动,perm);
}
});
}
登录后,不会激发onSuccess()、onCancel()和onError()方法


文档:

在我的活动中缺少以下内容:

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

当您将其添加到活动类时,您的代码将起作用

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

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

  • 如果您已正确设置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>
    
  • 单击“使用Facebook登录”按钮。将您所需的权限放入数组中

      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
        }
    
    })
    
  • 为您的应用程序提供开发和发布密钥哈希

    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

  • 在Facebook开发者控制台中设置您的Keyhash和Launcher活动

  • 参考资料:

    在facebook文档之后,我遇到了完全相同的问题。谢谢你的提问。谢谢!这救了我的命。这个解决方案有效。但是,这怎么可能呢?Facebook没有保持良好的结构。它帮助了我:-),但onActivityResult()如何与LoginManager.registerCallback()链接?只是为了知识?
      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
        }
    
    })
    
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        fbCallManager.onActivityResult(requestCode, resultCode, data)
    }