请求电子邮件登录 facebook 总是像无休止的循环一样请求许可

Requesting email for facebook login always ask for permission like an endless loop

我已经实现了一个 facebook 登录,具有获取用户电子邮件的特殊权限。它确实有效,但问题是它还创建了调用权限的无限循环,我不知道该怎么做了。这是我的代码:

public void loginWithFacebook(View view) {

            Session.openActiveSession(this, true, new Session.StatusCallback() {

                // callback when session changes state
                @Override
                public void call(Session session, SessionState state,
                                 Exception exception) {
                    if (session.isOpened()) {
                        try {
                            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, Arrays.asList("email"));
                            session.requestNewReadPermissions(newPermissionsRequest);

                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        // make request to the /me API
                        Request request = Request.newMeRequest(session,
                                new Request.GraphUserCallback() {

                                    // callback after Graph API response with user
                                    // object
                                    @Override
                                    public void onCompleted(GraphUser user, Response response) {
                                        if (progressDialog.isShowing()) {
                                            progressDialog.dismiss();
                                        }
                                        if (user != null) {
                                            try {
                                                if (Utils.isValidEmail(user.asMap().get("email").toString())) {
                                                    Toast.makeText(getBaseContext(),user.asMap().get("email").toString(),Toast.LENGTH_SHORT).show();
                                                } else {
                                                    //SHOW TOAST NO EMAIL
                                                }
                                            }catch (Exception e){}
                                        }
                                    }

                                });
                        Request.executeBatchAsync(request);
                    }
                }
            });

    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }

出现的情况是它一直说您已经多次授权该应用程序。

您的 statusCallback 将继续被调用以用于会话状态的任何后续更改(因此当您获得电子邮件权限时,它将再次被调用),这就是您进入无限循环的原因。我建议在进一步请求之前检查您是否已经拥有电子邮件权限:

try {
    if (!session.getPermissions().contains("email")) {
        Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, Arrays.asList("email"));
        session.requestNewReadPermissions(newPermissionsRequest);
    }
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}