facebook ios sdk - 使用 UIImage 发布照片时遇到问题
Posted
技术标签:
【中文标题】facebook ios sdk - 使用 UIImage 发布照片时遇到问题【英文标题】:facebook ios sdk - trouble posting photo using UIImage 【发布时间】:2011-10-02 00:35:29 【问题描述】:如果我有任何关于如何处理我在 Facebook 上发布图片的问题的建议,我将不胜感激。
下面的代码和我预期的一样工作:
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"http://myserver/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();
我已经测试了这段代码,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 长度]:无法识别的选择器发送到实例 0x1c9420 CoreAnimation:忽略异常:-[UIImage 长度]:无法识别的选择器发送到实例 0x1c9420
因此,作为测试,我想尝试将图像导入我的项目并直接访问它。这是我在第一个示例中在线引用的确切图像,所以我知道它应该可以工作。但即使我尝试这个:
UIImage *newImage = [UIImage imageNamed:@"BaB.png"];
我收到与上述相同的错误消息。
我在 Facebook 文档中看到“图片”键应该使用图像的 URL。但是我在网上看到了一些例子,表明人们使用的是 UIImage 而不仅仅是 URL。
很明显,我做错了什么,但我不知道它可能是什么。
我将非常感谢任何关于如何进行的指示。
【问题讨论】:
【参考方案1】:概述该过程的总结答案...关键点是在图形调用中包含 access_token,因为 facebook-ios-sdk 不会自动执行此操作:
1) 更新到最新的 facebook-ios-sdk。 2)用应用程序ID实例化。
self.facebook = [[Facebook alloc] initWithAppId:kApplicationFBID];
3) 授权app,包括publish_stream
NSArray * neededPermissions = [[[NSArray alloc] initWithObjects:@"user_about_me", @"publish_stream", @"user_photos", nil] autorelease];
[facebook authorize:neededPermissions delegate:appDelegate];
4) 确保应用委托 fBDidLogin 捕获并存储访问令牌和过期用户默认值(用于以后登录过程的优化)。
-(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 的关键。这将为您的应用程序自动创建一个相册,并将图像放在那里并根据我的测试将其张贴在墙上。
-(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) 不要使用测试用户帐户进行测试...目前它将验证测试帐户并提供访问令牌,但是当您尝试使用图形 api 时,它会返回意外错误。如果您在 dev.facebook.com 中使用网络版本与本机应用程序设置,您可能会没事,因为据说您可以创建测试用户并将他们与应用程序相关联,但我还没有尝试过。
祝你好运!
【讨论】:
这很棒 - 感谢您的帮助 在 Facebook.m 的第 166 行或附近,SDK 将 access_token 添加到传入的参数中,使开发人员无需将访问令牌作为参数或URL 的一部分。以上是关于facebook ios sdk - 使用 UIImage 发布照片时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
ios 应用程序的用户是不是可以使用 facebook-sdk 在 facebook 上喜欢 URL?
在 Facebook-Ios-Sdk 中关闭 Facebook 会话
如何在使用 facebook-ios-sdk 的应用中实现聊天