我是ios app开发的新手。我想在ios中学习facebook集成并获取朋友列表。
我按照git hub代码https://github.com/facebook/facebook-ios-sdk/tree/master/samples/FriendPickerSample
并按照所有步骤进行操作。我的代码是:
- (IBAction)friendPicker:(id)sender {
if (!FBSession.activeSession.isOpen)
{
// permission : [NSArray arrayWithObjects:@"email", @"read_friendlists", @"user_photos", @"user_events", nil]
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if(error)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
}
else if (session.isOpen)
{
// [FBSession setActiveSession:session];
[self friendPicker:sender];
}
}];
return;
}
if(FBSession.activeSession.isOpen)
{
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error) {
if(error)
{
NSLog(@"error : %@",error);
}
else
{
NSArray* friends = [result objectForKey:@"data"];
NSLog(@"total array : %@",result);
NSLog(@"Found: %i friends", friends.count);
for (NSDictionary<FBGraphUser>* friend in friends) {
NSLog(@"I have a friend named %@ with id %@", friend.name, friend.id);
}
}
}];
}
if(self.friendPickerController == nil)
{
self.friendPickerController = [[FBFriendPickerViewController alloc] init];
self.friendPickerController.title = @"Pick Friends";
self.friendPickerController.delegate = self;
}
[self.friendPickerController loadData];
[self.friendPickerController clearSelection];
[self presentViewController:self.friendPickerController animated:YES completion:nil];
}
-(void)fillTextAndDismiss:(NSString * )text
{
[self.selectedFrdView setText:text];
[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)facebookViewControllerDoneWasPressed:(id)sender
{
NSMutableString *text = [[NSMutableString alloc] init];
for(id<FBGraphUser> user in self.friendPickerController.selection)
{
if([text length])
{
[text appendString:@", "];
}
[text appendString:user.name];
}
[self fillTextAndDismiss:text.length >0 ? text : @"<none>"];
}
-(void)facebookViewControllerCancelWasPressed:(id)sender
{
[self fillTextAndDismiss:@"<cancelled>"];
}
我还创建了facebookAppId,并且plist文件也由此键更新。 然后我也收到了这个错误:
2014-05-12 14:21:27.043 fbFrndTest[2753:90b] error : Error Domain=com.facebook.sdk Code=5 "The operation couldn’t be completed. (com.facebook.sdk error 5.)" UserInfo=0xb166450 {com.facebook.sdk:HTTPStatusCode=400, com.facebook.sdk:ParsedJSONResponseKey={
body = {
error = {
code = 100;
message = "(#100) Unknown fields: username.";
type = OAuthException;
};
};
code = 400;
}, com.facebook.sdk:ErrorSessionKey=<FBSession: 0xb521fd0, state: FBSessionStateOpen, loginHandler: 0x0, appID: 1481684055397512, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0xb523240>, expirationDate: 2014-07-11 05:48:12 +0000, refreshDate: 2014-05-12 07:26:43 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
)>}
GitHUB代码成功运行,但我的代码出错了。
答案 0 :(得分:0)
我相信你应该取消注释
//[FBSession setActiveSession:session];
另请仔细检查您是否已在设置
下的模拟器上登录Facebook答案 1 :(得分:0)
使用FBRequest
Xcode 8.2.1和目标
FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?fields=name,picture,birthday,email,location"];
[friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
if(error == nil) {
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);
}
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Facebook" message:@"Success in fetching Facebook Friends." delegate:self cancelButtonTitle:@"OK"otherButtonTitles:nil, nil];
[alert show];
}
else
{
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Facebook" message:@"Problem in fetching Facebook Friends. Try Later!" delegate:self cancelButtonTitle:@"OK"otherButtonTitles:nil, nil];
[alert show];
}
}];