簡體   English   中英

使用Android獲取用戶Friends GraphLocation-Facebook SDK和GraphUser

[英]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之間的區別,這是調試器的屏幕截圖。 出於隱私原因,我們已故意刪除了這些字段。 最終用戶和最終用戶Facebook朋友之間的比較

當詢問朋友的數據時,您可能必須在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM