3

I am trying to display logged in user's profile picture using following:

    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);


}

in NSLog("%@", [NSData dataWithContentsOfURL:[SFAccountManager sharedInstance].idData.pictureUrl]); shows some data but does not display picture in UIImageView.

Any Help would be appreciated .

4

4 回答 4

2

我试图在 Chatter API 中做同样的事情——我想从“smallPhotoUrl”下的提要数据中加载图像。我发现,必须在 URL 的末尾添加活动令牌。

此来源向我介绍了概念:访问 Chatter 用户图片

我终于能够在这里找到一些如何访问该令牌的明确信息:salesforce_platform_mobile_services.pdf第 262 页

所以最终我这样做了:

    NSString *builtImageUrlWithToken = [NSString stringWithFormat:@"%@?oauth_token=%@",
 phototoUrl, [SFAccountManager sharedInstance].credentials.accessToken];


    NSURL *imageURL = [NSURL URLWithString:builtImageUrlWithToken];
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL];

我认为它与这个主题相关,因为我在寻找这个特定的解决方案时遇到了它。我相信它也对其他人有用。

谢谢!

于 2014-03-13T13:16:27.063 回答
1

首先 Apple 文档说不要使用 dataWithContentsOfURL 进行网络调用,因为它是同步的。

因此,您可以执行以下操作来获取图像:

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。

于 2014-03-18T14:15:35.373 回答
0

调用 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)request:(SFRestRequest *)request didLoadResponse:(id)dataResponse {….}

从中解析所需的照片字典并使用 fullEmailPhotoUrl 加载/保存图像。 使用 largePhotoUrl 和 largePhotoUrl 没有为我加载图片。 例如。照片字典解析:

照片 = {

fullEmailPhotoUrl = " https://na14.salesforce.com/ncsphoto/ < SOMEIDENTIFIERS>";

largePhotoUrl = " https://c.na14.content.force.com/profilephoto/ < SOMEIDENTIFIERS>/F";

photoVersionId = < PHOTOID>;

smallPhotoUrl = " https://c.na14.content.force.com/profilephoto/ < SOMEIDENTIFIERS>/T";

standardEmailPhotoUrl = " https://na14.salesforce.com/ncsphoto/ < SOMEIDENTIFIERS>";

url = "/services/data/v29.0/chatter/users/< SOMEIDENTIFIERS>/photo";

};
于 2014-02-04T17:51:24.997 回答
0

在 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)
                }
            }
          }
        }
于 2018-03-05T09:47:01.423 回答