ano*_*yes 10 upload facebook photo ios
对于如何解决我在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];
Run Code Online (Sandbox Code Playgroud)
但是,我真的想使用从相机拍摄的图像.我已经设置了代码,以便在我的应用程序中更早地执行此操作,并将图像放在屏幕上.所以,我试着这样做:
CGRect contextRect = CGRectMake(0, 0, 320, 436);
UIGraphicsBeginImageContextWithOptions(contextRect.size, YES, 1);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
我已经测试了这个代码,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];
Run Code Online (Sandbox Code Playgroud)
我在控制台中得到这两个荒谬的消息: - [UIImage长度]:无法识别的选择器发送到实例0x1c9420 CoreAnimation:忽略异常: - [UIImage长度]:无法识别的选择器发送到实例0x1c9420
所以,作为测试,我想我会尝试将图像导入到我的项目中并直接访问它.这是我在第一个例子中在线引用的确切图像,所以我知道它应该有效.但即使我尝试这个:
UIImage *newImage = [UIImage imageNamed:@"BaB.png"];
Run Code Online (Sandbox Code Playgroud)
我得到与上面相同的错误消息.
我在Facebook文档中看到"图片"键应该使用URL到图像.但我在网上看到一些例子表明人们正在使用UIImage而不仅仅是一个URL.
显然,我做错了什么,但我不知道它可能是什么.
我会非常感谢有关如何继续的任何指示.
小智 15
总结过程的总结答案...关键点是在图表调用中包含access_token,因为facebook-ios-sdk不会自动执行此操作:
1)更新到最新的facebook-ios-sdk.
2)使用app id实例化.
self.facebook = [[Facebook alloc] initWithAppId:kApplicationFBID];
Run Code Online (Sandbox Code Playgroud)
3)授权应用程序包括publish_stream
NSArray * neededPermissions = [[[NSArray alloc] initWithObjects:@"user_about_me", @"publish_stream", @"user_photos", nil] autorelease];
[facebook authorize:neededPermissions delegate:appDelegate];
Run Code Online (Sandbox Code Playgroud)
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];
}
Run Code Online (Sandbox Code Playgroud)
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];
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
8)不要使用测试用户帐户进行测试......目前它将验证测试帐户并提供访问令牌,但是当您尝试使用图形API时,它将返回意外错误.如果你在dev.facebook.com中使用web版本vs本机应用程序设置,你可能没问题,因为据说你可以创建测试用户并将它们与应用程序相关联,但我还没有尝试过.
祝好运!
| 归档时间: |
|
| 查看次数: |
11975 次 |
| 最近记录: |