1

Facebook ボタンが押された後、ユーザーがログインすると、その WebView はすぐに Facebook モバイル サイトに移動します。私が必要としているのは、その webview が消えて、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()"/>

4

1 に答える 1

0

こんにちは Corey あなたの質問が解決したかどうかはわかりませんが、私は一瞬だけ解決したので、私の経験についてお話しします。

ユーザーがログインし、facebook のアプリケーションにアプリをインストールすると、コードで loginHandler が FacebookSession と共に正常にディスパッチされ、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; で削除します。前にイベントリスナーを削除しないでください。loginhandle が正常にディスパッチされ、エラーが発生して facebookWebView を削除する必要がある場合のみ。

于 2012-05-29T10:50:54.227 に答える