AS3 Facebook的API 1.8 FacebookMobile.login [英] As3 Facebook API 1.8 FacebookMobile.login
问题描述
我已经下载了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);
这篇关于AS3 Facebook的API 1.8 FacebookMobile.login的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!