3

我在原生 Android 中使用 facebook sdk 3.5。这就是我获取我的 facebook 朋友的 id/name 的方式:

private void onSessionStateChange(final Session session,
        SessionState state, Exception exception) {
    System.out.println("onSessionStateChanged");
    if (session != null && session.isOpened()) {
        if (state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
            tokenUpdated();
        } else {
            getUserRequest(session);
            getFriendsRequest(session);
        }
    } else {
        profilePictureView.setProfileId(null);
        userNameView.setText("");
    }
}
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(getActivity(), requestCode,
                resultCode, data);
        // uiHelper.onActivityResult(requestCode, resultCode, data,
        // nativeDialogCallback);
    }


private void getFriendsRequest(Session session) {

        session.requestNewReadPermissions(new NewPermissionsRequest(
                getActivity(), PERMISSIONS));
        final ProgressDialog dialog = new ProgressDialog(getActivity());
        // get friends details
        Request request = Request.newMyFriendsRequest(session,
                new Request.GraphUserListCallback() {

                    @Override
                    public void onCompleted(List<GraphUser> users,
                            Response response) {

                        // if no errors
                        if (response.getError() == null) {
                            if (users != null) {
                                for (GraphUser user : users) {
                                    FacebookFriend fb = new FacebookFriend(user
                                            .getId(), user.getName(), "", "",
                                            "", 0);
                                        friends.add(fb);
                                    }

....
                    }
}

现在的回应是:

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"id":"213","name":"Test name"}]}}, error: null, isFromCache:false}

一切都很好,但电子邮件(如果共享)、位置、用户名等详细信息不在:

GraphObject{graphObjectClass=GraphUser, state={"id":"60711232217","name":"Test"}}

我应该在哪里设置权限?这是我的要求:

{Request:  session: {Session state:OPENED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[email, user_location, user_friends, friends_location, basic_info]}, appId:111111}, graphPath: me/friends, graphObject: null, restMethod: null, httpMethod: GET, parameters: Bundle[{access_token=dasdasdasdasdsada, format=json, sdk=android, migration_bundle=fbsdk:20130708}]}

我应该在哪里添加这些权限以获得更多详细信息?

谢谢你。

4

3 回答 3

6

转到此链接 Graphapilink

单击 Graph API Explorer 图标-> 然后选择您的应用程序名称“YourApplication”-> 然后单击 GetAccesTocken 。它会显示 Select Permission 弹出窗口。-> 然后选择 Extended Permission 选项卡。

在此处输入图像描述

最后,您将选择所需的必要权限,如上图所示

于 2013-09-18T10:58:58.283 回答
2
  • Facebook 不允许应用访问朋友的电子邮件

其余的请参见下面的图片..您必须设置正确的权限并查看它在我的个人资料中的工作方式

在此处输入图像描述

在此处输入图像描述

你会得到的结果

在此处输入图像描述

于 2013-09-18T13:56:14.880 回答
1

您的查询:

"me/friends?fields=id,name,location,email"

这意味着您正在尝试获取姓名、位置、电子邮件。你可以得到名字,但是对于你需要许可的位置friends_location;对于电子邮件- facebook 不允许您获取朋友的电子邮件。

我希望我不必为我的每个朋友创建一个获取数据的请求

当然不是。您的查询是正确的,您将在结果中得到一个数组,就像 -

{
  "data": [
    {
        "name": Friend1_Name, 
        "location": {
           "id": Friend1_LocationID, 
           "name": Friend1_Location
        }, 
        "id": Friend1_ID
    }, 
    {
        "name": Friend2_Name, 
        "location": {
           "id": Friend2_LocationID, 
           "name": Friend2_Location
        }, 
        "id": Friend2_ID
    }, 
    ....
    ....
 ]
}

现场演示


如果你得到 -

"必须使用活动访问令牌来查询有关当前用户的信息。","type":"OAuthException"

这意味着(当前)用户尚未登录您的应用程序,或者会话已过期。因此,登录/验证用户然后进行 API 调用。

于 2013-09-16T09:18:58.323 回答