Facebook登录并发布权限回调不起作用。

4

public class NextActivity extends AppCompatActivity {


    CallbackManager callbackManager;
    LoginManager manager;
    ImageView image;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);

        Button shareButton = (Button)findViewById(R.id.sharebtn);
        image = (ImageView) findViewById(R.id.image);

        FacebookSdk.sdkInitialize(getApplicationContext());

        

        shareButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                checkpermission();

            }});
    }

    public void checkpermission(){
        final Bundle permBundle = new Bundle();
        permBundle.putCharSequence("permission", "publish_actions");
        GraphRequest request = new GraphRequest(
                AccessToken.getCurrentAccessToken(),
                "/me/permissions", permBundle, HttpMethod.GET,
                new GraphRequest.Callback() {
                    @Override
                    public void onCompleted(GraphResponse graphResponse) {
                        System.out.println("sammy_permission_graph_request "+graphResponse.getJSONObject());
                        try {
                            JSONArray permList = (JSONArray) graphResponse.getJSONObject().get("data");
                            if(permList.length() == 0){
                                // no data for perms, hence asking permission
                                getPublishPermission();
                            }else{
                                JSONObject permData = (JSONObject) permList.get(0);
                                String permVal = (String) permData.get("status");
                                if(permVal.equals("granted")){
                                    sharePhotoToFacebook();
                                }else{
                                    getPublishPermission();
                                }
                            }
                        } catch (JSONException e) {
                            System.out.println("sammy_exception while parsing fb check perm data "+e.toString());
                        }

                    }
                }
        );
        request.executeAsync();
    }

    public void getPublishPermission(){

        callbackManager = CallbackManager.Factory.create();
        manager = LoginManager.getInstance();
        manager.logInWithPublishPermissions(
                NextActivity.this,
                Arrays.asList("publish_actions"));

        manager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                System.out.println("sammy_got_publish_permission");
                sharePhotoToFacebook();
            }

            @Override
            public void onCancel() {
                System.out.println("sammy_cancelled while asking publish permission");
            }

            @Override
            public void onError(FacebookException error) {
                System.out.println("sammy_error occurred while asking publish permission!");
            }
        });
    }

    private void sharePhotoToFacebook(){
        System.out.println("sammy_sharing_started");
        try{

            Bitmap bm = ((BitmapDrawable)image.getDrawable()).getBitmap();

            SharePhoto photo = new SharePhoto.Builder()
                    .setBitmap(bm)
                    .setCaption("BMW Vision")
                    .setUserGenerated(true)
                    .build();

            SharePhotoContent content = new SharePhotoContent.Builder()
                    .addPhoto(photo)
                    .build();

            
            ShareApi.share(content, new FacebookCallback<Sharer.Result>() {
                @Override
                public void onSuccess(Sharer.Result result)
                {
                    System.out.println("sammy_publish_result "+result);
                    Toast.makeText(NextActivity.this, "Success in Posting", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onCancel()
                {
                    System.out.println("sammy_shareapi_canceled");
                }

                @Override
                public void onError(FacebookException e)
                {
                    System.out.println("sammy_shareapi_exception "+e);
                }
            });
            


        }catch (Exception e){
            System.out.println("sammy_exception "+e.toString());
        }

    }


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

}

我正在尝试在后台分享图片和文字到Facebook。首先,我会检查是否已经授予发布权限。如果没有,我会使用logInWithPublishPermissions来获取发布权限。但是由于某些原因,注册回调的响应总是在onCancel()中。我需要在logInWithPublishPermissions中添加什么吗?


我认为我需要先提交一份评论,以获得“发布操作”的权限。只有这样回调才能正常工作。 - CodeAssasins
我也遇到了相同的问题,但只发生在我的应用程序中特定的 Facebook 帐户上,其他帐户似乎都正常运行。 - zulkarnain shah
@zulkarnainshah。你能够发布到任何Facebook账户吗? - CodeAssasins
是的,我是。只是在一个特定的账户上我无法发布。事实上,我从Facebook返回了503错误代码。 - zulkarnain shah
你能分享一下代码吗?我也会检查是否在任何账户中得到相同的错误代码。 - CodeAssasins
注释不允许粘贴长代码。 - zulkarnain shah
1个回答

0

在Facebook开发者网站https://developers.facebook.com/上,您必须授予publish_actions权限。

请点击链接设置您的应用程序以访问publish_actions权限,并提交应用程序进行审查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接