0

我正在努力获取用户的国家,但我无法得到它。无法理解这里究竟有什么问题?Facebook Android SDK 4.0+ user_location?

我指的是this文档。这是我到目前为止已经试过 -

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

检查此http://stackoverflow.com/a/32073757/3535399 –

+0

@vivektakrani已经尝试过此解决方案 - 位置{位置}在上面的代码中提到的注释中提到 –

+0

首先尝试您的请求在Graph API Explorer中,并看看什么正好你回来了,以什么结构。 https://developers.facebook.com/tools/explorer – CBroe

回答

0

由于我没有访问Facebook的控制台应用程序,我不知道有关权限由应用请求。在上面的评论中与@MingLi讨论后,我知道“user_location”权限需要Facebook的批准,并且没有被批准,尽管它被要求。

上面的代码在Facebook授予权限后开始工作。