Facebook个人资料图片未下载
Posted
技术标签:
【中文标题】Facebook个人资料图片未下载【英文标题】:Facebook profile picture not downloading 【发布时间】:2014-03-18 06:41:32 【问题描述】:我刚刚开始 facebook 集成,并在我的应用程序中下载用户的详细信息。 现在问题是我得到了所有其他细节,除了当 NSloged 返回 null 的配置文件图片。 我究竟做错了什么。我已授予基本信息的权限。 请帮我。提前谢谢。
FBRequest *request = [FBRequest requestForMe];
// Send request to Facebook
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
if (!error)
// result is a dictionary with the user's Facebook data
NSDictionary *userData = (NSDictionary *)result;
nickname.text= userData[@"name"];
firstName.text=userData [@"first_name"];
lastName.text=userData[@"last_name"];
city.text=userData[@"user_location"];
gender.text= userData[@"gender"];
dateOfBirth.text = userData[@"birthday"];
NSURL *pictureURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", userData[@"id"]]];
NSData *data =[NSData dataWithContentsOfURL:pictureURL];
NSLog(@" profile pic data = %@", data);
self.imageToUpload.image=[UIImage imageWithData:data];
NSString *imgstr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",imgstr);
[PFUser logOut];
// Now add the data to the UI elements
// ...
];
【问题讨论】:
您还有其他信息吗? 是的,我收到了姓名、名字、姓氏、用户位置、性别、生日 那么,您没有从 facebook 获得您的 'id'?。 我得到了 id,如果我在浏览器中检查该 url,我可以看到图像。但它没有加载到应用程序中。那个 imgstr 正在返回 null 【参考方案1】:你通过请求这个url得到登录用户的id
https://graph.facebook.com/me
然后您可以通过创建这样的 url 来请求个人资料图片:
https://graph.facebook.com/<userid>/picture
我希望这会有所帮助。
你可以在这里得到确切的想法
-(void)getFacebookAccounts
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
@"appid", ACFacebookAppIdKey,
[NSArray arrayWithObject:@"email"], ACFacebookPermissionsKey,
nil];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
[accountStore requestAccessToAccountsWithType:accountType options:options
completion:^(BOOL granted, NSError *error)
if (granted && !error)
accountsList = (NSMutableArray*)[accountStore accountsWithAccountType:accountType];
int NoOfAccounts = [accountsList count];
if (NoOfAccounts > 1)
NSLog(@"device has more then one twitter accounts %i",NoOfAccounts);
else
NSLog(@"device has single twitter account : 0");
if([accountsList count] > 0)
myAccount = [accountsList objectAtIndex:0];
[self getProfilePic];
else
UIAlertView *altviw=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Set an account in the settings of the device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[altviw show];
altviw=nil;
else
// show alert with information that the user has not granted your app access, etc.
];
-(void) getProfilePic
NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/me"];
NSDictionary *p = [NSDictionary dictionaryWithObjectsAndKeys:myAccount.username, @"screen_name", nil];
SLRequest *FBrequest= [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodGET
URL:url
parameters:p];
[FBrequest setAccount:myAccount];
[FBrequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResposnse, NSError *error)
if (error)
NSError *jsonError = nil;
// Convert the response into a dictionary
NSDictionary *dictResponse = [NSJSONSerialization JSONObjectWithData:responseData options:(NSJSONReadingOptions)NSJSONWritingPrettyPrinted error:&jsonError];
NSString *strId1= [dictResponse objectForKey:@"id"];
NSString *strurl=[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture", strId1];
if(!arrmPics)
arrmPics=[[NSMutableArray alloc] init];
dispatch_async
(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
NSData *imageData =
[NSData dataWithContentsOfURL:
[NSURL URLWithString: strurl]];
UIImage *image = [UIImage imageWithData:imageData];
dispatch_async(dispatch_get_main_queue(), ^
[arrmPics addObject:imageData];
imgviw.image=image;
);
);
];
【讨论】:
检查我在编辑中发布的代码。因为我可以在最后看到响应的图像。 是的,当然,这只是我的错误。我刚从你的代码中找到它。非常感谢【参考方案2】:你永远不能下载用户图像 Facebook 不允许它我在几周前发送它但没有以任何方式工作。
但根据我的经验,您不需要图片@all just url 如果您需要有关如何显示图片的帮助,我可以帮助您
http://m-farhan.com/2014/03/ios-facebook-sdk-tutorial/
检查步骤(6)
下载项目有库SDWebImage文件夹拖到你的项目中
#import "SDWebImage/UIImageView+WebCache.h"
[userImage setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large",[user objectForKey:@"id"]]]
placeholderImage:[UIImage imageNamed:@"unknownUser.png"]]
;
【讨论】:
ohke,那我们怎么做呢,我使用了带有 facebook id 的图像 url,它在浏览器中返回图像。我在这里做错了什么 所以现在您知道如何在 html 中为 ios 存储图像,我将在 2 分钟内更新答案,它的 3 个类似代码,它会正常工作 感谢您的回复。但是 Poojas 异步方法有帮助。以上是关于Facebook个人资料图片未下载的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NSURLSession 保存 Facebook 个人资料图片?
使用 javascript SDK 从 facebook graph api 获取个人资料图片
从 facebook API 保存用户的个人资料图片 - PHP SDK V.5