使用Facebook iOS SDK,我如何獲得所有朋友的NSArray
,並向他們發送邀請給我的應用程序?我特意尋找圖表路徑來獲得所有的朋友。Facebook iOS SDK - 獲取朋友列表
回答
要獲取好友列表,你可以使用
https://graph.facebook.com/me/friends
[facebook requestWithGraphPath:@"me/friends"
andParams:nil
andDelegate:self];
爲了更多地瞭解所有可能的API,請閱讀
下面是一個更完整的解決方案:
在你的頭文件:
@interface myDelegate : NSObject <UIApplicationDelegate, FBSessionDelegate, FBRequestDelegate> {
Facebook *facebook;
UIWindow *window;
UINavigationController *navigationController;
NSArray *items; // to get facebook friends
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) Facebook *facebook;
@property (nonatomic, retain) NSArray *items;
@end
然後在您的實現:
@implementation myDelegate
@synthesize window;
@synthesize navigationController;
@synthesize facebook;
@synthesize items;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID_FROM_FACEBOOK" andDelegate:self];
[facebook requestWithGraphPath:@"me/friends" andDelegate:self];
return YES;
}
那麼你至少需要以下委託協議方法:
- (void)request:(FBRequest *)request didLoad:(id)result {
//ok so it's a dictionary with one element (key="data"), which is an array of dictionaries, each with "name" and "id" keys
items = [[(NSDictionary *)result objectForKey:@"data"]retain];
for (int i=0; i<[items count]; i++) {
NSDictionary *friend = [items objectAtIndex:i];
long long fbid = [[friend objectForKey:@"id"]longLongValue];
NSString *name = [friend objectForKey:@"name"];
NSLog(@"id: %lld - Name: %@", fbid, name);
}
}
與Facebook SDK 3.0,你可以做這個:
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[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 %@ with id %@", friend.name, friend.objectID);
}
}];
謝謝,你的代碼完全適合我。但是現在我想要朋友的出生日期,我試着在代碼中添加一個字段(即friend.birthday),但是它僅返回出生日期的空值。這裏是我的代碼: - 爲(NSDictionary的
你是否要求friends_birthday權限? –
終於得到了解決http://stackoverflow.com/questions/13170850/ios-facebook-sdk-3-1-retrieve-friend-birthday-returning-null – stack
也許這可以幫助
[FBRequestConnection startForMyFriendsWithCompletionHandler:
^(FBRequestConnection *connection, id<FBGraphUser> friends, NSError *error)
{
if(!error){
NSLog(@"results = %@", friends);
}
}
];
這讓我只算的朋友,但不是他們的名字不知道我要去的地方錯了 –
‘FBGraphUser’對象已。 。名和屬性.ID請檢查那些 –
與Facebook SDK 3.2 or above
我們FBWebDialogs
類的設施,打開裏面已經包含了朋友(s)列表的視圖。 Pick the friends
和send invitations to all of them
。 無需使用任何其他API調用。
Here我有簡要描述的分辨率步一步。
使用下面的函數異步讀取存儲在一個NSArray用戶的好友:
- (void)fetchFriends:(void(^)(NSArray *friends))callback
{
[FBRequestConnection startForMyFriendsWithCompletionHandler:^(FBRequestConnection *connection, id response, NSError *error) {
NSMutableArray *friends = [NSMutableArray new];
if (!error) {
[friends addObjectsFromArray:(NSArray*)[response data]];
}
callback(friends);
}];
}
在代碼中,你可以使用它作爲這樣的:
[self fetchFriends:^(NSArray *friends) {
NSLog(@"%@", friends);
}];
-(void)getFBFriends{
NSDictionary *queryParam =
[NSDictionary dictionaryWithObjectsAndKeys:@"SELECT uid, sex,name,hometown_location,birthday, pic_square,pic_big FROM user WHERE uid = me()"
@"OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())", @"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) {
NSLog(@"Error: %@", [error localizedDescription]);
} else {
NSDictionary *data=result;
//NSLog(@"the returned data of user is %@",data);
NSArray *dataArray=[data objectForKey:@"data"];
//dataArray contains first user as self user and your friend list
}
}];
}
(void)getFriendsListWithCompleteBlock:(void (^)(NSArray *, NSString *))completed{
if (!FBSession.activeSession.isOpen)
{
NSLog(@"permissions::%@",FBSession.activeSession.permissions);
// if the session is closed, then we open it here, and establish a handler for state changes
[FBSession openActiveSessionWithReadPermissions:@[@"basic_info", @"user_friends"]
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
if (error)
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
else if (session.isOpen)
{
[self showWithStatus:@""];
FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?fields=name,picture,gender"];
[friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSArray *data = [result objectForKey:@"data"];
NSMutableArray *friendsList = [[NSMutableArray alloc] init];
for (FBGraphObject<FBGraphUser> *friend in data)
{
//NSLog(@"friend:%@", friend);
NSDictionary *picture = [friend objectForKey:@"picture"];
NSDictionary *pictureData = [picture objectForKey:@"data"];
//NSLog(@"picture:%@", picture);
FBData *fb = [[FBData alloc]
initWithData:(NSString*)[friend objectForKey:@"name"]
userID:(NSInteger)[[friend objectForKey:@"id"] integerValue]
gender:(NSString*)[friend objectForKey:@"gender"]
photoURL:(NSString*)[pictureData objectForKey:@"url"]
photo:(UIImage*)nil
isPhotoDownloaded:(BOOL)NO];
[friendsList addObject:fb];
}
[self dismissStatus];
if (completed) {
completed(friendsList,@"I got it");
}
}];
}
}];
}
}
這裏是一個Swift版本。
var friendsRequest : FBRequest = FBRequest.requestForMyFriends()
friendsRequest.startWithCompletionHandler{(connection:FBRequestConnection!, result:AnyObject!, error:NSError!) -> Void in
let resultdict = result as NSDictionary
let friends : NSArray = resultdict.objectForKey("data") as NSArray
println("Found: \(friends.count) friends")
for friend in friends {
let id = friend.objectForKey("id") as String
println("I have a friend named \(friend.name) with id " + id)
}
}
所以我印刷傳入'''resultdict'''並得到以下字符串:'''{數據=();摘要= { 「TOTAL_COUNT」= 390;};}' ''。在我的情況下,數據是空的,我要求以下權限:''''public_profile「,」email「,」user_friends「'''我應該在哪裏調用這個功能?'''loginViewFetchedUserInfo' ''? –
請注意,自Graph API 2.0以來,facebook只會返回已經授予您的Facebook應用程序許可的朋友。所以,確保你有一些朋友已經給你的Facebook應用程序授予了權限。 – lucaslt89
是的我想通了。謝謝你的答案! –
//聲明在頭文件中的數組,其將持有的所有朋友名單 - 的NSMutableArray * m_allFriends;
//只分配和初始化數組一次 m_allFriends = [[NSMutableArray alloc] init];
隨着FB SDK 3.0及以上版本,你需要下面的函數調用API 2.0版本(圖API與我/朋友),以獲得FB朋友使用相同的應用程序列表。
//獲得其使用的應用程序
-(void) getMineFriends
{
[FBRequestConnection startWithGraphPath:@"me/friends"
parameters:nil
HTTPMethod:@"GET"
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
) {
NSLog(@"me/friends result=%@",result);
NSLog(@"me/friends error = %@", error.description);
NSArray *friendList = [result objectForKey:@"data"];
[m_allFriends addObjectsFromArray: friendList];
}];
}
注意啦:1)通過上述查詢返回的朋友數量的缺省限制爲25 2)如果下一個鏈接進來結果,意味着有更多的朋友會在下一個查詢中提取,等等。 3)或者,您可以更改限制(減少限制,超過25的限制),並將其傳遞給param。
////////////////////////////////////////////// //////////////////////////
對於非應用程序的朋友 -
// m_invitableFriends - 全球陣列將舉行列表的invitable朋友
也得到你需要使用(/ ME/invitable_friends)和非應用的朋友如下 -
- (void) getAllInvitableFriends
{
NSMutableArray *tempFriendsList = [[NSMutableArray alloc] init];
NSDictionary *limitParam = [NSDictionary dictionaryWithObjectsAndKeys:@"100", @"limit", nil];
[self getAllInvitableFriendsFromFB:limitParam addInList:tempFriendsList];
}
- (void) getAllInvitableFriendsFromFB:(NSDictionary*)parameters
addInList:(NSMutableArray *)tempFriendsList
{
[FBRequestConnection startWithGraphPath:@"/me/invitable_friends"
parameters:parameters
HTTPMethod:@"GET"
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
) {
NSLog(@"error=%@",error);
NSLog(@"result=%@",result);
NSArray *friendArray = [result objectForKey:@"data"];
[tempFriendsList addObjectsFromArray:friendArray];
NSDictionary *paging = [result objectForKey:@"paging"];
NSString *next = nil;
next = [paging objectForKey:@"next"];
if(next != nil)
{
NSDictionary *cursor = [paging objectForKey:@"cursors"];
NSString *after = [cursor objectForKey:@"after"];
//NSString *before = [cursor objectForKey:@"before"];
NSDictionary *limitParam = [NSDictionary dictionaryWithObjectsAndKeys:
@"100", @"limit", after, @"after"
, nil
];
[self getAllInvitableFriendsFromFB:limitParam addInList:tempFriendsList];
}
else
{
[self replaceGlobalListWithRecentData:tempFriendsList];
}
}];
}
- (void) replaceGlobalListWithRecentData:(NSMutableArray *)tempFriendsList
{
// replace global from received list
[m_invitableFriends removeAllObjects];
[m_invitableFriends addObjectsFromArray:tempFriendsList];
//NSLog(@"friendsList = %d", [m_invitableFriends count]);
[tempFriendsList release];
}
謝謝,它的工作原理! – ondermerol
@ondermerol歡迎 –
邀請非應用程序的朋友 -
你會被邀請與由我返回/ invitable_friends圖形API的朋友列表標記。您可以使用這些誠邀FBWebDialogs令牌將邀請發送給好友,下面
- (void) openFacebookFeedDialogForFriend:(NSString *)userInviteTokens {
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
userInviteTokens, @"to",
nil, @"object_id",
@"send", @"action_type",
actionLinksStr, @"actions",
nil];
[FBWebDialogs
presentRequestsDialogModallyWithSession:nil
message:@"Hi friend, I am playing game. Come and play this awesome game with me."
title:nil
parameters:params
handler:^(
FBWebDialogResult result,
NSURL *url,
NSError *error)
{
if (error) {
// Error launching the dialog or sending the request.
NSLog(@"Error sending request : %@", error.description);
}
else
{
if (result == FBWebDialogResultDialogNotCompleted)
{
// User clicked the "x" icon
NSLog(@"User canceled request.");
NSLog(@"Friend post dialog not complete, error: %@", error.description);
}
else
{
NSDictionary *resultParams = [g_mainApp->m_appDelegate parseURLParams:[url query]];
if (![resultParams valueForKey:@"request"])
{
// User clicked the Cancel button
NSLog(@"User canceled request.");
}
else
{
NSString *requestID = [resultParams valueForKey:@"request"];
// here you will get the fb id of the friend you invited,
// you can use this id to reward the sender when receiver accepts the request
NSLog(@"Feed post ID: %@", requestID);
NSLog(@"Friend post dialog complete: %@", url);
}
}
}
}];
}
- 1. Facebook iOS SDK v4.0,獲取朋友列表
- 2. Google+ iOS SDK獲取朋友列表?
- 3. Facebook獲取朋友列表
- 4. 獲取共同Facebook朋友iOS SDK
- 5. Facebook的SDK,獲取朋友
- 6. 使用Facebook iOS SDK獲取朋友的朋友
- 7. 如何可以從facebook-ios-sdk-3.5.3獲取朋友列表
- 8. Facebook SDK iPhone,朋友列表
- 9. 獲取朋友列表Facebook Api
- 10. Facebook - 獲取朋友列表在php
- 11. iOS Facebook獲得朋友列表
- 12. 擷取Facebook上的朋友與iOS SDK
- 13. 獲取我朋友的朋友列表
- 14. 獲取Facebook用戶朋友列表?
- 15. 如何在iOS中的FACEBOOK SDK中從Facebook獲取朋友列表?
- 16. 如何在Facebook iOS SDK中獲取Facebook用戶的完整朋友列表
- 17. Facebook SDK - 獲取朋友詳細信息
- 18. Facebook SDK獲取朋友的照片
- 19. Swift 3:Facebook獲取朋友列表
- 20. 獲取facebook的朋友列表
- 21. Facebook的api android獲取朋友列表
- 22. 登錄時獲取Facebook朋友列表
- 23. 獲取Facebook的朋友列表(只讀)
- 24. Facebook上的朋友和朋友列表
- 25. 獲取Facebook上朋友的朋友列表
- 26. Facebook圖形API - 獲取朋友朋友列表?
- 27. 使用PHP SDK獲取Facebook朋友列表
- 28. 如何從Facebook SDK 3.0獲取朋友列表
- 29. 如何使用Android Facebook SDK獲取完整的朋友列表
- 30. Android。 Facebook SDK的朋友列表
獲取空白數據 –
@shwetasharma你可能會得到空數據,因爲你沒有朋友連接到您的應用程序。這隻顯示已經在您的應用中使用Facebook進行連接的用戶朋友 – dulgan