シンプルなバックグラウンド アプリケーションの概念実証として、Graph API Explorer を使用して、自分のアプリが管理しているページの壁に何かを投稿するためのアクセス トークンを作成しました。うまくいきました。ただし、当然、トークンの有効期限は切れます。
そのため、バックグラウンド アプリケーションが実行されるたびに新しいページ アクセス トークンを自動的に要求するようにしています。そして、それを行う方法の具体的な定義を見つけるのに苦労しています。Facebook とアクセス トークンに関する情報は不足していませんが、バックグラウンド アプリケーションをページに投稿する方法を示すものはないようです。(ユーザーのウォールに投稿しない、バックグラウンド アプリケーションであるためユーザーにログイン ダイアログを表示しない、など)
次の URL への Web 要求からの応答を読み取ることで、コードでアクセス トークンを簡単に取得できます。
https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={MY_APP_ID}&client_secret={MY_APP_SECRET}
もちろん、ページのウォールに投稿しようとすると、その「アクセス トークン」は機能しません。ユーザーがアプリケーションにこのアクションを実行する権限を与えていないことを示しています。私が実行しているアクションは非常に単純です。
var client = new FacebookClient(GetFacebookAccessToken());
dynamic parameters = new ExpandoObject();
parameters.message = "this is a test";
dynamic result = client.Post("{MY_PAGE_ID}/feed", parameters);
ページ アクセス トークンを取得するには、最初のアクセス トークンを使用して 2 番目の要求を行う必要があることをいくつかの場所で読みました。しかし、それを行う方法の例が見つからないようです。
誰かが私のためにこれに光を当てることができますか?
- 私はFacebookページを持っています。
- 私は、ローカル バックグラウンド アプリケーションがそのページにアクセスする手段を提供する以外の目的を持たない Facebook アプリを持っています。
- そのアプリケーションが認証できるようにして、ページに何かを投稿できるようにするだけです。
- (そして、アプリケーションにこれを行う許可を永続的に与えるために Facebook UI で実行する必要がある手順がある場合は、その手順を実行したと思いますが、何らかの形で再確認することをお勧めします。)
編集: 長期間有効なユーザー アクセス トークンを取得し、それを使用してページ アクセス トークンを取得する必要があると説明されています。理論的には、ページ アクセス トークンは期限切れにならないということです。しかし、私にははっきりしないのは、これをどのように達成するかです。
の非推奨について説明しているページと、サーバー側アクセスについて説明しているページをoffline_access
読みました。しかし、私は明らかに何かを誤解しています。前者では、適切なトークンを取得するために後者を参照します。ただし、後者には、ユーザーにログインを提示し、アクセス許可を受け入れさせ、そのログインからの応答を使用するための手順が含まれます。
無人で実行されるバックグラウンド プロセスであるため、ユーザー (つまり私) に何らかの質問を提示することは、実際には選択肢ではありません。また、アクセス トークンを取得するためにブラウザーから 1 回限りの要求を行うことはできないと言われました。これは、定義上、クライアント側の対話であり、必要なサーバー側フローの一部ではないためです。(RESTful リクエストが Web ブラウザーから送信されたものかアプリケーションから送信されたものかをサービスが気にするのは奇妙に思えますが、実際にその呼び出しを行うには、OAuth や Facebook API に精通していません。)
では、アプリが Facebook ページに投稿するためのパーマネント アクセス トークンを取得するための手動の手順を実行できるとしたら、それらの手順は何ですか? 逆に、アプリケーションが実行されるたびにアクセスを取得するための自動化された手順をアプリケーションで実行できる場合、それらの手順は何ですか?
(アプリケーションからさらにいくつかの API 呼び出しを行うと、通常は 1 日 1 回のプロセスに 1 秒または 2 秒の実行時間が追加されるため、どのアプローチを採用しても、私には違いはありません。)