Android不应向发布或管理授权请求传递读取权限(电子邮件)

Android不应向发布或管理授权请求传递读取权限(电子邮件),android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我正在为我的android应用程序使用Facebook SDK。它已成功登录,但在此之后,当我想要访问graph api时,它显示不应向发布或管理授权请求传递读取权限(电子邮件),并导致我的apk崩溃,出现空指针异常。 当我使用SessionLoginBehavior.SUPPRESS\u SSO时,它可以正常工作,但当使用SessionLoginBehavior.SSO\u和\u FALLBACK时,它会显示此错误 下面是我的FacebookService课程 公共类FacebookServi

我正在为我的android应用程序使用Facebook SDK。它已成功登录,但在此之后,当我想要访问graph api时,它显示不应向发布或管理授权请求传递读取权限(电子邮件),并导致我的apk崩溃,出现空指针异常。 当我使用SessionLoginBehavior.SUPPRESS\u SSO时,它可以正常工作,但当使用SessionLoginBehavior.SSO\u和\u FALLBACK时,它会显示此错误

下面是我的FacebookService课程

公共类FacebookService{

private Context context;
private Session session;
private Session.StatusCallback statusCallback;
private List<String> permissions = Arrays.asList("email", "user_checkins", "user_birthday", "user_hometown",
        "user_location");
private FacebookRequestListener facebookRequestListener;
private String profile_url;


public interface FacebookRequestListener {

    void signedInFacebookUser(RamblerUser user);

    void errorOccuredOnFacebook();

}

public FacebookService(Context context) {

    this.context = context;

    statusCallback = new SessionStatusCallback();

}

public void login() {

    if (session == null) {
        session = new Session(context);
        Session.setActiveSession(session);
    }

    setupRequest();

}

public void logOut() {
    session = Session.getActiveSession();
    if (!session.isClosed()) {

        session.closeAndClearTokenInformation();

    }

}

public Boolean isSessionAvailable() {

    if (session == null)
        return false;
    else
        return session.isOpened();
}

private void setupRequest() {

    OpenRequest request = new Session.OpenRequest(((Activity) context));

    request.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
    request.setCallback(statusCallback);
    request.setPermissions(permissions);
    session.openForPublish(request);

}

private class SessionStatusCallback implements Session.StatusCallback {

    @Override
    public void call(Session session, SessionState state, Exception exception) {

        if (session.isOpened()) {

            callProfilePictureApi();
        }

    }
}

public void addCallback() {

    if (session != null) {
        if (statusCallback != null)
            Session.getActiveSession().addCallback(statusCallback);
    }

}

public void removeCallback() {

    if (session != null) {
        if (statusCallback != null)
            Session.getActiveSession().removeCallback(statusCallback);
    }
}

public void activityResult(int requestCode, int resultCode, Intent data) {

    Session.getActiveSession().onActivityResult(((Activity) context), requestCode, resultCode, data);

}

public void setFacebookRequestListener(FacebookRequestListener facebookRequestListener) {
    this.facebookRequestListener = facebookRequestListener;
}

private void callProfilePictureApi() {

    Bundle params = new Bundle();
    params.putBoolean("redirect", false);
    params.putString("height", "200");
    params.putString("type", "normal");
    params.putString("width", "200");
    /* make the API call */
    new Request(session, "/me/picture", params, HttpMethod.GET, new Request.Callback() {
        public void onCompleted(Response response) {
            /* handle the result */
            GraphObject go = response.getGraphObject();

            // go.getProperty("url");

            JSONObject obj = go.getInnerJSONObject();

            try {

                profile_url = obj.getJSONObject("data").get("url").toString();

                callProfileApi();

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                facebookRequestListener.errorOccuredOnFacebook();
            }

        }
    }).executeAsync();

}

private void callProfileApi() {
    Request.newMeRequest(session, new Request.GraphUserCallback() {

        @Override
        public void onCompleted(GraphUser user, Response response) {
            // TODO Auto-generated method stub

            if (user != null) {
                String email = user.asMap().get("email").toString();

                // Log.i("profile url", ""+

                RamblerUser rambleUser = new RamblerUser();

                rambleUser.socialId = user.getId();
                rambleUser.address = user.getLocation() != null ? user.getLocation().getName() : "NA";
                rambleUser.email = user.asMap().get("email").toString();
                rambleUser.socialType = com.rambler.Rambler.LoginType.GPlus;
                rambleUser.gender = "NA";
                rambleUser.socilaProfileImageUrl = "NA";
                rambleUser.socilaProfileImageUrl = profile_url;
                rambleUser.name = user.getName();
                rambleUser.screenName = user.getUsername();

                Log.i("email address", email);

                facebookRequestListener.signedInFacebookUser(rambleUser);
            } else {
                facebookRequestListener.errorOccuredOnFacebook();

            }

        }
    }).executeAsync();
}
私有上下文;
非公开会议;
private Session.StatusCallback StatusCallback;
私有列表权限=Arrays.asList(“电子邮件”、“用户\签入”、“用户\生日”、“用户\家乡”,
“用户位置”);
专用FacebookRequestListener FacebookRequestListener;
私有字符串配置文件\u url;
公共接口FacebookRequestListener{
作废SignedFaceBookUser(RamblerUser用户);
void errorOccurrendFacebook();
}
公共FacebookService(上下文){
this.context=上下文;
statusCallback=新会话statusCallback();
}
公共无效登录(){
if(会话==null){
会话=新会话(上下文);
Session.setActiveSession(Session);
}
setupRequest();
}
公开作废注销(){
session=session.getActiveSession();
如果(!session.isClosed()){
session.closeAndClearTokenInformation();
}
}
公共布尔值isSessionAvailable(){
if(会话==null)
返回false;
其他的
return session.isopend();
}
私有void setupRequest(){
OpenRequest=newsession.OpenRequest(((活动)上下文));
request.setLoginBehavior(SessionLoginBehavior.SSO_和_回退);
request.setCallback(statusCallback);
request.setPermissions(权限);
openForPublish(请求);
}
私有类SessionStatusCallback实现Session.StatusCallback{
@凌驾
公共无效调用(会话、会话状态、异常){
if(session.isOpened()){
callProfilePictureApi();
}
}
}
公共void addCallback(){
if(会话!=null){
if(statusCallback!=null)
Session.getActiveSession().addCallback(statusCallback);
}
}
public void removeCallback(){
if(会话!=null){
if(statusCallback!=null)
Session.getActiveSession().removeCallback(statusCallback);
}
}
public void activityResult(int请求代码、int结果代码、意图数据){
Session.getActiveSession().onActivityResult(((活动)上下文)、请求代码、结果代码、数据);
}
公共void setFacebookRequestListener(FacebookRequestListener FacebookRequestListener){
this.facebookRequestListener=facebookRequestListener;
}
私有void callProfilePictureApi(){
Bundle params=新Bundle();
参数putBoolean(“重定向”,false);
参数putString(“高度”、“200”);
参数putString(“类型”、“正常”);
参数putString(“宽度”,“200”);
/*进行API调用*/
新请求(会话“/me/picture”、参数、HttpMethod.GET、新请求.Callback(){
未完成公共无效(响应){
/*处理结果*/
GraphObject go=response.getGraphObject();
//go.getProperty(“url”);
JSONObject obj=go.getInnerJSONObject();
试一试{
profile_url=obj.getJSONObject(“数据”).get(“url”).toString();
callProfileApi();
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
facebookRequestListener.ErrorOccurrendFacebook();
}
}
}).executeAsync();
}
私有void callProfileApi(){
Request.newMeRequest(会话,new Request.GraphUserCallback(){
@凌驾
未完成公共无效(GraphUser用户,响应){
//TODO自动生成的方法存根
如果(用户!=null){
字符串email=user.asMap().get(“email”).toString();
//Log.i(“配置文件url”)+
RamblerUser rambleUser=新的RamblerUser();
ramblueser.socialId=user.getId();
rambleUser.address=user.getLocation()!=null?user.getLocation().getName():“NA”;
ramblueser.email=user.asMap().get(“email”).toString();
ramblueser.socialType=com.rambler.rambler.LoginType.GPlus;
rambleUser.gender=“NA”;
ramblueser.socilaProfileImageUrl=“NA”;
rambleUser.socilaProfileImageUrl=配置文件url;
ramblueser.name=user.getName();
ramblueser.screenName=user.getUsername();
Log.i(“电子邮件地址”,电子邮件);
facebookRequestListener.SignedFaceBookUser(rambleUser);
}否则{
facebookRequestListener.ErrorOccurrendFacebook();
}
}
}).executeAsync();
}

}使用读取权限而不是发布权限。您正试图使用用于发布权限的函数请求读取权限。

检查是否可以发布异常?