【问题标题】:facebook friend list graph retrive empty arrayfacebook好友列表图检索空数组
【发布时间】:2015-11-01 12:07:21
【问题描述】:

我已经通过登录按钮登录到 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");

我错过了什么吗?


回答: 我知道graph api 2.0及更高版本并没有显示你所有的朋友列表,而是只会显示安装了你的应用程序并从你的应用程序连接到他们的FB帐户的朋友,也就是说,如果你发布了你的应用到 Play 商店。如果您的应用程序仍在开发中且尚未发布,您将无法看到任何朋友,除非您将他们添加为“测试人员”并且您/他们在手机/模拟器上安装了该应用程序并从他们的帐户登录。

要将某人添加为测试人员,只需转到 facebook 开发人员,然后:单击顶部工具栏上的“我的应用程序”-> 从列表中选择您的应用程序-> 单击左侧面板上的“角色”-> 单击在“添加测试人员”按钮上 -> 选择您想要添加为测试人员的朋友。

【问题讨论】:

    标签: java android facebook facebook-graph-api


    【解决方案1】:

    FB docs user_friends 权限说:

    为了让一个人出现在一个人的朋友列表中,双方必须决定与您的应用分享他们的朋友列表,并且在登录期间没有禁用该权限。此外,在登录过程中,这两个朋友都必须被要求提供 user_friends。

    您确定您的某些朋友也登录了您的应用吗?


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

    【讨论】:

    • 是的,我很确定,因为我已经尝试手动使用图表并从那里获取代码,我可以在那里看到我的朋友。稍后我会使用应用程序中的令牌再试一次,如果它有效,请告诉你。
    【解决方案2】:

    我知道 graph api 2.0 及以上版本不会显示你所有的好友列表,而是只会显示安装了你的应用程序并从你的应用程序连接到他们的 FB 帐户的朋友,也就是说,如果您已将应用发布到 Play 商店。 如果您的应用程序仍在开发中且尚未发布,您将无法看到任何朋友,除非您将他们添加为“测试人员”并且您/他们在手机/模拟器上安装了该应用程序并从他们的帐户登录。

    要添加某人作为测试人员,只需转到 facebook 开发人员,然后: 单击顶部工具栏上的“我的应用程序”->从列表中选择您的应用程序->单击左侧面板上的“角色”->单击“添加测试人员”按钮->选择您要添加为测试人员的朋友.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多