I want to access friend list from facebook account,
the proble is that the friend list is accessed in simulatore but not in device, so what i have to do about this??
Thanks...
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
friendsRequest.session = FBSession.activeSession;
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
NSLog(#"Found: %lu friends", (unsigned long)friends.count);
for (NSDictionary<FBGraphUser>* friend in friends)
{
NSLog(#"I have a friend named %# ", friend.name);
}
}];
Try this..
#property (nonatomic, strong) FBRequestConnection *connection;
-(void)requestAllFreindsWithHandler:(FBRequestHandler)handler;
{
NSAssert([FBSession activeSession] != nil, #"Login required ");
self.connection = [FBRequestConnection startForMyFriendsWithCompletionHandler:handler];
}
Related
how can i get the Facebook all friend list in my iOS Application tableview and also i want to write some text on the particular friend
I'm using Facebook latest sdk
code :
[FBRequestConnection startWithGraphPath:#"/me/friends"
parameters:nil
HTTPMethod:#"GET"
completionHandler:^(FBRequestConnection *connection, id<FBGraphUser> result, NSError *error) {
/* handle the result */
NSLog(#"%#", result);
}];
With Facebook SDK 3.0 you can do this:
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
NSLog(#"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends) {
NSLog(#"I have a friend named %# with id %#", friend.name, friend.id);
}
}];
Hope this helps..
i am getting null in friends list this is my code
-(void)getFriendList
{
FBRequest *friendsRequest=[FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler:^(FBRequestConnection *connection,NSDictionary* result,NSError *error)
{
arrFriendFB = [result objectForKey:#"data"];
arrFriendFB=[arrFriendFB valueForKey:#"first_name"];
NSLog(#"friemd=%#",arrFriendFB);
NSLog(#"friends description :%#",[arrFriendFB description]);
}];
}
As new facebook APi doc there is some modification. see some change's mention below
first you need to get access token with "user_friends" permission.
its graph API url:-
https://graph.facebook.com/me/friends?access_token=
For more information follow this link
https://developers.facebook.com/docs/facebook-login/permissions/v2.0
use this method to get friend list.
-(void)getFriendList
{
[FBSession setActiveSession:[self appDelegate].session];
FBRequest *friendRequest = [FBRequest requestForGraphPath:#"me/friends?fields=name,picture,location"];
[ friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSArray *data = [result objectForKey:#"data"];
//NSLog(#"response : %#",data);
for (FBGraphObject<FBGraphUser> *friend in data)
{
NSLog(#"name : %#",[friend name]);
}
}];
}
I am currently trying to load a user's Facebook friends into an NSMutableArray. However, when I use [users addObject: friend.name]; it doesn't add it to the array outside of the block of code. What am I missing here? Also I am trying to receive the number of friends and this also isn't working outside the block of code. What am I doing wrong here?
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
users = [[NSMutableArray alloc] init];
NSLog(#"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends) {
NSLog(#"I have a friend named %# with id %#", friend.name, friend.id);
[users addObject:friend.name];
NSLog(#"%#",users);
}
}];
Full code here: http://pastie.org/private/elynlgrkctakioi8pmtta.
yes it is added in the array, but we have to wait sometime to complete the block process. I am fetching friends and storing in NSMutableArray. and use it after some delay of time. I am using below code.
[FBSession setActiveSession:[self appDelegate].session];
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
users = [[NSMutableArray alloc] init];
NSLog(#"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends)
{
NSLog(#"name : %#",[friend name]);
[tempArray addObject:friend];
}
}];
[self performSelector:#selector(afterFetchingFbFriend:) withObject:tempArray afterDelay:10.0];
in 10.0 delay it completes the block process and i have all the friends in my array.
and then my method to process array is :
-(void)afterFetchingFbFriend:(NSMutableArray *)tempArray
{
//do something.
}
if not getting in 10.0 delay time then increase it as it depends on internet speed so the fetching friends time may be different. It works for me.
I am tried to retrieve the Email Address from Facebook Friends.but,It cannot retrieved the email address.
I printed the email address.but,It displays the null.
I added email address in permissions array,FBRequest.
-(void)LoginButtonTapped
{
[FBSession.activeSession openWithCompletionHandler:^(FBSession *session,
FBSessionState state,
NSError *error)
{
if (FBSession.activeSession.isOpen)
{
NSLog(#"TOKEN : %#",[[FBSession activeSession]accessTokenData]);
FBRequest *friendRequest = [FBRequest requestForGraphPath:#"me/friends?fields=name,picture,birthday,email,location"];
[friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
NSArray *data = [result objectForKey:#"data"];
for (FBGraphObject<FBGraphUser> *friend in data)
{
[delegate.friendsListArray addObject:friend];
NSLog(#"%#:%#:%#:", [friend name],[friend birthday],[friend id]);
NSString *email=[friend objectForKey:#"email"];
NSLog(#"Email:%#",email);
}
}];
}
}];
}
- (void) performPublishAction:(void (^)(void)) action
{
NSArray *permissions = [[NSArray alloc] initWithObjects:#"user_birthday",#"user_location",#"friends_email",#"friends_hometown",#"friends_birthday",#"friends_location",#"publish_actions",#"user_photos",nil];
[[delegate facebook]authorize:permissions];
if ([FBSession.activeSession.permissions indexOfObject:permissions] == NSNotFound)
{
[FBSession.activeSession requestNewPublishPermissions:permissions
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
if (!error) {
action();
}
}];
}
else
{
action();
}
[permissions release];
}
Any ideas please help me.
Shot in the dark but did you check your error value? Also what's the count of the # of records you get back?
Also could just try this instead, which seems to work (you might need to use objectForKey to get email out of the object):
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
NSLog(#"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends) {
NSLog(#"I have a friend named %# with id %#", friend.name, friend.id);
}
}];
I am trying to get a list of all my Facebook Friends, who are using the App I am getting the list of all friends, but how do I filter all the friends which are using the app?
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
NSLog(#"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends) {
NSLog(#"I have a friend named %# with id %#", friend.name, friend.id);
}
NSArray *friendIDs = [friends collect:^id(NSDictionary<FBGraphUser>* friend) {
return friend.id;
}];
}];
Thanks.
Thats the way how it works with iOS5+
FBRequest* friendsRequest = [FBRequest requestWithGraphPath:#"me/friends?fields=installed" parameters:nil HTTPMethod:#"GET"];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
NSArray* friends = [result objectForKey:#"data"];
NSLog(#"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends) {
NSLog(#"I have a friend named %# with id %#", friend.name, friend.id);
}
NSArray *friendIDs = [friends collect:^id(NSDictionary<FBGraphUser>* friend) {
return friend.id;
}];
}];
This can be used for latest Facebook API 3.2 ,
[FBRequestConnection startForMyFriendsWithCompletionHandler:
^(FBRequestConnection *connection, id<FBGraphUser> friends, NSError *error)
{
if(!error){
NSLog(#"results = %#", friends);
}
}
];
"is_app_user" that you need to check.
- (void)getFriends
{
NSString *query = #"select uid, name, is_app_user "
#"from user "
#"where uid in (select uid2 from friend where uid1=me() )";
NSDictionary *queryParam =
[NSDictionary dictionaryWithObjectsAndKeys:query, #"q", nil];
// Make the API request that uses FQL
[FBRequestConnection startWithGraphPath:#"/fql"
parameters:queryParam
HTTPMethod:#"GET"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (error) {
DLog(#"Error: %#", [error localizedDescription]);
[self.delegate FBDidFailedLoadFriends:error];
} else {
DLog(#"Result: %#", result);
}
DLog(#"%#",((FBGraphObject*)result)[#"data"]);
}];
}
You can do it with FQL. It will directly give list of friends who are using app.
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
Should be closed as Facebook has changed the way you can access the friends list.
Now all you can access is app users.