我想问我的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"));
然后我覆盖:
@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;
}
b。 FacebookSdk.isInitialized()为true
C。根据以下条件,不授予发布权限:
private static boolean hasPublishPermissions() {
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    return accessToken != null && accessToken.getPermissions().contains("publish_actions");
}
d。 FB SDK的其他用途可通过该应用程序使用,并且可以正常运行。
e。我是FB仪表板上的应用程序管理员
对这个问题有什么想法吗?
重要提示:
由于Facebook的API非常稳定,因此取决于一天中的时间或星星的位置,而无需更改代码,我有三种可能的结果:
  • 如前所述,是一个永不过时的旋转轮。
  • 回调在没有用户交互的情况下触发onCancel方法。
  • 它共享内容而无需确认-这使我在个人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());
            }
        });
    

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



    您可以像下面这样调用此函数
          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"));
       }
    

    10-06 03:01