2011-07-01 6 views
0

Facebook C#SDKを使用して、会社ページの壁に投稿を公開しようとしています。 これはバッチジョブから行う必要があるので、これは特定のユーザーが対話しているWebアプリケーションではありません。 自分のFacebook IDの下にFacebookアプリケーションを設定しました。私は、自分のアカウントでpublish_stream、share_item、offline_access、およびmanage_pages権限を与えました。 (私のFacebookの設定ページでは、これらのアクセス許可がアプリに与えられていることを確認できます)。私が投稿しようとしている会社のページは自分で作成したページなので、フルアクセスできるはずです。C#SDKを使用してオフラインアプリから会社のFacebookページに投稿するにはどうすればよいですか?

私は、このアプリケーションのアプリIDと秘密を使ってFacebookに認証しています。アクセストークンを取得し、メッセージをまとめて投稿してから投稿しようとしています。

Facebook.FacebookOAuthException was unhandled by user code 
Message=(OAuthException) (#200) The user hasn't authorized the application to perform this action 

私はテーマについていくつかのバリエーションを試しましたが、私が間違っていることを理解できないようです。ここ は、私のコードのビットです:

 var client = new FacebookClient("APP ID", "SECRET"); 
     _log.DebugFormat("access token={0}", client.AccessToken); 
     dynamic parameters = new ExpandoObject(); 
     parameters.message = "testing 123"; 
     /* fill in other parameters */ 
     dynamic result = client.Post(FanPageId+"/feed", parameters); 
     /* here's where I get the exception */ 

私は私/アカウント/から返されたデータのうち、ページ固有のアクセストークンを引っ張っへの参照を見てきましたが、私はからのことを行う方法を見つけ出すことはできませんFacebookユーザーとしてではなく、Facebookアプリとして認証しているオフラインアプリです。

UPDATE:「無期限のOAuthのトーク​​ンは」一つです

 var client = new FacebookClient("NON-EXPIRING OAUTH TOKEN"); 

を...:私はフェイスブックに接続するためのコードのこのビットを使って、そこに道の一部を得ている問題のアプリのFacebookのデベロッパーアプリに表示されます。

これはまだ自分のIDで投稿されています。だから、投稿をページ自体から来ているように見えるようにするための余計なステップを踏む必要があります。

+0

おそらく、あなた自身がmanage_pages権限を求めてから、ページ上で何かできることでしょう。 – Ashfame

答えて

0

私はこれを今考え出したので、私自身の質問に答えるつもりです。このメソッドを使用すると、ファンページの '名前'の下に、Facebook.Web.dllを必要としないFacebook.dllのみを使用して、ユーザーの介入なしにファンページに投稿することができました。

// init with a non-expiring access token for an app that can manage the fan page 
var client = new FacebookClient(fbAppOaToken); 

// get accounts, using a Facebook ID for a user who has admin rights to the fan pge 
dynamic accts = client.Get(string.Format("/{0}/accounts", fbAppAdminUser)); 

// find the access token for the fan page 
string page_access_token = null; 
foreach (var acct in accts.data) 
{ 
    if (acct.id == fbFanPageId) 
    { 
     page_access_token = acct.access_token; 
     break; 
    } 
} 

// fill in parameters for the message to post 
dynamic parameters = new ExpandoObject(); 
parameters.message = "testing 123"; 

// and include the access token as retrieved above 
parameters.access_token = page_access_token; 

dynamic result = client.Post(fbFanPageId + "/feed", parameters); 

誰もがこれを行うための迅速または簡単な方法を持っている場合、私に知らせてください。私はこの問題を解決するために十分な数のパズル・ピースを組み込むまで、本当にこの問題を遭遇しました。ありがとう。

+0

あなたの例に従えば、私はacct.access_tokenから何の価値も得られません。手動でトークン文字列を作成すると、client.Postをエラーなしで実行できるようになりますが、そのページでその投稿を見つけることができません。まったく同じメッセージを投稿しようとすると、その投稿が重複していて、許可されていないという例外が表示されます。私はここに記載されていない措置がないのでしょうか?あなたはこれらの問題に遭遇しましたか? – user158953

+1

あなたは良いトークンを使い始めていますか? (私の例では 'fbAppOaToken')グラフAPIエクスプローラ(https://developers.facebook.com/tools/explorer)を少しばかり使い、あなたにすべての権利があるかどうかを確認することをお勧めします持っているはずだ。そのトークンを使用してから、/ xxx/accountsコールを発行して、実際に投稿しようとしているページを管理する権利があるかどうかを確認してください。 –

関連する問題