android - Facebook SDK 的 logInWithPublishPermissions 卡在永久微调器上

标签 android facebook facebook-graph-api

我想询问我的 Android 应用程序的用户是否允许在按下自定义共享按钮(它只是一个 ImageView)时在 Facebook 上发布。在按钮的 OnClick 方法上,我执行此 block :

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"));

然后我覆盖:

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

问题是请求永远不会到来:出现了一个永恒的旋转轮,并且没有回调(既没有成功,也没有取消,也没有错误)被调用。

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

public static boolean isLoggedIn() {
   AccessToken accessToken = AccessToken.getCurrentAccessToken();
   return accessToken != null;
}

FacebookSdk.isInitialized() 为真

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

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

FB SDK 的其他用途是通过应用程序使用并且它们正在运行。

我是 FB 仪表板上的应用程序管理员

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

重要提示:

由于 Facebook 的 API 非常稳定,根据一天中的时间或星星的位置,无需更改代码我有三种可能的结果:

  1. 如前所述,一个永恒的万向轮。

  2. 回调触发 onCancel 方法,无需用户交互。

  3. 它在不要求确认的情况下分享内容 - 这给了我一个很好的不需要的视频发布在我的个人 FB 上,而我没有注意到 :) -

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

最佳答案

然后你可以在没有永久旋转器的情况下分享内容

 LoginManager.getInstance().registerCallback(mCallbackManagerFacebook, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            System.out.println("Success");
            if (loginResult.getRecentlyGrantedPermissions().contains("publish_actions")) {
                new shareContent(activity, content, true);

            }  else {
                //Toast.makeText(youractivity.this, "Successfully Connected to Facebook.", Toast.LENGTH_LONG).show();

                GetFacebookPublishPermissions();

            }
        }

        @Override
        public void onCancel() {
            //Log.d(TAG_CANCEL, "On cancel");
            LoginManager.getInstance().logOut();
        }

        @Override
        public void onError(FacebookException error) {
            Toast.makeText(youractivity.this, "Looks like we are unable to connect to Facebook Servers.", Toast.LENGTH_LONG).show();
            LoginManager.getInstance().logOut();
            // Log.d(TAG_ERROR, error.toString());
        }
    });

并获得FacebookShare权限

 public void GetFacebookPublishPermissions(){
    if(LoginManager.getInstance()!=null)
    {
        LoginManager.getInstance().logInWithPublishPermissions(youractivity.this, Arrays.asList("publish_actions"));

    }
}

Update

你可以像下面这样调用这个函数

      AccessToken token = com.facebook.AccessToken.getCurrentAccessToken();
        if(token!=null)
        {
            if (token.getPermissions().contains("publish_actions")) {
            new shareContent(activity, content, true);
        }else{
        GetFacebookPublishPermissions();
        }
   }else{
         LoginManager.getInstance().logInWithReadPermissions(this, 
         Arrays.asList("public_profile", "email", "user_birthday"));
   }

关于android - Facebook SDK 的 logInWithPublishPermissions 卡在永久微调器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652014/

相关文章:

java - 如何在使用 Glide 加载之前解密图像

java - 无法实例化以下类 : - com. google.android.gms.ads

iphone - Facebook 对话失败,错误为 : The operation couldn’t be completed.(NSURLErrorDomain 错误 -999。)

image - Facebook 图形 API : upload multipart/form-data encoded image

javascript - 用于 Javascript 的 Facebook SDK,FB.login() 回调未触发(异步调用永远不会得到响应?)

android - 错误 :Manifest Tasks does not support the manifestOutputFile property any more, 请改用 manifestOutputDirectory。 (安卓工作室 3.0)

java - AsyncTask 和 Handler 总是在注销后启动 Activity 两次

javascript - 发布操作 : no more ID in error message when error. 代码等于 3501

facebook - 在FB应用程序中打开FB页面

android - 通过 Google Play 服务 API 将成员(member)卡添加到 Google Pay