在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)
                }
            }
          }
        }