Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中从Facebook请求检索电子邮件和位置时出错_Android_Facebook_Facebook Graph Api_Facebook Android Sdk - Fatal编程技术网

在Android中从Facebook请求检索电子邮件和位置时出错

在Android中从Facebook请求检索电子邮件和位置时出错,android,facebook,facebook-graph-api,facebook-android-sdk,Android,Facebook,Facebook Graph Api,Facebook Android Sdk,我正在本地Android中使用facebook sdk 3.5。这是我获取facebook好友id/姓名的方式: private void onSessionStateChange(final Session session, SessionState state, Exception exception) { System.out.println("onSessionStateChanged"); if (session != null && s

我正在本地Android中使用facebook sdk 3.5。这是我获取facebook好友id/姓名的方式:

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);
                                    }

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

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}]}
我应该在哪里添加这些权限以获得更多详细信息

多谢各位

您的查询:

"me/friends?fields=id,name,location,email"
这意味着您正在尝试获取姓名、位置和电子邮件。您可以获取名称,但对于位置,您需要权限
好友位置
;对于电子邮件-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
    }, 
    ....
    ....
 ]
}


如果你得到-

“活动访问令牌必须用于查询有关当前用户的信息。”,“类型”:“OAutheException”

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

转到此链接

单击图形API浏览器图标-> 然后选择您的应用程序名称“YourApplication”-> 然后单击GetAccesTocken。它显示选择权限弹出窗口。->然后选择扩展权限选项卡

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

  • Facebook不允许应用程序访问好友电子邮件
其余内容请参见下图。。 您必须设置正确的权限,并查看它在我的配置文件中的工作方式

你会得到什么结果


您是否定义了
电子邮件
权限?我就是这样添加权限的:私有静态最终字符串[]权限=新字符串[]{“电子邮件”、“基本信息”、“用户位置”、“朋友位置”};最终会话=Session.getActiveSession();session.requestNewReadPermissions(newNewPermissionsRequest(getActivity(),PERMISSIONS));如果在FacebookSDK中,我将url保留为:me/friends,然后我发出一个请求,它是这样的:{request:session:{session state:OPENED,token:{AccessToken:ACCESS\u token\u REMOVED permissions:[email,user\u location,user\u friends,friends\u location,basic\u info]},appId:464998303608448},graphPath:me/friends,graphObject:null,restMethod:null,httpMethod:GET,参数:Bundle[{access\u-token=..,format=json,sdk=android,migration\u-Bundle=fbsdk:20130708}]}所以电子邮件和位置权限都在那里。但是响应仍然带有id/用户名详细信息。如果在图形工具中使用相同的请求,是否会得到相同的错误?顺便说一句,应用程序无法使用AccessToken从请求中获取用户朋友的电子邮件地址。我从请求中获取数据(但我的,不是我的朋友):{“id”:“,“姓名”:“,”电子邮件“:“,”地址“:{“id”:“,”姓名“:”Sibiu,Romania”}这是否意味着我需要一个不同的访问令牌?如果您有任何疑问,请询问me@Satheesh你好,Satheesh,我找不到获取用户个人资料图片的权限。你能告诉我我是怎么给这个权限的吗?@kunu抱歉我不知道auch,这会很奇怪,我能理解上面的逻辑,但对我来说,这很奇怪,因为我可以在需要时重新登录。你想说什么?混乱是什么?这是我收到的错误:
{会话状态:已打开,令牌:{AccessToken:ACCESS\u-token\u已删除权限:[电子邮件,用户位置,用户位置,朋友位置,基本信息]},appId:42434}
。我的困惑是为什么要删除访问令牌。我可以登录,但它已被删除,这样做要求朋友名单?你有授权的用户?请使用您使用的登录/验证代码更新问题。您的错误仅仅意味着当前会话中没有任何用户
/me
只能在用户登录到您的应用程序并进入会话后使用。此功能可以通过网站上的graph api使用,但不在代码中使用。:(@Augustus Francis我找不到获取用户个人资料图片的权限。您能告诉我如何授予该权限吗?
{
  "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
    }, 
    ....
    ....
 ]
}