2010-11-24 14 views
3

私はiFrame Facebookアプリケーションを持っています。私はFacebookのC#SDK、FacebookFacebook.Webライブラリを使用しています。Facebook C#SDK認可問題

ユーザーが最初に自分のアプリケーションにアクセスすると、というオブジェクトがpage_load()に作成されます。 app.Sessionがヌルの場合は、CavasAuthorizer(app)を作成してからAuthorize()を呼び出します。

2つの問題:

まず、Authorizeを呼び出すことによって生成されたリダイレクトURL Facebookが「次の」悪いパラメータでエラーになります。 「次の」パラメータがアプリケーションによって所有されていないことを示します。

next=http://localhost:4002/facebookredirect.axd/mygame_dev/mygame.aspx 

私はこのような次の外観を作るためにCanvasURLBuilderでコードを編集することができます:

next=http://localhost:4002/mygame.aspx 

私はしかし、それブラウザにカット&ペーストする場合は、この時点で、URLが機能するには、このようになります。私の2番目の問題に私をもたらします。

コードが実行されると、ユーザーには、中にサイズのFacebook画像とリンクが「Facebookに行く」という空のページがほとんど表示されます。ユーザーがリンクをクリックすると、ユーザーは自分のアプリケーションの正しい認証ページに移動します。

私はこれらが恐らく関連する2つの問題であるが、潜在的に分離していると感じています。

ここにお手伝いいただければ幸いです。

-Andy

+0

web.configに設定されているコールバックURLは何ですか? – SRM

+0

ウェブ設定で「callbackUrl」が表示されません。私は "canvasPageUrl"プロパティを持つ "canvasSettings"タグを持っています。それが「http://apps.facebook.com/mygame_dev/」に設定されているということであれば、Facebookの設定ページで設定したのと同じです。 –

答えて

-1

私はあなたのウェブ設定であなたのコールバックURLをlocalhostに向いていると思います。コードは実際にはFacebookのIFrameの内部で実行されるので、これを行うことはできません。 Localhostは、facebook Webサーバーのlocalhostです。 web.configのコールバックキーに有効なURLを指定する必要があります。ドメインを持っていない場合は、あなたのIPにマップすることができ、無料のダイナミックDNSクライアントをチェックアウトすることができます。 No-ipは1つのeximppleです(そして私は個人的に使用します)。最初の問題については

+0

localhostはあなたのブラウザのためにlocalhostです。 –

+0

ブラウザ用ではなく、サーバー用の技術的なlocalhostです。 – SRM

2

アプリの設定ページでは、サイトURLが第二の問題についてはhttp://apps.facebook.com/[your_app]/

alt text

に設定されていることを確認します。

あなたが許可されていないときは、ログインURLにリダイレクトされますが、iframeをリダイレクトするため、iframeからはできません。 親ウィンドウをリダイレクトするには、window.top.location = ...を使用する必要があります。

EDIT

SDKのMVCの一部を使用した場合のFacebook C#SDKが既にあなたのためにこれを行います。 Webフォームを使用しているので、同等のコードを使用してください。

protected void Page_Load(object sender, EventArgs e) 
{ 
    var fb = new FacebookApp(); 
    var auth = new CanvasAuthorizer(fb); 

    if (!auth.IsAuthorized()) 
    { 
     var url = auth.GetLoginUrl(new HttpRequestWrapper(Request)); 

     var content = CanvasUrlBuilder.GetCanvasRedirectHtml(url); 
     Response.ContentType = "text/html"; 
     Response.Write(content); 
     Response.End(); 
     return; 
    } 

    //...Go on if authorized 
} 
+0

だから、私は上記のコードを試して、私の外向きのサーバーでそれを使用しました。私のFacebook設定が適切に設定されていますが、唯一の奇妙な点は、私のWebサーバーがデフォルト以外のポート4000でリッスンしていることです。 –

+0

上記のコードを実行すると、Facebookはエラーを出します。 URIはhttp://www.mysite.com:4000/facebookredirect.axd/mygame_dev/mygame.aspxのように見えます。 CanvasUrlBuilderをハックして、UIRをhttp://www.mysite.com:4000/mygame.aspxのように見せると、リダイレクトが機能します!しかし、私がそれを承認すると、ゲームに送られますが、iFrameの外に出ます.../sighあなたはデフォルト以外のポートが私に問題を引き起こしていると思いますか? –

+0

私は自分の質問にちょうど答えました。ポートのリダイレクトが問題です。私はデフォルトのポートを使用するように私のウェブサイトを設定し、Facebookの設定からリダイレクトを削除し、それは働いた。しかし、私がアプリケーションを承認した後、Facebookリターンリダイレクションは通常のFacebook iFrameの外でゲームを読み込み、わかりやすく見えます。 –

0

ローカルでテストするには、サイトのURLとFacebookのキャンバスURLがhttp://localhost:8181/yourpageのようなものであることを確認してください。次に、VSでポートが動的に生成されないようにプロジェクトプロパティ\ Webの設定を行い、8181(またはFBと同じであれば好きなポート)を使用できることを確認します。