繁体   English   中英

如何在我的应用程序中注册的Facebook上找到朋友

[英]How to find friends on facebook, registered with my app

在我正在开发的应用程序中,我试图创建一个功能以查看Facebook用户的哪些朋友也在使用该应用程序。 但是我不知道该怎么做。

例如:Instagram功能查找“ Facebook好友”。 这也显示了我已经关注的朋友(在facebook上)和正在使用该应用程序的朋友(在facebook上),我可以关注。

我之前认为是获取特定用户的所有朋友的电子邮件ID,将其发送到我的应用程序后端(php),将每个电子邮件ID与所有注册用户的电子邮件ID进行比较,然后发回user_id,到应用程序。 但我要解决的问题是:1)Facebook没有提供用户朋友的电子邮件ID。 2)这是一个非常缓慢的过程

提前致谢。

此致Zeeshan

您应该可以在https://developers.facebook.com/docs/reference/php/上使用PHP SDK。

/$userID/friends?fields=installed提交GRAPH请求。

它将返回所有用户的朋友,但是只有那些同时安装了该应用程序的朋友才会有一个"installed": true字段"installed": true JSON响应中为"installed": true

我正在使用像

public class FbFriendsActivity extends WebCallableCoreActivity {
    private ListView list;
    private Button btnDone;
    private FbFriendsAdapter adapter;
    private int index = -1;

    View view_loading;
    private ArrayList<FbData> mlist;
    private Session.StatusCallback statusCallback = new SessionStatusCallback();

    private class SessionStatusCallback implements Session.StatusCallback {
        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            if (session.isOpened()) {
                view_loading.setVisibility(View.VISIBLE);
                execQuery();
            } else if (state.equals(SessionState.CLOSED_LOGIN_FAILED)) {
                view_loading.setVisibility(View.GONE);
                Toast.makeText(FbFriendsActivity.this, "Facebook Login fail",
                        Toast.LENGTH_LONG).show();
            } else if (state.equals(SessionState.OPENING)) {
                view_loading.setVisibility(View.VISIBLE);
            }
        }
    }

    private void onClickLogin() {
        Session session = Session.getActiveSession();
        if (session == null) {
            session = new Session(this);
            Session.setActiveSession(session);
        }
        if (!session.isOpened() && !session.isClosed()) {
            session.openForRead(new Session.OpenRequest(this)
                    .setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK)
                    .setCallback(statusCallback)
                    .setPermissions(
                            Arrays.asList("basic_info", "user_about_me",
                                    "email")));
        } else {
            Session.openActiveSession(this, true, statusCallback);
        }
    }

    public void execQuery() {
        String fqlQuery = "SELECT uid, name, pic_square FROM user WHERE uid IN "
                + "(SELECT uid2 FROM friend WHERE uid1 = me() LIMIT 200)";
        Bundle params = new Bundle();
        params.putString("q", fqlQuery);
        Session session = Session.getActiveSession();
        Request request = new Request(session, "/fql", params, HttpMethod.GET,
                new Request.Callback() {
                    public void onCompleted(Response response) {
                        view_loading.setVisibility(View.GONE);
                        Log.i("Friends", "Result: " + response.toString());
                        try {
                            GraphObject go = response.getGraphObject();
                            JSONObject jso = go.getInnerJSONObject();
                            JSONArray arr = jso.getJSONArray("data");
                            mlist.clear();
                            FbData data;
                            for (int i = 0; i < (arr.length()); i++) {

                                JSONObject json_obj = arr.getJSONObject(i);
                                data = new FbData();
                                data.setName(json_obj
                                        .getString(ParsingTagConst.FB_NAME));
                                data.setFbId(json_obj
                                        .getString(ParsingTagConst.FB_ID));
                                data.setImageUrl(json_obj
                                        .getString(ParsingTagConst.FB_IMAGE_URL));
                                boolean isAppUser = json_obj
                                        .getBoolean(ParsingTagConst.FB_IS_APP_USER);
                                if (isAppUser) {
                                    mlist.add(data);
                                }
                                data = null;
                            }
                            adapter.notifyDataSetChanged();
                        } catch (Throwable t) {
                            t.printStackTrace();
                        }
                    }
                });
        Request.executeBatchAsync(request);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fb_riends);
        list = (ListView) findViewById(R.id.list);
        btnDone = (Button) findViewById(R.id.btn_done);
        view_loading = (View) findViewById(R.id.layout_loading);
        mlist = new ArrayList<FbData>();
        adapter = new FbFriendsAdapter(this, mlist);
        list.setAdapter(adapter);
        checkInternet();
        btnDone.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if (mlist.size() > 0) {
                    String fbId = mlist.get(index).getFbId();
                    makeWebRequest(FbFriendsActivity.this,
                            UrlConst.GAME_WITH_FB_USER_URL,
                            IdConst.GAME_WITH_FB_ID, true, WebRequestHelper
                                    .createGameWithFbRequest(AppPreferences
                                            .getInstance().getUserId(), fbId));
                } else {
                    Toast.makeText(FbFriendsActivity.this,
                            "No Imtemt Selected", Toast.LENGTH_LONG).show();
                }

            }
        });

        if (ApplicationClass.isConnected) {
            // makeWebRequest(FbFriendsActivity.this,
            // UrlConst.RANDOM_APPONENT_URL, IdConst.RANDOM_APPONENT,
            // true, null);
            onClickLogin();

        } else {
            Toast.makeText(FbFriendsActivity.this, "No Internet ",
                    Toast.LENGTH_LONG).show();
        }
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                index = arg2;

            }
        });

    }

    public void Cancel(View v) {
        FbFriendsActivity.this.finish();
    }

    @Override
    protected void useResponseData(JSONObject result, String identifier) {
        // TODO Auto-generated method stub
        if (result != null) {

            // {"CommandResult":{"response_string":"User not found","success":"0"}}
            try {
                JSONObject jsonObject = result
                        .getJSONObject(ParsingTagConst.COMMANDRESULT);
                String strSuccess = jsonObject
                        .getString(ParsingTagConst.SUCCESS);

                if (strSuccess.equals("1")) {

                    Intent intent = new Intent(FbFriendsActivity.this,
                            GameOfSkateActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                } else {
                    Toast.makeText(FbFriendsActivity.this,
                            "Your friend has not install SKATE",
                            Toast.LENGTH_LONG).show();
                }
            } catch (Exception e) {
                // TODO: handle exception
            }

        }

    }

    public void checkInternet() {

        WaitForInternetCallback callback = new WaitForInternetCallback(this) {
            public void onConnectionSuccess() {
                ApplicationClass.isConnected = true;
            }

            public void onConnectionFailure() {
                ApplicationClass.isConnected = false;
            }
        };
        try {
            WaitForInternet.setCallback(callback);
        } catch (SecurityException e) {
            callback.onConnectionSuccess();
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM