facebook login Cannot pass a publish or manage permission (email) to a request for read authorization

后端 未结 2 1355
清歌不尽
清歌不尽 2021-01-02 03:06

I have a button click to login facebook,but sometimes this code can\'t work. throw exception:Caused by:

com.facebook.FacebookException: Cannot pass a publis         


        
相关标签:
2条回答
  • 2021-01-02 03:40

    You can't call openForPublish unless your app has already been granted basic permissions first.

    Separate out your PERMISSIONS list into PERMISSIONS_READ and PERMISSIONS_PUBLISH, and put "email" into the PUBLISH side. Then call openForRead, and then requestNewPublishPermissions when your session is open.

    0 讨论(0)
  • 2021-01-02 03:41

    Here is the thing you should do, it helped me in getting my requirement done:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mLogin = (Button) findViewById(R.id.logIn);
        mLogin.setOnClickListener(this);
    
    }
    
    @Override
    public void onClick(View v) {
    
        Session currentSession = Session.getActiveSession();
        if (currentSession == null || currentSession.getState().isClosed()) {
            Session session = new Session.Builder(context).build();
            Session.setActiveSession(session);
            currentSession = session;
        }
    
        if (currentSession.isOpened()) {
            // Do whatever u want. User has logged in
    
        } else if (!currentSession.isOpened()) {
            // Ask for username and password
            OpenRequest op = new Session.OpenRequest((Activity) context);
    
            op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
            op.setCallback(null);
    
            List<String> permissions = new ArrayList<String>();
            permissions.add("publish_stream");
            permissions.add("user_likes");
            permissions.add("email");
            permissions.add("user_birthday");
            op.setPermissions(permissions);
    
            Session session = new Builder(MainActivity.this).build();
            Session.setActiveSession(session);
            session.openForPublish(op);
        }
    }
    
    public void call(Session session, SessionState state, Exception exception) {
    }
    
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (Session.getActiveSession() != null)
            Session.getActiveSession().onActivityResult(this, requestCode,
                    resultCode, data);
    
        Session currentSession = Session.getActiveSession();
        if (currentSession == null || currentSession.getState().isClosed()) {
            Session session = new Session.Builder(context).build();
            Session.setActiveSession(session);
            currentSession = session;
        }
    
        if (currentSession.isOpened()) {
            Session.openActiveSession(this, true, new Session.StatusCallback() {
    
                @Override
                public void call(final Session session, SessionState state,
                        Exception exception) {
    
                    if (session.isOpened()) {
    
                        Request.executeMeRequestAsync(session,
                                new Request.GraphUserCallback() {
    
                                    @Override
                                    public void onCompleted(GraphUser user,
                                            Response response) {
                                        if (user != null) {
    
                                            TextView welcome = (TextView) findViewById(R.id.welcome);
                                            welcome.setText("Hello "
                                                    + user.getName() + "!");
    
                                            access_token = session
                                                    .getAccessToken();
                                            firstName = user.getFirstName();
                                            fb_user_id = user.getId();
    
                                            System.out
                                                    .println("Facebook Access token: "
                                                            + access_token);
                                            System.out.println("First Name:"
                                                    + firstName);
                                            System.out.println("FB USER ID: "
                                                    + fb_user_id);
    
                                        }
                                    }
                                });
                    }
                }
            });
        }
    }
    

    Try the above code, it is just what you wanted to have.

    0 讨论(0)
提交回复
热议问题