在iOS App中显示来自Salesforce的用户个人资料图片

时间:2014-01-31 23:49:34

标签: ios objective-c uiimageview salesforce salesforce-chatter

我正在尝试使用以下内容显示登录用户的个人资料图片:

    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 dataWithContentsOfURL:[SFAccountManager sharedInstance] .idData.pictureUrl]);显示一些数据,但不显示UIImageView中的图片。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

我试图在Chatter API中做同样的事情 - 我想在" smallPhotoUrl"下的Feed数据中加载图片。我发现的是,在URL结束时必须添加活动令牌。

这个消息来源向我介绍了概念:Accessing Chatter user pics

我终于能够在这里找到一些关于如何访问该令牌的明确信息: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];

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

谢谢!

答案 1 :(得分: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。

答案 2 :(得分: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)请求:(SFRestRequest *)请求didLoadResponse:(id)dataResponse {...。}

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

photo = {

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&gt; / photo”;

};

答案 3 :(得分:0)

在swift 3中,使用Alamofire:

uglify: {
  app: {
    options: {  // <-- Specific options for `app` target 
      mangle: false,
      sourceMap: true,
      sourceMapIn: './build/my_map.map'  // <-- 3. Define .map file to use.
    },
    files: {
      'public/js/app.min.js': ['build/_tsbc.js']
    }
  },
  bower: {
    options: {  // <-- Specific options for `bower` target 
      mangle: false,
      sourceMap: true
      // <-- There's no `sourceMapIn` needed here.
    },
    files: {
      'public/js/lib.min.js': ['build/_bower.js']
    }
  }
},