Facebook Android SDK 4.0+用户位置



我正在努力获取用户的国家/地区,但无法获取。无法理解这里到底出了什么问题?

我指的是这份文件。这就是我迄今为止所尝试的

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());
        }
    });

和这个东西检索用户的信息

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的批准,尽管它是请求的,但没有得到批准。

上述代码在获得Facebook的许可后开始工作。

最新更新