2012-03-16 23 views
1

私のC#Facebookキャンバスアプリケーションを取得して、ユーザーが自分のアプリケーションを承認しているかどうかを判断するのに問題があります。FacebookWebContext.Current.IsAuthorizedはあるページでは動作しますが、別のページでは動作しません

問題は実際にはセカンダリページでのみ発生しています。私のアプリは最初にランディングページをチェックし、ユーザーがアプリケーションを検証したことを適切に判断します。アプリの

ショート概要:

  1. ユーザーはアプリが好き。
  2. ユーザーがアプリを承認します。
  3. ユーザーは友だちに情報を送信します(Facebook通知を介して)
  4. ユーザーの訪問アプリと情報を取得します。

したがって、手順は1〜3です。ステップ4で私はいくつかの問題を抱えています。

「HasAuthorizedApplication」というメソッドを呼び出して、APIからデータを取得しようとする前にユーザーがアプリを承認していることを確認します。

public bool HasAuthorizedApplication() 
    { 
     bool returnValue = false; 

     try 
     { 
      if (FacebookWebContext.Current != null) 
      { 
       returnValue = FacebookWebContext.Current.IsAuthorized(Scope.Split(',')); 

       if (returnValue) 
       { 
        AccessToken = FacebookWebContext.Current.AccessToken; 
        HttpContext.Current.Session["accesstoken"] = AccessToken; 
       } 
       else 
       { 
        HttpContext.Current.Session["accesstoken"] = null; 
       } 
      } 
     } 
     catch 
     { 
      returnValue = false; 
     } 

     return returnValue; 
    } 

「スコープ」私が求めているだけの権限:ステップ4で「publish_stream、電子メール」だから

、「利用者の友人は」Facebookの通知をクリックすると着陸を打ちますアプリのページ。承認を確認し、友人が承認していない場合は、認証ダイアログが表示されます。

承認後、アプリはセカンダリページにリダイレクトされ、グラフの通知の詳細が表示される前に、友だちがアプリを承認したことを確認するために再度チェックします。

残念ながら、私がこの時間を呼び出すと、「FacebookWebContext.Current.IsAuthorized」は常に「false」を返します。私はこの時点で "AccessToken"と "SignedRequest"がnullであることに注意します。認証ダイアログにリダイレクトしようとしましたが、友だちが既に検証済みであるため、ユーザーには表示されません。しかし、二次ページに戻るたびに、 "IsAuthorized"コールはfalseを返します。

マイコールは、Facebookの通知を周囲のデータを取得するために(私はデータを取得しようとすると、さらにfalseを返す):「データID」は、通知のIDです

public dynamic GetData(string dataId) 
    { 
     if (HasAuthorizedApplication()) 
     { 
      var fb = new FacebookWebClient(AccessToken); 
      dynamic data = fb.Get(dataId); 

      return data; 
     } 

     return null; 
    } 

確かに、私はJavascriptとバックエンドの間のやりとりがどのように作用するかはよく分かりません。

<script type="text/javascript"> 
      FB.init({ 
       appId: '<%=APPID %>', 
       status: true, // check login status 
       cookie: true, // enable cookies to allow the server to access the session 
       oauth: true, 
       xfbml: true // parse XFBML 
      }); 

     </script> 

そして、それは1つのページに正しく動作する理由のアイデアではなく、別の:私は、さらに着陸し、両方の二次ページで、次のJavascriptを持っていますか?

ありがとうございます! Craig

答えて

0

これは正確にはあなたが探している答えではありませんが、FacebookWebContextはFacebook C#SDK V5の一部であり、廃止予定です。いくつかの問題があります。最も重要なことは、準備ができているFacebookの認証Cookieに依存していることです。Facebookは最近、ポリシーに変更を加え、開発者はFacebookのCookieをいつでも直接変更することができるようになりました。そのため、Facebook C#SDKのV6ではこれらの機能を削除しました。

言われていること、あなたは、ほぼすべてのクライアント上ではなく、サーバー上のC#SDKでのFacebookのJavascript SDKで上記のやろうとしているもののを処理する必要があります。サーバー上のFacebook C#SDKを使用して、最終的な検証を実行できます。このように

、私はあなたがFacebookのクッキーを使用するか、FacebookWebContextオブジェクトが含まれていないFacebookのC#のSDKのV6にアップグレードすることをお勧めします。

あなたはhttp://csharpsdk.orgでのFacebookのC#SDKのための完全なドキュメントを見つけることができます。

+0

ありがとうございました! (遅く返事を申し訳ありません)私は実際に以前の開発者によって既に作成されたものを廃棄し、Javascript SDKのみを使用しました。はるかに良い結果。 –

関連する問題