Facebook SDK的logInWithPublishPermissions坚持使用永恒的微调器

Sim*_*elo 6 android facebook facebook-graph-api

我想问一下我的Android应用程序的用户在按下自定义共享按钮(它只是一个ImageView)时在facebook上发布的权限.按钮的OnClick方法我执行此块:

CallbackManager facebookCallbackManager;    

...

facebookCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(facebookCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                shareContent(activity, content, true);
            }
            @Override
            public void onCancel() { }

            @Override
            public void onError(FacebookException error) { }
        });
LoginManager.getInstance().logInWithPublishPermissions(activity, Collections.singletonList("publish_actions"));
Run Code Online (Sandbox Code Playgroud)

然后我覆盖:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data); 
    facebookCallbackManager.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)

问题是请求永远不会出现:呈现永久的微调轮,并且不会调用回调(也不成功,也不取消,也不会出错).

一个.用户已经登录,根据:

public static boolean isLoggedIn() {
   AccessToken accessToken = AccessToken.getCurrentAccessToken();
   return accessToken != null;
}
Run Code Online (Sandbox Code Playgroud)

FacebookSdk.isInitialized()是真的

C.根据以下内容,授予发布权限:

private static boolean hasPublishPermissions() {
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    return accessToken != null && accessToken.getPermissions().contains("publish_actions");
}
Run Code Online (Sandbox Code Playgroud)

d.FB SDK的其他用途通过应用程序使用,它们正在运行.

即 我是FB仪表板上的app管理员

对这个问题有什么想法吗?

重要的PS:

由于Facebook的API非常稳定,取决于一天中的时间或星星的位置,而不改变代码我有三种可能的结果:

  1. 如前所述,永恒的旋转轮.
  2. 回调在onCancel没有用户交互的情况下触发方法.
  3. 它分享内容而不要求确认 - 这给了我一个很好的不需要的视频发布在我的个人FB上,没有我注意到:) -

    PS2:即使是经典LoginManager.getInstance().logInWithReadPermission现在也有同样的问题.它从来没有过.

小智 0

我认为回调管理器有错误。您声明并分配 CallbackManager facebookCallbackManager;facebookCallbackManager = CallbackManager.Factory.create();

在这里您可以看到有cbManager而不是facebookCallbackManager ,因此请仔细检查。

                                                V
LoginManager.getInstance().registerCallback(cbManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            shareContent(activity, content, true);
        }
        @Override
        public void onCancel() { }

        @Override
        public void onError(FacebookException error) { }
    });
Run Code Online (Sandbox Code Playgroud)