Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android facebook sdk 4.x有什么问题吗?_Android_Facebook_Facebook Graph Api_Facebook Login - Fatal编程技术网

Android facebook sdk 4.x有什么问题吗?

Android facebook sdk 4.x有什么问题吗?,android,facebook,facebook-graph-api,facebook-login,Android,Facebook,Facebook Graph Api,Facebook Login,我试图在两个不同的应用程序中获取用户电子邮件,但总是得到空响应。我的同事也有同样的问题,在网上我只能找到旧版本的回复 我知道Facebook并不能保证人们总能成功地检索到用户的电子邮件,但我在不同的Facebook用户上进行了测试,得到了相同的响应 我希望能得到一些帮助,甚至是确认我的代码没有错误 FacebookSdk.sdkInitialize(this.getApplicationContext()); callbackManager = CallbackManager.F

我试图在两个不同的应用程序中获取用户电子邮件,但总是得到空响应。我的同事也有同样的问题,在网上我只能找到旧版本的回复

我知道Facebook并不能保证人们总能成功地检索到用户的电子邮件,但我在不同的Facebook用户上进行了测试,得到了相同的响应

我希望能得到一些帮助,甚至是确认我的代码没有错误

    FacebookSdk.sdkInitialize(this.getApplicationContext());
    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            new GraphRequest(
                    AccessToken.getCurrentAccessToken(),
                    "/me",
                    null,
                    HttpMethod.GET,
                    new GraphRequest.Callback() {

                        public void onCompleted(GraphResponse response) {
                            try {
                            trace("GRAPH RESPONSE" + response.getJSONObject().toString()); // returns {name:{}, id{}}

                                String token = AccessToken.getCurrentAccessToken().getToken();
                                String userProfilePicURL = "https://graph.facebook.com/me/picture?type=large&method=GET&access_token=" + token;
                                String fullName = response.getJSONObject().getString("name");
                                String email = response.getJSONObject().optString("email");
                                String[] names = fullName.split(" ");
                                UserProfile.getInstance().setLoginProfileParams(names[0], names[1], userProfilePicURL, token);

                            } catch (JSONException e) {
                                trace("json error " + e);
                            }
                        }

                    }
            ).executeAsync();

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException e) {

        }
    });

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

    private void facebookLogin() {
        LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
            Arrays.asList("public_profile", "email"));
    }
FacebookSdk.sdkinInitialize(this.getApplicationContext());
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/我”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
试一试{
跟踪(“图形响应”+RESPONSE.getJSONObject().toString());//返回{name:{},id{}}
字符串标记=AccessToken.getCurrentAccessToken().getToken();
字符串userProfilePicURL=”https://graph.facebook.com/me/picture?type=large&method=GET&access_token=“+代币;
String fullName=response.getJSONObject().getString(“名称”);
字符串email=response.getJSONObject().optString(“电子邮件”);
String[]name=fullName.split(“”);
UserProfile.getInstance().setLoginProfileParams(名称[0],名称[1],userProfilePicURL,令牌);
}捕获(JSONException e){
跟踪(“json错误”+e);
}
}
}
).executeAsync();
}
@凌驾
公开作废{
}
@凌驾
公共无效onError(FaceBook例外e){
}
});
@凌驾
受保护的void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
私有void facebookLogin(){
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
asList(“public_profile”、“email”);
}

自Graph API v2.4以来,您需要专门添加电子邮件字段,而不是仅使用
/me
您必须添加要获取的字段:

/me?fields=name,email
当然,这只是API调用的基本形式,正如您在文档中看到的,您需要在“GraphRequest”中添加“fields”参数作为参数:


在changelog中搜索“声明性字段”:

谢谢您的输入,但现在我得到了{Response:responseCode:400,graphObject:null,error:{HttpStatus:400,errorCode:2500,errorType:OAuthException,errorMessage:必须使用活动访问令牌来查询有关当前用户的信息。}}我在网上找不到足够清晰的东西……或者我只是想知道,正如错误消息告诉你的,你必须使用活动访问令牌。确保用户已登录。我理解错误消息告诉我的内容,但我将为其提供AccessToken.getCurrentAccessToken();我还尝试传递一个包含AccessToken.getCurrentAccessToken实例的params包,而不是在执行新的GraphRequest时传递null。AccessToken很好…基本上,如果我使用“/me”,我会得到一个包含{“id”:“某物”,“名称”:“某物”}的graphResponse,如果我使用“/me?fields=name,email”我会得到null响应。。。我在这里慢慢发疯了好吧,你是否授权了电子邮件权限,它是否包含在访问令牌中?