Facebook的Andr​​oid SDK中 - 用户的电子邮件返回null [英] facebook android sdk -user email returns null

查看:163
本文介绍了Facebook的Andr​​oid SDK中 - 用户的电子邮件返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下code表示签到用户的Facebook通过我的应用程序。我收到user.getproperty(电子邮件)作为空第一次。当我运行的应用程序,第二次我得到的价值。下面是我的code。

私人无效loginToFb(){

 最后Session.NewPermissionsRequest newPermissionsRequest =新Session.NewPermissionsRequest(
            LandingPageActivity.this,Arrays.asList(
                    user_location,user_birthday,
                    user_likes,电子邮件));
    Session.openActiveSession(这一点,真,新Session.StatusCallback(){

        //回调时,会话状态变化
        @覆盖
        公共无效呼叫(会话的会话,SessionState会的状态,
                例外的例外){
            如果(session.isOpened()){
                session.requestNewReadPermissions(newPermissionsRequest);
                //使请求/ ME API
                请求请求= Request.newMeRequest(会话,
                        新Request.GraphUserCallback(){

                            //后与用户图形API响应回调
                            // 目的
                            @覆盖
                            公共无效onCompleted(GraphUser用户,
                                    响应响应){
                                如果(用户!= NULL){
                                    fetchUserFbDetails(用户);
                                }
                            }

                        });
                Request.executeBatchAsync(要求);

            }

        }
    });

}
 

解决方案

问题是,你要求里面的状态回调新的权限,但你会立即作出meRequest之前,新的权限请求完成(全权限和会话打开请求是异步的)。

既然你问了只读权限,就没有必要进行单独的许可要求,你可以做到这一切一气呵成。是这样的:

  Session.OpenRequest openRequest =新Session.OpenRequest(LandingPageActivity.this);
openRequest.setPermissions(Arrays.asList ...);
openRequest.setCallback(新Session.StatusCallback(){
    //回调时,会话状态变化
    @覆盖
    公共无效呼叫(会话的会话,SessionState会的状态,
            例外的例外){
        如果(session.isOpened()){
            //使请求/ ME API
            请求请求= Request.newMeRequest(会话,
                    新Request.GraphUserCallback(){

                        //后与用户图形API响应回调
                        // 目的
                        @覆盖
                        公共无效onCompleted(GraphUser用户,
                                响应响应){
                            如果(用户!= NULL){
                                fetchUserFbDetails(用户);
                            }
                        }

                    });
            request.executeAsync();

        }
});
会话会话=新的Session(LandingPageActivity.this);
Session.setActiveSession(会议);
session.openForRead(openRequest);
 

I am having the following code that signin the user to facebook through my app. I am getting user.getproperty("email") as null first time. when i run the app second time i am getting the value. below is my code.

private void loginToFb() {

    final Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
            LandingPageActivity.this, Arrays.asList(
                    "user_location", "user_birthday",
                    "user_likes", "email"));
    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()) {
                session.requestNewReadPermissions(newPermissionsRequest);
                // 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 (user != null) {
                                    fetchUserFbDetails(user);
                                }
                            }

                        });
                Request.executeBatchAsync(request);

            }

        }
    });

}

解决方案

The issue is that you're requesting new permissions INSIDE the status callback, but then you're making the meRequest immediately, before the new permissions request completes (all permissions and session open requests are asynchronous).

Since you're asking for only read permissions, there's no need to make a separate permission request, you can do it all in one go. Something like:

Session.OpenRequest openRequest = new Session.OpenRequest(LandingPageActivity.this);
openRequest.setPermissions(Arrays.asList...);
openRequest.setCallback(new Session.StatusCallback() {
    // callback when session changes state
    @Override
    public void call(Session session, SessionState state,
            Exception exception) {
        if (session.isOpened()) {
            // 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 (user != null) {
                                fetchUserFbDetails(user);
                            }
                        }

                    });
            request.executeAsync();

        }
});
Session session = new Session(LandingPageActivity.this);
Session.setActiveSession(session);
session.openForRead(openRequest);

这篇关于Facebook的Andr​​oid SDK中 - 用户的电子邮件返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆