Facebook Android SDK 4.0+ user_location? [英] Facebook Android SDK 4.0+ user_location?

查看:151
本文介绍了Facebook Android SDK 4.0+ user_location?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力获取用户所在的国家/地区,但无法获取.无法理解到底是哪里错了?

I'm trying hard to get User's country but I'm not able to get it. Not able to understand what exactly is wrong here ?

我指的是文档.这是我到目前为止尝试过的-

I'm referring this documentation. This is what I have tried so far -

public interface IFacebokLoginConstants extends ILoginConstants {

String KEY_FIRST_NAME = "first_name";
String KEY_LAST_NAME = "last_name";
String KEY_EMAIL = "email";
String KEY_NAME = "name";
String KEY_LOCATION = "location{location}";
String[] READ_PERMISSIONS = {"public_profile", "email", "user_friends", "user_location"};
String[] WRITE_PERMISSIONS = {"publish_actions"};
String FIELD_KEY = "fields";

String FIELD_VALUE = KEY_ID + ","
        + KEY_FIRST_NAME + ","
        + KEY_LAST_NAME + ","
        + KEY_EMAIL + ","
        + KEY_LOCATION + ","
        + KEY_NAME;
}


   //---- inside activity
    mLoginManager.logInWithPublishPermissions(this, Arrays.asList(WRITE_PERMISSIONS));

    mLoginManager.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            Log.e(TAG, "LoginResult permissions: " + loginResult.getAccessToken().getPermissions());

            Log.e(TAG, "LoginResult Denied Permissions: " + loginResult.getAccessToken().getDeclinedPermissions());

            mUserId = loginResult.getAccessToken().getUserId();


            if (!loginResult.getAccessToken().getPermissions().contains("email")) {

                //--- current activity is  FacebookLoginActivity
            mLoginManager.logInWithReadPermissions(FacebookLoginActivity.this, Arrays.asList(READ_PERMISSIONS));
            } else {

                callUserInfoRequest(loginResult);

            }

        }

        @Override
        public void onCancel() {

            showShortToast("Login cancelled");
        }

        @Override
        public void onError(FacebookException error) {

            Log.e(TAG, "Error:  " + error.getMessage());

        }
    });

这是用来检索用户信息的东西

and this thing to retrieve user's info

private void callUserInfoRequest(LoginResult loginResult) {

    GraphRequest userInfoRequest = GraphRequest.newMeRequest(
            loginResult.getAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {

                    ///---- not receiving location information
                    Log.d(TAG, response.toString());


                    try {
                        mUserName = object.getString(KEY_NAME);
                        mUserFirstName = object.getString(KEY_FIRST_NAME);
                        mUserLastName = object.getString(KEY_LAST_NAME);
                        mUserEmail = object.getString(KEY_EMAIL);


                        //after userInfo is acquired get profile image..
                        callProfileImageRequest();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
    );

    Bundle parametersBundle = new Bundle();
    parametersBundle.putString(FIELD_KEY, FIELD_VALUE);
    userInfoRequest.setParameters(parametersBundle);
    userInfoRequest.executeAsync();
}

推荐答案

由于我无法在Facebook控制台中访问应用程序,因此我不确定应用程序请求的权限.在上面的评论中与@MingLi讨论之后,我知道"user_location"权限需要Facebook的批准,尽管有人提出要求,但未批准.

As I didn't have access to app in Facebook console, I wasn't sure about permissions requested by app. After discussion with @MingLi in above comments, I got to know that "user_location" permission needs approval from Facebook and it was not approved, though it was requested.

上面的代码在Facebook授予许可后开始工作.

Above code started working after permission was granted by Facebook.

这篇关于Facebook Android SDK 4.0+ user_location?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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