facebook朋友列表图表retrive空数组

时间:2015-11-01 12:07:22

标签: java android facebook facebook-graph-api

我已经通过登录按钮登录到facebook,我可以获取自己的信息但是由于某种原因,当我尝试获取朋友列表时,我得到一个空的json数组作为回报。 这是示例代码: (我在我的facebook回调私有类的on success方法上调用图形请求)

private CallbackManager callbackManager;

private FacebookCallback <LoginResult> mCallBack = new FacebookCallback <LoginResult> () {
  @Override
  public void onSuccess(LoginResult loginResult) {

    //some code

    GraphRequest request = GraphRequest.newMyFriendsRequest(
      AccessToken.getCurrentAccessToken(),
      new GraphRequest.GraphJSONArrayCallback() {
        @Override
        public void onCompleted(JSONArray array, GraphResponse response) {
          if (response != null) {
            Log.d("FB", "response isnt null");
          }

          if (array != null) {
            Log.d("FB", "array: " + array.toString());
          }
        }
      });

    Bundle parameters = new Bundle();
    parameters.putString("fields", "first_name,last_name,name,id");
    request.setParameters(parameters);
    request.executeAsync();
    Log.d("FB", "parameters: " + parameters.toString());


  }

  @Override
  public void onCancel() {
    statusText.setText("you have to connect");
  }

  @Override
  public void onError(FacebookException e) {

  }
};

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
  callbackManager = CallbackManager.Factory.create();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
  return inflater.inflate(R.layout.fragment_main, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
  super.onViewCreated(view, savedInstanceState);

  statusText = (TextView) view.findViewById(R.id.status_text);
  loginButton = (LoginButton) view.findViewById(R.id.login_button);
  loginButton.setReadPermissions("user_friends");
  loginButton.setFragment(this);
  loginButton.registerCallback(callbackManager, mCallBack);
}

我尝试了这两个,因为facebook图表查询显示了id,不管我没有问他:

parameters.putString("fields", "first_name,last_name,name,id");
parameters.putString("fields", "first_name,last_name,name");

我错过了什么吗?

答案: 我已经知道图表api 2.0及更高版本没有显示你所有的朋友列表,相反它只会向你显示安装了你的应用程序并从你的应用程序连接到他们的FB帐户的朋友,即如果你发布了你的应用程序到游戏商店。如果您的应用仍处于开发状态且尚未发布,则除非您将其添加为“测试人员”并且您/他们在手机/模拟器上安装了应用并从其帐户登录,否则您将无法看到任何朋友。

添加某人作为测试人员只需转到Facebook开发人员,然后:点击顶部工具栏中的“我的应用” - &gt;从列表中选择您的应用 - &gt;点击左侧面板上的“角色” - &gt;点击“添加测试人员”按钮 - &gt;选择你想要添加为测试者的朋友。

2 个答案:

答案 0 :(得分:0)

user_friends权限上的

FB docs说:

  

为了让某个人出现在一个人的朋友列表中,两个人必须决定与您的应用分享他们的朋友列表,而不是在登录时禁用该权限。此外,在登录过程中,必须要求两位朋友都使用user_friends。

你确定你的一些朋友也登录了你的应用程序吗?

要查看请求是否已正确完成,无论您的代码如何,都可以使用Graph API explorer。请务必在右上角的选择框中选择您的应用,粘贴您从应用中获得的访问权限(很可能是AccessToken.getCurrentAccessToken())并尝试向/me/friends发出请求。 如果Graph API资源管理器中的请求返回了一些数据,那么您的代码可能有问题。否则它就是一些Facebook机制,就像上面引用的那样。

答案 1 :(得分:0)

我已经知道图表api 2.0及更高版本没有显示你所有的朋友列表,相反它只会向你显示安装了你的应用并且已经从你的应用程序连接到他们的FB帐户的朋友,即如果你把你的应用发布到了游戏商店。 如果您的应用仍处于开发状态且尚未发布,则除非您将其添加为“测试人员”并且您/他们在手机/模拟器上安装了应用并从其帐户登录,否则您将无法看到任何朋友。

添加某人作为测试人员只需转到Facebook开发人员,然后: 点击顶部工具栏中的“我的应用” - &gt;从列表中选择您的应用 - &gt;点击左侧面板上的“角色” - &gt;点击“添加测试人员”按钮 - &gt;选择你想要添加为测试者的朋友。