使用flex在facebook上发布图像

时间:2011-07-19 04:52:15

标签: image flex4 facebook-graph-api posting

我试图在facebook上发布图像和链接。我能够登录获取用户详细信息,但我无法发布图像和链接。以下是我使用的代码

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" width="600"   height="300" 
           creationComplete="initApp()">
<s:states>
    <s:State name="loggedout"/>
    <s:State name="loggedin"/>
</s:states>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import com.facebook.graph.Facebook;
        import com.facebook.graph.controls.Distractor;

        protected function initApp():void
        {
            Facebook.init("XXXX",loginHandler);
        } 
        protected function loginHandler(success:Object,fail:Object):void
        {
            if(success){    
                currentState="loggedin"; 
                Facebook.api("/me",getMeHandler);
                userImg.source=Facebook.getImageUrl(success.uid,"small");
                Facebook.api("/me/statuses",getStatusHandler);
            } 
        }
        protected function login():void
        {
            Facebook.login(loginHandler,  {perms:"user_birthday,read_stream,publish_stream"});

        }
        protected function getMeHandler(result:Object,fail:Object):void{
            nameLbl.text=result.name;
            birthdayLbl.text=result.birthday;
        }
        protected function logout():void
        {
            Facebook.logout(logoutHandler);
            currentState="loggedout";
        }
        protected function getStatusHandler(result:Object, fail:Object):void
        {
            statusLbl.text=result[0].message;
        }
        protected function submitPost():void
        {
            var obj:Object = new Object();
            obj.message = statusInput.text;
            obj.link = "url of the image stored on the server";
            obj.type ='link';
            Facebook.api("/me/feed",submitPostHandler,obj, "POST");

        }
        protected function submitPostHandler(result:Object,fail:Object):void
        {
            statusInput.text="";
            Facebook.api("/me/statuses",getStatusHandler);
        }
        protected function logoutHandler(response:Object):void{

        }

    ]]>
</fx:Script>

<s:Button label="Log in" includeIn="loggedout" right="10" top="10" click="login()" skinClass="skins.FBLoginButtonSkin"/>
<s:Button includeIn="loggedin" label="Log out" right="10" top="10" click="logout()" skinClass="skins.FBLogoutButtonSkin"/>
<mx:Form includeIn="loggedin" top="10" left="70">
    <mx:FormItem label="User">
        <s:Label id="nameLbl"/>
    </mx:FormItem>
    <mx:FormItem label="Birthday">
        <s:Label id="birthdayLbl"/>
    </mx:FormItem>
    <mx:FormItem label="Status">
        <s:Label id="statusLbl"/>
    </mx:FormItem>
    <mx:FormItem label="Post status" direction="horizontal">
        <s:TextInput id="statusInput"/>
        <s:Button label="Submit" click="submitPost()"/>
    </mx:FormItem>      
</mx:Form>
<mx:Image includeIn="loggedin" id="userImg" top="10" width="50" left="10"/>

图像存储在公共服务器上。任何人都可以指出我在哪里做错了???

1 个答案:

答案 0 :(得分:0)

我不太确定这一行:

Facebook.login(loginHandler,  {perms:"user_birthday,read_stream,publish_stream"});

在空中我正在使用:

Facebook.login(loginHandler, ['email', 'user_birthday', 'read_stream', 'publish_stream']);

当您允许应用程序使用您的数据时,您是否看到这样的内容?

enter image description here

<强>更新

尝试这样:

private function submitPost():void {
        var params:Object =
        {
            message:'My test post of the image',
            picture:'http://actual.path.to.the.jpg',
            link:'',
            name:'',
            caption:'',
            description:'description about image',
            source:'';
        };

        FacebookDesktop.api('/me/feed', submitPostHandler, params, "POST");            
    };

在这里阅读更多相关信息:

https://developers.facebook.com/docs/reference/api/#publishing

在这里:

https://developers.facebook.com/docs/reference/api/post/