AS3 Facebook的API 1.8 FacebookMobile.loginAPI、Facebook、login、FacebookMobile

2023-09-08 14:00:15 作者:你说不可能,我说愿意等

我已经下载了Facebook的API的例子,有一个测试运行。

I have downloaded the Facebook API example and have a test run on.

FacebookMobile.login(handleLogin, stage, extendedPermissions, new StageWebView());

然而,这code似乎没有工作,也没有在网页中打开新的Facebook日志。

However this code seems to be not working, it doesn't open new Facebook log in page.

下面是完整的源代码code,我下的Adobe AIR 3.0运行

Here is the full source code, and i am running under Adobe Air 3.0

package  {

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.Stage;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.media.StageWebView;

    import com.facebook.graph.FacebookMobile;
    import com.facebook.graph.controls.Distractor;

    import demo.controls.GraphicButton;
    import demo.events.FacebookDemoEvent;
    import demo.models.FriendModel;
    import demo.views.FriendDetail;
    import demo.views.FriendsList;
    import demo.views.UserInfo;

    public class FriendListMobile extends MovieClip {

        //Place your application id here.
        protected static const APP_ID:String = 'xxxxxxxx';
        //Place your specified site URL for your app here. This is needed for clearing cookies when logging out.
        protected static const SITE_URL:String = 'xxxxxxxx';
        //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.
        protected var extendedPermissions:Array = ["publish_stream","user_website","user_status","user_about_me"];

        public var userInfo:UserInfo;
        public var loginBtn:GraphicButton;
        public var friendDetail:FriendDetail;
        public var friendList:FriendsList;

        public var distractor:Distractor;
        public var bg:DistractorOverlay;
        public var friendsModel:FriendModel;

        protected var selectedUserInfo:Object = {};

        public function FriendListMobile() {
            // constructor code
            addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
        }

        protected function handleAddedToStage(event:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            init();
        }

        protected function init():void {
            configUI();
            addEventListeners();

            FacebookMobile.init(APP_ID, onHandleInit, null);
        }

        protected function configUI():void {
            loginBtn.label = 'Login';
            loginBtn.setSize(440, 60);
            loginBtn.setStyle('font', '_sans');
            loginBtn.setStyle('size', 25);

            friendsModel = new FriendModel();

            distractor = new Distractor();
            friendDetail.visible = false;

            bg = new DistractorOverlay();
            bg.visible = true;
            addChild(bg);

            distractor.x = 120
            distractor.y = 310; 

            bg.addChild(distractor);
        }

        protected function addEventListeners():void {
            loginBtn.addEventListener(MouseEvent.MOUSE_DOWN, handleLoginClick, false, 0, true);
            friendDetail.addEventListener(Event.CLOSE, onCloseDialog, false, 0, true);
            friendsModel.addEventListener(Event.COMPLETE, onFriendsComplete, false, 0, true);
            friendList.addEventListener(FacebookDemoEvent.FRIEND_SELECTED, onFriendSelected, false, 0, true);
        }

        /**
         * Pops up detail view for a selected friend.
         **/
        protected function showFriendDetail():void {
            bg.visible = true;

            friendDetail.visible = true;
            friendDetail.data = selectedUserInfo;

            this.setChildIndex(friendDetail, this.numChildren - 1);
        }

        /**
         * Event Handler Close DetailView
         **/
        protected function onCloseDialog(event:Event):void {
            friendDetail.visible = false;
            bg.visible = false;
        }

        /**
         * Event Handler user selects from the friend list.
         **/
        protected function onFriendSelected(event:FacebookDemoEvent):void {
            selectedUserInfo = event.data;
            showFriendDetail();
        }

        /**
         * Event Handler User clicks Login button.
         **/
        protected function handleLoginClick(event:MouseEvent):void {
            bg.visible = true;

            loginUser();
        }

        /**
         * Event Handler User clicks on Logout button.
         **/
        protected function handleLogOutClick(event:MouseEvent):void {
            FacebookMobile.logout(handleLogout, SITE_URL);

            loginBtn.label = 'Login';
            loginBtn.addEventListener(MouseEvent.MOUSE_DOWN, handleLoginClick, false, 0, true);

            friendList.clear();
            userInfo.clear();

            bg.visible = true;
        }

        /**
         * Event Handler once logged out.
         **/
        protected function handleLogout(response:Object):void {
            bg.visible = false;
        }

        /**
         * Event Handler FacebookMobile initializes application.
         * Application will check if user is return to application, 
         * if not user is prompted to log in.
         **/
        protected function onHandleInit(response:Object, fail:Object):void {
            if (response) {
                updateView(response.uid, response);
            } else {
                loginUser();
            }
        }

        /**
         * Updates UI for views 
         **/
        protected function updateView(id:String, data):void {
            userInfo.id = id;
            userInfo.data = data;

            loginBtn.label = 'Log Out';
            loginBtn.addEventListener(MouseEvent.MOUSE_DOWN, handleLogOutClick);
            loginBtn.removeEventListener(MouseEvent.MOUSE_DOWN, handleLoginClick);

            friendsModel.load();
        }

        /**
         * Preforms a login call to application. Mobile application takes in an instance 
         * StageView class.
         **/
        protected function loginUser():void {
            trace('not log in');
            FacebookMobile.login(handleLogin, stage, extendedPermissions, new StageWebView());
        }

        /**
         * Event Handler once user logs in.
         **/
        protected function handleLogin(response:Object, fail:Object):void {
            bg.visible = false;
            FacebookMobile.api('/me', handleUserInfo);
        }

        /**
         * Event Handler for users information.
         **/
        protected function handleUserInfo(response:Object, fail:Object):void {
            if (response) {
                updateView(response.id, response);
            }
        }

        /**
         * Event Handler FriendModel information has been loaded.
         **/
        protected function onFriendsComplete(event:Event):void {
            bg.visible = false;
            friendList.dataProvider = friendsModel.dataProvider;
        }
    }

}

这是因为它只有在移动设备工作正常,你不能在桌面上测试?

Is this because it only works under mobile devices, and you can't test on the desktop?

推荐答案

在开发一个Flex手机应用程序,登录Facebook,什么工作对我来说是它传递到登录功能之前设置以下参数到的StageWebView:

When developing a Flex Mobile application that logged in to Facebook, what worked for me was to set the following parameters to the StageWebView before passing it into the login function:

有关Flex的:

StageWebView webView = new StageWebView();
webView.stage = FlexGlobals.topLevelApplication.stage;
webView.viewPort = new Rectangle(0, 0, FlexGlobals.topLevelApplication.stage.stageWidth, FlexGlobals.topLevelApplication.stage.stageHeight);

我没有测试在非Flex的AIR应用程序移动此code,但你可以试试这个:

I haven't tested this code on a non-Flex air app for mobile, but you can try this:

StageWebView webView = new StageWebView();
webView.stage = stage;
webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);

和它传递到登录功能:

FacebookMobile.login(handleLogin, stage, extendedPermissions, webView);