Search code examples
imageflex4facebook-graph-apiposting

Posting an image with on facebook using flex


I trying to post an image along with the link on facebook.I am able to login get the user details but I am not able to post the image and the link.Following is the code I used

<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"/>

The image is stored on the public server.Can anyone point me where I am goin wrong???


Solution

  • i'm not really sure about this line:

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

    on air i'm using:

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

    when you are allowing application to use your data, do you see it like this?

    enter image description here

    UPDATE

    try it like this:

    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");            
        };
    

    read more about it here:

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

    and here:

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