简体   繁体   中英

Android: How to get friends birth dates from facebook calendar using Graph API

I'm working on application which need birth dates of all friends. Can some body share code how to get birth dates of all friends using graph API. I'm using following code:

// start Facebook Login
    Session.openActiveSession(this, true, new Session.StatusCallback() {

      // callback when session changes state
      @Override
      public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {

          // make request to the 
            Request.executeMyFriendsRequestAsync(session, new Request.GraphUserListCallback() {

                @Override
                public void onCompleted(List<GraphUser> users, Response response) {
                    //Log.d("AL",""+users.size() + response.toString());
                    for (int i=0;i<users.size();i++){
                        Log.d("AL",""+users.get(i).toString());
                        welcome.setText("Done");
                    }

                }
            });
        }
      }
    });

And this is only returning friends name and id only. Where I have to set permissions to get friends birthday? I'm new in facebook SDK. And using SDK v3.

graph api is returning following json result

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"id":"1580811776","name":"Jamal Abdul Nasir"},{"id":"1610349118","name":"Ahmed Nawaz"}],"paging":{"next":"https:\/\/graph.facebook.com\/100004790803061\/friends?format=json&access_token=AAABtTr8g5U4BANiJdCiBFxQeg0l1eqYYzmSWVM8G1UlyAhTtUrAsoEZAgU19dECXTE2nw7pHIz8bDb7OJGM4wAwzusOVZAQN8yaiYVsQZDZD&limit=5000&offset=5000&__after_id=1610349118"}}}, error: null, isFromCache:false}

which does not have birthday.

First define your callback, where you'll get friends and birthday info, if authenticated:

Session.StatusCallback statusCallback =  new Session.StatusCallback() {

  // callback when session changes state
  @Override
  public void call(Session session, SessionState state, Exception exception) {
    if (session.isOpened()) {
        // Private method, to be defined
        makeFriendsRequest();
    }
  }

};

Then, you can open the session and pass in the necessary, "friends_birthday" permissions request:

Session session = new Session(this);
session.openForRead(new Session.OpenRequest(this)
                       .setCallback(statusCallback)
                       .setPermissions(Arrays.asList("friends_birthday")));

Finally, here's the post-authentication method you can use to get friends info, including the birthday:

private void makeFriendsRequest() {
    Request myFriendsRequest = Request.newMyFriendsRequest(Session.getActiveSession(), 
            new Request.GraphUserListCallback() {

        @Override
        public void onCompleted(List<GraphUser> users, Response response) {
            if (response.getError() == null) {
                // Handle response
            }

        }

    });
    // Add birthday to the list of info to get.
    Bundle requestParams = myFriendsRequest.getParameters();
    requestParams.putString("fields", "name,birthday");
    myFriendsRequest.setParameters(requestParams);
    myFriendsRequest.executeAsync();
}

Also check out the SessionLoginSample app, bundled with the SDK if you're looking for different ways you can implement Facebook Login.

I suppose try using this:

URL url = "http://YOUR_QUERY_URL_WITH_PARAMS";
InputStream is = null;
URLConnection connection = url.openConnection();
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(                        connection.getInputStream()));
while ((line = reader.readLine()) != null) 
{
    builder.append(line);
}
String jSONString = builder.toString();
JSONObject jSONObject = new JSONObject(jSONString);

Then take the data received and display it.

Note: I have not tested this code, do not have android device to test on anymore, but should get you pointed in the right direction.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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