在iOS应用程序中显示Salesforce的用户配置文件图片
我正在尝试使用以下方式显示登录用户的个人资料图片:在iOS应用程序中显示Salesforce的用户配置文件图片,ios,objective-c,uiimageview,salesforce,salesforce-chatter,Ios,Objective C,Uiimageview,Salesforce,Salesforce Chatter,我正在尝试使用以下方式显示登录用户的个人资料图片: NSLog(@"url is : %@",[SFAccountManager sharedInstance].idData.pictureUrl); profilePicData=[NSData dataWithContentsOfURL:[SFAccountManager sharedInstance].idData.pictureUrl]; if ( profilePicData ) { NS
NSLog(@"url is : %@",[SFAccountManager sharedInstance].idData.pictureUrl);
profilePicData=[NSData dataWithContentsOfURL:[SFAccountManager sharedInstance].idData.pictureUrl];
if ( profilePicData )
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"filename.jpg"];
NSLog(@"pic path: %@",filePath);
[profilePicData writeToFile:filePath atomically:YES];
}
NSLog(@"pic data: %@",profilePicData);
}
在NSLog(“%@”中,[NSData DATA WITH CONTENTSOFURL:[SFAccountManager sharedInstance].idData.pictureUrl]);在UIImageView中显示一些数据,但不显示图片
任何帮助都将不胜感激。调用salesforce Rest API并获取用户信息
NSString *path=@"/services/data/v29.0/chatter/users/me";
SFRestMethod method=0;
SFRestRequest *request = [SFRestRequest requestWithMethod:method path:path queryParams:queryParams];
[[SFRestAPI sharedInstance] send:request delegate:self];
这将返回json响应。
-(void)请求:(SFRestRequest*)请求didloadsresponse:(id)数据响应{..}
从中解析所需的照片字典,并使用fullEmailPhotoUrl加载/保存图像。
使用largePhotoUrl和largePhotoUrl没有为我加载图片。
例如,已解析的照片字典:
照片={
fullEmailPhotoUrl=“”
largePhotoUrl=“/F”
photoVersionId=
smallPhotoUrl=“/T”
standardEmailPhotoUrl=“”
url=“/services/data/v29.0/chatter/users//photo”
我试图在ChatterAPI中做完全相同的事情-我想从“smallPhotoUrl”下的提要数据加载图像。我发现,在URL末尾必须添加活动标记 这个消息来源向我介绍了这个概念: 我终于找到了一些关于如何访问令牌的清晰信息:第262页 因此,我最终做到了:
NSString *builtImageUrlWithToken = [NSString stringWithFormat:@"%@?oauth_token=%@",
phototoUrl, [SFAccountManager sharedInstance].credentials.accessToken];
NSURL *imageURL = [NSURL URLWithString:builtImageUrlWithToken];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
我认为它与这个主题相关,因为我在寻找这个特定的解决方案时遇到了它。我相信它也会对其他人有用
谢谢!第一个苹果文档说不要在网络通话中使用包含URL内容的数据,因为它是同步的 因此,您可以这样做来获得图像:
SFIdentityData *idData = [SFAccountManager sharedInstance].idData;
if(idData != nil) {
SFRestRequest *request = [[SFRestRequest alloc] init];
request.endpoint = [idData.pictureUrl absoluteString];
request.method = SFRestMethodGET;
request.path = @"";
[[SFRestAPI sharedInstance] send:request delegate:_delegate];
}
(这是异步的。您可以使用块而不是委派。)
在代理中,您可以(例如)将图像存储在CoreData中,或将NSData分配给UIImage,因此:
[[UIImage alloc]initWithData:picData]
您还需要确保您的UIImage已正确连接,例如,一种方法是通过作为IBOutlet的UIImageView。在swift 3中,使用Alamofire:
if let url = URL(string: baseURl + "/sobjects/Attachment/\(imageID)/Body"){
let header = ["Authorization": "Your Auth Token"]
Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: header).responseData { (response) in
if response.error == nil {
// Show the downloaded image:
if let data = response.data {
self.profileImg.image = UIImage(data: data)
}
}
}
}
您尝试了哪些方法,消除了哪些可能的问题原因。您是否检查了pictureUrl是否有效?如果不是,idData是否有效?是否[SFAccountManager sharedInstance].idData.pictureURL返回一个有效的URL。调用dataWithContentsOfURL是否返回任何数据?为什么您没有在问题中写入有关这些方面的信息?如果您没有尝试过它们,为什么要在尝试任何内容之前先发布?我确实测试了您提到的所有内容。为了验证URL,我甚至在safari上粘贴了链接并给出了详细信息我在登录salesforce后添加了图片。我已经添加了代码段。[profilePicData WriteFile:filePath原子性:是];它确实在本地写入图片文件,但打开时显示无效文件。您尚未在UIImageView中显示与加载/显示图片文件相关的任何代码。请解决此问题。在UIImageView中加载/显示图片文件没有问题。结果证明,您必须使用“fullEmailPhotoUrl”而不是idData.pictureUrl。
if let url = URL(string: baseURl + "/sobjects/Attachment/\(imageID)/Body"){
let header = ["Authorization": "Your Auth Token"]
Alamofire.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: header).responseData { (response) in
if response.error == nil {
// Show the downloaded image:
if let data = response.data {
self.profileImg.image = UIImage(data: data)
}
}
}
}