Ben*_*ams 25 iphone facebook objective-c
我正在尝试将照片从相机上传到用户的Facebook墙.我不完全确定正确的策略是什么,但是通过阅读它似乎要做的事情是将照片上传到相册,然后有人在墙上张贴指向该相册/照片的链接.理想情况下,这将涉及对话,但从我可以说,这是不可能的.
我已设法将照片上传到相册,然后取回该照片的ID,但我不确定在此之后该怎么做.
任何人都可以提供一些简单的代码来实现这一目标吗?
奖金问题:是否可以将照片发布到应用程序墙(或者相反)?
编辑:图形API是首选,但在此阶段工作的任何东西都是好的.
Eri*_*uza 18
我分三步完成了这个
1张图片到相册(返回imageID)
2使用imageID为imageID请求元数据
3使用"链接"字段(而不是"源"字段)作为链接到用户墙上的帖子中的图像
缺点是墙上有两个帖子,一个用于图像,一个用于实际帖子.我还没弄明白如何将照片发布到相册中,而且还没有出现墙贴(理想情况下它只是出现的第2个帖子)
步骤1:
- (void) postImageToFacebook {
appDelegate = (ScorecardAppDelegate *)[[UIApplication sharedApplication] delegate];
currentAPICall = kAPIGraphUserPhotosPost;
UIImage *imgSource = {insert your image here};
NSString *strMessage = @"This is the photo caption";
NSMutableDictionary* photosParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
imgSource,@"source",
strMessage,@"message",
nil];
[appDelegate.facebook requestWithGraphPath:@"me/photos"
andParams:photosParams
andHttpMethod:@"POST"
andDelegate:self];
// after image is posted, get URL for image and then start feed dialog
// this is done from FBRequestDelegate method
}
Run Code Online (Sandbox Code Playgroud)
第2步(kAPIGraphUserPhotosPost)和第3步(kAPIGraphPhotoData):
- (void)request:(FBRequest *)request didLoad:(id)result {
if ([result isKindOfClass:[NSArray class]] && ([result count] > 0)) {
result = [result objectAtIndex:0];
}
switch (currentAPICall) {
case kAPIGraphPhotoData: // step 3
{
// Facebook doesn't allow linking to images on fbcdn.net. So for now use default thumb stored on Picasa
NSString *thumbURL = kDefaultThumbURL;
NSString *imageLink = [NSString stringWithFormat:[result objectForKey:@"link"]];
currentAPICall = kDialogFeedUser;
appDelegate = (ScorecardAppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableDictionary* dialogParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
kAppId, @"app_id",
imageLink, @"link",
thumbURL, @"picture",
@"Just Played Wizard etc etc", @"name",
nil];
[appDelegate.facebook dialog:@"feed"
andParams:dialogParams
andDelegate:self];
break;
}
case kAPIGraphUserPhotosPost: // step 2
{
NSString *imageID = [NSString stringWithFormat:[result objectForKey:@"id"]];
NSLog(@"id of uploaded screen image %@",imageID);
currentAPICall = kAPIGraphPhotoData;
appDelegate = (Scorecard4AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.facebook requestWithGraphPath:imageID
andDelegate:self];
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我修改了代码,只显示了浓缩的Facebook内容.如果你想检查帖子是否成功,你会想要这样的东西:
- (void)dialogDidComplete:(FBDialog *)dialog {
switch (currentAPICall) {
case kDialogFeedUser:
{
NSLog(@"Feed published successfully.");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)

Facebook帖子中的蓝色文本是您在步骤3中的"名称"参数中添加的任何内容.点击Facebook中的蓝色文本将带您进入步骤1中发布的照片,在Facebook的相册中(Facebook创建默认相册如果您没有指定相册,请为您的应用程序添加).在我的应用程序的情况下,它是记分卡的全尺寸图像(但可以是任何图像,例如来自相机).不幸的是,我无法找到一种方法使拇指图像成为一个实时链接,但它不是非常易读,所以默认拇指在我的情况下工作.是说,在Facebook发布的部分(黑色字体)"今年的第一场比赛......"由用户输入.
gif*_*iff 16
你想做什么更清楚 - 将照片发布到FB,并保证帖子在用户的墙/流上.
不幸的是,有一些事情在路上.
FB Graph API似乎只允许您将图片发布到相册,或直接发布到墙上,链接到网络上已存在的图片.在第一种情况下,可能会在流中创建一个帖子,但FB似乎以某种方式合并多个帖子,以防止用户的流被轰炸.在我能看到的任何地方都没有记录这种机制.
在第二种情况下,您可能认为可以通过发布到相册,然后明确地发布到相册的链接.您可以将参数添加到原始相册帖子"no_story",其值为1,并在您准备制作明确的帖子时抑制可能发布的墙贴.但是,FB暂时不会为新发布的图像提供源URL,并且它似乎不喜欢包含其自己的内容传送网络的URL,从而返回错误.您可能会想到简单地将状态更新放在流中,讨论帖子,但是,图谱API也限制为每个应用每天25个这样的直接馈送帖子,以防止发送垃圾邮件.
一种解决方案是发布到Flickr之类的东西,获取图像的URL,然后发布到墙上.FB的首选解决方案似乎是使用属于移动工具包的FB对话框 - 实际上很少有像OAuth屏幕那样的网页.
就个人而言,我打算简单地发布到上面的专辑,并与FB的想法如何通知用户.好奇你如何选择继续.
我不确定哪个部分不适合你,因为你正在发布并获得一个ID,但这是我快速而肮脏的方式,以防有人通过谷歌来到这里.
这是一个HTTP POST函数,该文件的二进制数据以多部分mime的形式上升.
我提供的ASIHTTPRequest库的大风扇在这里.
**更新:2012年10月22日** - 在过去的几个月里,AFNetworking已经在我的代码中取代了ASIHTTPRequest.可在GitHub上找到
Facebook的文档令人困惑,部分原因是它们不完整,部分原因是它们可能是错误的.你可能会撕掉一些头发,确定要为标题或其他东西设置的确切值,但这个食谱会将照片放入相册中,然后进入相册.
你仍然需要以基本的方式设置Facebook OAuth的东西 - 我碰巧在app委托中这样做,所以我从那里抓取Facebook对象来获取我的访问令牌.我确认在我进行身份验证时要求"publish_stream"权限,如下所示:
[facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil] delegate:self];
Run Code Online (Sandbox Code Playgroud)
这将创建或添加到名为"YOUR_APP_NAME照片"的相册,并将显示在用户的Feed中.您可以通过获取该专辑的ID并将URL更改为http://graph.facebook.com/THE_ID_OF_THE_ALBUM/photos,将其放入任何专辑中,包括"Wall"专辑.
这是基本方法:
-(void) postImageToFB:(UIImage *) image
{
NSData* imageData = UIImageJPEGRepresentation(image, 90);
Facebook* fb = [(uploadPicAppDelegate *)[[UIApplication sharedApplication] delegate] facebook ];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"]];
[request addPostValue:[fb accessToken] forKey:@"access_token"];
[request addPostValue:@"image message" forKey:@"message"];
[request addData:imageData forKey:@"source"];
[request setDelegate:self];
[request startAsynchronous];
}
Run Code Online (Sandbox Code Playgroud)
使用Facebook提供的iOS库看起来像这样:
-(void) postImageToFB:(UIImage *) image
{
NSData* imageData = UIImageJPEGRepresentation(image, 90);
Facebook* fb = [(uploadPicAppDelegate *)[[UIApplication sharedApplication] delegate] facebook ];
NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys:[fb accessToken],@"access_token",
@"message text", @"message",
imageData, @"source",
nil];
[fb requestWithGraphPath:@"me/photos"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40015 次 |
| 最近记录: |