1

我正在计划一个涉及使用 Facebook 登录的跨平台(Android 和 IOS)移动应用程序的项目。我没有使用 Facebook API 的经验,也找不到任何适合新手使用的完整材料。我想将 air 用于其跨平台功能,因此希望避免为每个平台提供多种解决方案。我已经进行了许多搜索以寻求帮助,但没有找到太多。你们中的任何人都可以指出我从这类事情开始使用的资源吗?

4

2 回答 2

4

AS3 Facebook API 就是您所需要的。(http://code.google.com/p/facebook-actionscript-api/)也许你将不得不改变一些东西(比如那里的 JSON 方法),否则它似乎工作正常。您也可以从那里下载几个示例,您可以查看不同类型环境的用法。

另外,请阅读 Tom Krcha 的这篇文章http://www.adobe.com/devnet/games/articles/getting-started-with-facebooksdk-actionscript3.html

如果您有更具体的问题,请提出。这个太笼统了。

编辑:这是我前段时间为一个小项目写的一门课

package com.company.social {

    import com.facebook.graph.FacebookMobile;
    import com.company.AppConst;
    import com.company.IDestroyable;
    import com.company.Main;
    import com.company.displayassets.WebViewCloseStripe;
    import com.company.events.FacebookControllerEvent;
    import com.company.events.TwitterControllerEvent;

    import flash.display.BitmapData;
    import flash.display.PNGEncoderOptions;
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.EventDispatcher;
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;
    import flash.media.StageWebView;
    import flash.utils.ByteArray;
    import flash.utils.clearTimeout;
    import flash.utils.setTimeout;

    public class FacebookController extends EventDispatcher implements IDestroyable {

        private static const APP_ID:String = "1234512345"; // Your App ID.
        private static const SITE_URL:String = "some_url";
        //Extended permission to access other parts of the user's profile that may be private, or if your application needs to publish content to Facebook on a user's behalf.
        private var _extendedPermissions:Array = ["publish_stream","user_website","user_status","user_about_me"];
        private var _stage:Stage;
        private var _webView:StageWebView;
        private var _topStripe:WebViewCloseStripe;
        private var _activity:String;
        private var _timeoutID:uint;
        public static const ACTIVITY_LOGIN:String = "login";
        public static const ACTIVITY_POST:String = "post";

        public function FacebookController(stage:Stage) {
            _stage = stage;
            init();
        }

        private function init():void {
            _activity = ACTIVITY_LOGIN;
            startTimeout();
            FacebookMobile.init(APP_ID, onHandleInit, null);
        }

        private function onHandleInit(response:Object, fail:Object):void {
            if (response) {
                stopTimeout();
                dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.LOGIN_COMPLETE));
                //FacebookMobile.api("/me", handleUserInfo);
            }
            else {
                /*trace("no response, login -->");
                for(var prop in fail["error"]) {
                    trace(prop+": "+fail["error"][prop]);
                }*/
                loginUser();
            }
        }

        private function startTimeout():void {
            trace("timeout start");
            clearTimeout(_timeoutID);
            _timeoutID = setTimeout(timeout, AppConst.TIMEOUT_TIME);
        }

        private function timeout():void {
            trace("timed out");
            clearTimeout(_timeoutID);
            dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.TIMEOUT));
        }

        private function stopTimeout():void {
            trace("timeout stop");
            clearTimeout(_timeoutID);
        }

        private function loginUser():void {
            stopTimeout();
            _topStripe = new WebViewCloseStripe();
            _topStripe.getCloseButton().addEventListener(MouseEvent.CLICK, closeClickHandler);
            _stage.addChild(_topStripe);

            _webView = new StageWebView();
            _webView.viewPort = new Rectangle(0, _topStripe.height, _stage.fullScreenWidth, _stage.fullScreenHeight - _topStripe.height);

            FacebookMobile.login(handleLogin, _stage, _extendedPermissions, _webView);
        }

        private function handleLogin(response:Object, fail:Object):void {
            if(_topStripe) {
                _topStripe.getCloseButton().removeEventListener(MouseEvent.CLICK, closeClickHandler);
                _topStripe.destroy();
                _stage.removeChild(_topStripe);
                _topStripe = null;
            }
            if(_webView) {
                _webView = null;
            }
            if(response) {
                dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.LOGIN_COMPLETE));
                //FacebookMobile.api('/me', handleUserInfo);
            }
            else {
                dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.LOGIN_ERROR));
            }
        }

        private function closeClickHandler(e:MouseEvent):void {
            dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.CLOSE));
        }

        private function handleUserInfo(response:Object, fail:Object):void {
            if (response) {
                for(var prop in response) {
                    trace(prop+": "+response[prop]);
                }
            }
        }

        private function handleUploadImage(result:Object, fail:Object):void {
            stopTimeout();
            if(result) {
                dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.POST_COMPLETE));
            }
            else {
                dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.POST_ERROR));
            }
        }

        public function postWithImage(message:String, imageData:BitmapData):void {
            _activity = ACTIVITY_POST;
            var byteArray:ByteArray = imageData.encode(new Rectangle(0, 0, imageData.width, imageData.height), new PNGEncoderOptions()); 
            var params: Object = new Object;
            params.image = byteArray;
            params.fileName = "image.png";
            params.message = message;
            startTimeout();
            FacebookMobile.api("/me/photos", handleUploadImage, params, "POST");
        }

        public function reset():void {
            FacebookMobile.logout(handleReset, SITE_URL);
        }

        public function handleReset(response:Object):void {
            dispatchEvent(new FacebookControllerEvent(FacebookControllerEvent.RESET));
        }

        public function destroy():void {
            if(_webView) {
                _webView.dispose();
                _webView = null;
            }

            if(_topStripe) {
                _topStripe.getCloseButton().removeEventListener(MouseEvent.CLICK, closeClickHandler);
                _topStripe.destroy();
                _stage.removeChild(_topStripe);
                _topStripe = null;
            }

            _stage = null;
        }
    }
}
于 2013-11-01T16:29:23.737 回答
0

或者,您可以使用这样的本机扩展:

http://www.milkmangames.com/blog/tools/#iosgv

也有来自其他出版商的免费版本。

于 2013-11-02T04:43:39.707 回答