按下Facebook按钮后,用户登录,然后该Web视图立即转到Facebook移动网站。 我需要的是让该网络视图消失,以便我可以继续与我的应用程序进行交互,而不是与Facebook移动网站进行交互。
如果我不清楚,我很抱歉,现在是凌晨 5 点,我在这里有点疯狂,哈哈。 看看代码...
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
backgroundColor="#2F28C1" title="Setup"
creationComplete="application1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import com.facebook.graph.FacebookMobile;
import mx.events.FlexEvent;
import views.setup_first.facebook;
import views.setup_first.flickr;
import views.setup_first.google;
import views.setup_first.tumblr;
import views.setup_first.twitter;
public var permissions:Array = ["user_birthday", "read_stream", "publish_stream"];
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
FacebookMobile.init("262320357178421", loginHandler);
}
protected function loginHandler(success:Object,fail:Object):void
{
}
protected function login():void
{
var facebookWebView:StageWebView = new StageWebView();
facebookWebView.viewPort = new Rectangle (0,0, stage.width, stage.height);
FacebookMobile.login(loginHandler, this.stage, permissions, facebookWebView);
trace("I'm logged in!");
}
protected function logout():void
{
FacebookMobile.logout(onLogout, "https://m.facebook.com/dialog/permissions.request?app_id=262320357178421&display=touch&next=http%3A%2F%2Fwww.facebook.com%2Fconnect%2Flogin_success.html&type=user_agent&perms=publish_stream&fbconnect=1");
}
protected function onLogout(result:Object):void
{
trace("Perfect Log Out!")
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:navigationContent/>
<s:Button left="62" top="86" click="navigator.pushView(views.setup_first.google)"
icon="@Embed('../Setup/Setup_0002_Layer-5.png')"/>
<s:Button right="64" top="86" click="login()" icon="@Embed('../Setup/Setup_0001_Layer-6.png')"/>
<s:Button click="navigator.pushView(views.setup_first.tumblr)" horizontalCenter="-4"
icon="@Embed('../Setup/Setup_0000_Layer-7.png')" verticalCenter="-14"/>
<s:Button left="62" bottom="117" click="navigator.pushView(views.setup_first.flickr)"
icon="@Embed('../Setup/Setup_0004_Setup.png')"/>
<s:Button right="63" bottom="117" click="navigator.pushView(views.setup_first.twitter)"
icon="@Embed('../Setup/Setup_0005_Layer-1.png')"/>
<s:Button right="54" bottom="10" label="Skip" click="navigator.pushView(thirdPage)"/>
<s:Button id="logOut" x="323" y="210" height="28" label="LogOut" fontSize="15"
click="logout()"/>
你好科里,我不知道你是否解决了你的问题,但我只是做了一会儿,所以我会告诉你我的经历。
使用您的代码,如果用户登录,并在他的Facebook应用程序中安装应用程序,登录处理程序将成功与Facebook会话一起调度,并且facebookWebView会自动删除。但是,如果用户取消安装或不允许请求的权限,则不会调度任何事件,并且facebookWebView会显示一个带有"成功"字样的白页。我已经修复了这个问题,将听众添加到位置查格事件的 facebookWebView。然后总是 facebookWebView 更改 url 显示方法已调度,包括当用户出现用户拒绝错误时(当用户不允许应用时调度(。这是我的代码:
private var facebookWebView:StageWebView = new StageWebView();
protected function login():void{
facebookWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGE, locationChange);
facebookWebView.addEventListener(LocationChangeEvent.LOCATION_CHANGING, locationChange);
facebookWebView.viewPort = new Rectangle(0, 0, stage.width, stage.height);
FacebookMobile.login(onLogin, this.stage, permissions, facebookWebView);
}
private function locationChange(e:LocationChangeEvent):void
{
var url:String = e.location;
if(url.search("error") != -1)
removeFacebookView();
}
protected function onLogin(success:Object, fail:Object):void{
if(success){
//save user content FacebookSession(success).user
removeFacebookView();
setCurrentState("login");
}
}
private function removeFacebookView():void
{
facebookWebView.removeEventListener(LocationChangeEvent.LOCATION_CHANGE, locationChange);
facebookWebView.removeEventListener(LocationChangeEvent.LOCATION_CHANGING, locationChange);
this.actionBarVisible = true;
facebookWebView.stage = null;
}
正如你所看到的,要删除facebookWebView,我在视图中有一个变量,而不是函数的局部变量。(你也可以用e.target得到它(。您将使用 facebookWebView.stage = null 删除它;之前不要删除事件侦听器。仅当登录句柄成功调度时,并且存在错误并且您必须删除facebookWebView时。