2013-10-01 4 views
0

Dans une application sur laquelle je travaille, j'essaie de créer une fonctionnalité à voir, ce que les amis d'un utilisateur sur Facebook utilisent également l'application. Mais je suis incapable de comprendre comment faire cela.Comment trouver des amis sur facebook, enregistré avec mon application

Par exemple: fonction Instagram Recherchez "Amis Facebook". Aussi, cela montre les amis (sur facebook) que je suis déjà, et les amis (sur facebook) qui utilisent l'application, et je peux suivre. Ce que je pensais plus tôt était d'aller chercher tous les amis email-id d'un utilisateur en particulier, les envoyer à mon application backend (php), comparer chaque adresse email avec tous les utilisateurs enregistrés email-id, puis envoyer retour les user_ids, à l'application. Mais les problèmes auxquels je suis confronté sont: 1) le facebook ne fournit pas l'adresse e-mail des amis d'un utilisateur. 2) C'est un processus très lent

Merci à l'avance.

Cordialement, Zeeshan

Répondre

0

Vous devriez être en mesure d'utiliser le SDK PHP à https://developers.facebook.com/docs/reference/php/

Soumettre une demande de GRAPH au /$userID/friends?fields=installed.

Il retournera tous les amis de l'utilisateur, mais seulement ceux qui ont également installé l'application aura un champ "installed": true dans la réponse JSON

+0

$ userID est le ID Facebook, une longue chaîne numérique, PAS l'adresse e-mail –

0

J'utilise comme

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

} 
Questions connexes