使用AS3 API上传图片到Facebook相册

4
我在从我的画布应用程序中发布图像到用户相册方面遇到了问题。根据Facebook文档:
要将照片发布到用户的相册中,您必须获得publish_stream权限。授予该权限后,您可以通过向以下Graph API连接之一发出带有照片内容和可选描述的HTTP POST请求来上传照片:
1. https://graph.facebook.com/USER_ID/photos-该照片将被发布到为您的应用程序创建的相册中。如果该相册不存在,则我们会自动为您的应用程序创建一个相册。以这种方式上传的所有照片都将添加到同一个相册中。
2. https://graph.facebook.com/ALBUM_ID/photos-该照片将被发布到特定的现有照片相册中,由ALBUM_ID表示。
因此,根据第一点,如果我像这样上传图像...
Facebook.api("me/photos",imagePostCallback,{message:"",image:myImageBitmap,fileName:''},URLRequestMethod.POST);

如果我的应用程序需要的相册不存在,我可以期望它将我的图片放置在为我的应用程序命名的相册中(如果需要,它会创建相册)吗?
并不是这样。
实际上,当相册不存在时,上传的图片会被推送到任何其他方便存在的相册中,这些相册通常是其他应用程序的相册(由其创建)。这有点麻烦。
到目前为止,我尝试了以下方法:
1.禁用沙盒模式。我原以为应用程序可能无法创建新相册,因为它处于沙盒模式,但是禁用沙盒模式没有任何区别,即使启用它,我也可以直接创建相册。
2.检查我的相册是否存在,并在必要时创建它。我可以检查我的相册并在不存在时创建它,但是如果不是作为用户交互的直接结果调用,则无法上传图像,因此对Facebook.api进行POST调用以上传图像将失败。
所以现在我有点困惑了。显然,我不能让我的应用程序将图像发布到竞争者的相册中,但目前我能看到的唯一替代方案将涉及有效地使用户提交他们的图像两次,如果必须创建相册。有什么想法吗?

1
你最终解决了如何完成这个任务吗?我认为我有一个类似的问题:http://stackoverflow.com/questions/9815103/as3-facebook-canvas-app-need-to-post-image-to-friends-feed-wall-can-it-be - Ribs
1个回答

3

我猜您需要在参数中使用access_token :) 当在用户的Facebook上发布内容时,您总是需要这个(获取信息时不总是必要)。获取access_token的方法如下所示 :)

public function post():void
{
    var _params:Object = new Object();

    _params.access_token = Facebook.getSession().accessToken;
    _params.message = "";
    _params.image = myImageBitmap;
    _params.fileName = "";

    Facebook.api("me/photos", imagePostCallback, _params, URLRequestMethod.POST);
}

请确保使用应用程序请求权限时具有正确的权限。

编辑

好的,我可能有点错过了你的编辑 ;) 可以创建自己的相册。查看此 PHP 代码以获取图形 API。该代码也可以解析为 AS3。

http://developers.facebook.com/blog/post/498/

EDIT2

好的,我进行了更多的挖掘(似乎很有趣)。在使用图形 API 时,这实际上应该有效。

FB.api('/me/albums', albumCreateCallback, {name: 'name of the album', message: 'description of the album'}, URLRequestMethod.POST);

当您在albumCreateCallback中调用另一个api来上传您的图片时,它应该可以工作并上传您的图片(根据我找到的信息)。

谢谢您的回复。恐怕这不是权限/访问令牌问题。图片确实发布了,只是没有发布到它应该发布的专辑中。我已经检查了专辑是否存在,并在需要时创建了它,但正如我在问题中提到的那样,这不能在用户交互时发生,因为那么图片帖子将不会被视为用户交互的直接结果。如果用户选择不提交,则我选择在应用程序早期静默地创建专辑,但这可能会留下一个空专辑。 - shanethehat
你的应用程序关闭时是否会触发某些事件?也许你可以检查相册是否为空,如果是,则再次将其删除? :) - Michiel Standaert
如果我也获得了offline_access权限,那么这可能是可行的... - shanethehat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接