2016-08-30 63 views
1

試圖讓我的Android應用程序獲取已登錄的Facebook用戶的電子郵件,生日和地點。前兩個字段可以成功檢索,但Graph API的響應中缺少位置,我找不到原因。GraphRequest(Android Facebook SDK)缺少位置數據

我登錄這些權限:

LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile", "user_friends", "email", "user_birthday", "user_location")); 

的GraphRequest執行如下:

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

      try { 
       Log.d("jsonTest171", object.toString(4)); 

       String email = object.getString("email"); 
       UserData.emailAddress = email; 

       String birthday = object.getString("birthday"); 
       UserData.birthday = birthday; 

       String location = object.getJSONObject("location").getString("name"); 
       UserData.location = location; 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
Bundle parameters = new Bundle(); 
parameters.putString("fields", "id,email,location,birthday"); 
request.setParameters(parameters); 
request.executeAsync(); 

Facebook的用戶應用程序設置爲允許所有3個必填字段,as shown here

這是包括在上面的代碼從調試線輸出的logcat:

{ 
    "id": "101936745620608", 
    "email": "[email protected]", 
    "birthday": "12\/20\/1983" 
} 

爲什麼是所請求的位置字段在圖形響應不存在?

+0

您是否驗證過用戶實際上授予了pe應用程序的空閒? (調試令牌,或者調用'/ me/permissions'來驗證。) – CBroe

+0

是的,用戶已經允許所有請求的權限。我用/ me/permissions /進行了雙重檢查,並將user_location設置爲授予。 – SVM

+1

你可以在Graph API Explorer(使用你的應用程序ID)中嘗試請求,https://developers.facebook.com/tools/explorer-那裏有什麼結果?它是否顯示任何調試消息? – CBroe

回答

3

location代替要求在包參數,如location{location}

parameters.putString("fields", "id,email,birthday,location{location}"); 

響應的位置的部分看起來像:

"location":{ 
    "location":{ 
    "city":"", 
    "country":"", 
    "latitude":0, 
    "longitude":0 
    }, 
    "id":"" 
} 

所以,你可以像你的回調方法檢索它們:

JSONObject location = object.getJSONObject("location").getJSONObject("location"); 
String city = location.getString("city"); 
String country = location.getString("country");