[英]Get user Friends GraphLocation with Android - Facebook SDK and GraphUser
我在從Android應用程序上的最終用戶Facebook朋友列表中獲取位置數據時遇到了一些麻煩。
到目前為止,我可以成功打開Facebook會話,存儲和還原訪問令牌並獲取用戶朋友列表。
如Android Facebook SDK> 3.0中所定義,Facebook用戶數據在名為GraphUser
的對象中具有強類型。
為了獲取好友列表,我使用了Request.newMyFriendsRequest
,它成功后為我提供了GraphUsers
列表。
不幸的是,盡管我為自己的努力提供了必要的權限,但我無法檢索到最終用戶朋友的姓名和ID以外的信息……僅此而已:每個最終用戶Facebook朋友都是一個僅包含其姓名和ID的GraphUser。
這是我使用的權限列表:
"user_status", "read_friendlists", "email", "user_location", "friends_location"
SDK使用Facebook LoginButton,告知最終用戶該應用確實需要上述權限列表。
但是,當我想使用Graphuser.getLocation時,我會得到null
值。 沒有城市,沒有州,沒有郵政編碼,什么都沒有。
這是用於檢索最終用戶數據的代碼段:
public final void setCurrentUser(final Context context) {
if (this.session != null && this.session.isOpened()) {
final Request requestCurrentUserProfile = Request.newMeRequest(
this.session, new Request.GraphUserCallback() {
public final void onCompleted(final GraphUser user, final Response response) {
currentUser = user; // currentUser is defined as a class member
if (response.getError() != null ) {
// TODO
}
}
});
requestCurrentUserProfile.executeAsync();
} else
this.currentUser = null;
}
使用調試器在這里放置一個斷點,GraphUser表示就完成了:我擁有了我需要的所有數據,包括位置!
關於最終用戶的好友列表...
public final void fetchFriendsList() {
if (this.session != null && this.session.isOpened()) {
final Request requestUserFriendsList = Request.newMyFriendsRequest(
this.session, new Request.GraphUserListCallback() {
public final void onCompleted(final List<GraphUser> users, final Response response) {
if (users != null && users.size() > 0)
userFriendsList = new ArrayList<GraphUser>(users);
}
}
);
requestUserFriendsList.executeAsync();
}
}
用戶幾乎是空的,這里只是一個名稱和一個ID。 就是這樣,僅此而已。
請問這個Request
沒有提供更多數據嗎?
如果是這樣,我應該使用哪種方法來獲取所需的數據?
謝謝 !
[編輯]
查看我的應用程序審查狀態,我什至都不願收回朋友列表或當前最終用戶的位置數據? !
這是怎么回事? 我不明白...請幫助!
[EDIT2]
為了向您展示最終用戶GraphUser和最終用戶朋友列表GraphUsers之間的區別,這是調試器的屏幕截圖。 出於隱私原因,我們已故意刪除了這些字段。
當詢問朋友的數據時,您可能必須在request參數中顯式請求這些字段。
像這樣,
private void makeMyFriendsRequest(final Session session) {
Request request = Request.newMyFriendsRequest(session, new Request.GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> users, Response response) {
// If the response is successful
if (session == Session.getActiveSession()) {
for (GraphUser user : users) {
System.out.println(user.getFirstName() + " " + user.getLastName());
System.out.println(users.get(i).getId());
GraphLocation loc = users.get(i).getLocation();
System.out.println(loc != null ? loc.getCity() : "loc not available");
}
}
}
});
// here add fields explicitly
Bundle bundle = request.getParameters();
bundle.putString("fields", "id,first_name,last_name,birthday,location");
request.executeAsync();
我希望這將有所幫助。
PS:我假設您正在使用這樣的登錄按鈕來請求權限,
loginButton.setReadPermissions(Arrays.asList("user_location", "friends_location"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.