簡體   English   中英

Facebook的朋友列表圖檢索空數組

[英]facebook friend list graph retrive empty array

我已經通過登錄按鈕登錄到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帳戶的朋友。已將您的應用發布到Play商店。 如果您的應用仍在開發中並且尚未發布,那么您將無法看到任何朋友,除非您將其添加為“測試人員”,並且您/他們將其安裝在手機/仿真器上並通過其帳戶登錄。

要將某人添加為測試人員,只需轉到Facebook開發人員,然后:單擊頂部工具欄上的“我的應用”->從列表中選擇您的應用->單擊左側面板上的“角色”->單擊“添加測試人員”按鈕->選擇要添加為測試人員的朋友。

關於user_friends權限的FB文檔說:

為了使一個人出現在一個人的朋友列表中, 兩個人都必須決定與您的應用共享他們的朋友列表,並且在登錄時未禁用該權限。 同樣,必須在登錄過程中要求兩個朋友都提供user_friends。

您確定您的一些朋友也已登錄您的應用程序嗎?


要查看無論代碼如何,請求是否都正確完成,可以使用Graph API Explorer 確保在右上角的選擇框中選擇您的應用,粘貼從應用中獲取的訪問令牌(很可能是AccessToken.getCurrentAccessToken() ),然后嘗試向/me/friends發出請求。 如果Graph API Explorer中的請求返回了一些數據,則您的代碼可能存在問題。 否則,這是某種Facebook機制,例如上面引用的那種。

我知道圖api 2.0及更高版本不會顯示您的所有朋友列表,而是僅向您顯示安裝了應用程序並已從您的應用程序連接到其FB帳戶的朋友。應用程式前往Play商店。 如果您的應用仍在開發中並且尚未發布,那么您將無法看到任何朋友,除非您將其添加為“測試人員”,並且您/他們將其安裝在手機/仿真器上並通過其帳戶登錄。

要將某人添加為測試人員,只需轉到Facebook開發人員,然后:單擊頂部工具欄上的“我的應用”->從列表中選擇您的應用->單擊左側面板上的“角色”->單擊“添加測試人員”按鈕->選擇要添加為測試人員的朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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