2011-11-09 12 views
2

私は、ユーザーのFacebookアカウントからリアルタイムのフィード更新を処理しようとしているサイトで作業しています。私は基本的なものを用意しています。アプリは「フィード」に登録されており、ユーザーのログインによってread_streamとoffline_access(場合によっては)アクセス許可が求められます。私のテストユーザーはFBにログインしてこれらのアクセス許可を与え、そのユーザーの1人がステータス更新を追加(または削除)すると、自分のサイトのサブスクリプションで指定されたコールバックがpingされます。これまでのところ、すべてが順調です。リアルタイムのフィード更新をどのように処理しますか?

今、わかっているように、私のコールバックはFacebookに電話してユーザーのフィードを取得しなければならないので、コールバックはそれが何をするのかを決めることができます。フィードを取得するための正しいアクセストークンを見つけることが問題です。

  • これはアプリのアクセストークンでこれを実行しようとしました。このトークンは友だちの情報(アプリのサブスクリプションとユーザー権限に含まれています)を取得することはできますが、フィードを取得することはできません。

  • 私は、コールバック内からユーザーのアクセストークンを取得するためのさまざまな方法を試しましたが、何も機能していません。私はこれが、Facebookのログインユーザーではなく、ブラウザのユーザーができることだからだと思っている。結論は、私はこのトークンを取得する方法が見つかりませんでした。

(ところで、私はカンニング場合 - それは、コールバックにグラフAPI Explorerおよびハードコードからユーザーのアクセストークンを取得し、コールバックが正しく動作これはもちろんの本当の解決策、ではありませんが、。残りのコードが動作していることを確認する必要があります)。

これはどのように機能しますか?アプリのアクセストークンを何とかすることはできますか?実際、コールバックが任意の許可されたユーザーのアクセストークンを取得する方法はありますか?これを行う方法が必要です。リアルタイムのフィード通知がない場合もあります。そこの手がかりは?これは真剣に私のお尻を蹴っている...ありがとう!

答えて

1

私は解決策を見つけました。ユーザーがログインすると、offline_access対応のアクセストークンを止めて、残りのユーザーのデータと共にアプリに保存します。そのユーザーのフィードの更新を通知されたら、データベースからトークンを取り出し、/ feed ...呼び出しのトークン部分としてFBに渡すことができます。そして、それは動作します。何らかのエラー処理が行われることは間違いありませんが、私は現在、(a)これを正しく処理する方法であり、(b)問題を尋ねているひどいハックです。私はこれらのどれが大文字であるかを見ていくと思います...

+0

はい、あなたはaccess_tokenを持っていれば、通常は1-2時間で終了します。そのトークンを長く使用する必要がある場合は、offline_accessが必要です。 – Drizzt321

1

アクセストークンをオフラインで取得して保存してください。これはまさにoffline_accessとアクセストークンがそこにあり、そのユーザーの名前でFacebookに要求を出す理由です。 (a)は正しい道のりです。 (a)は私のやり方です。 幸運

2

これを調べるとよいでしょう。オフラインアクセスの許可を取る代わりに、facebookはユーザがログインしたときに短期間のアクセストークン(2時間)を与えるようになりました。これらは、長寿命のアクセストークン(2ヶ月)と交換できます。それについてどうやって行くのかこの記事をチェックしてください。ユーザーはOAuthのFacebook経由の認証され

https://developers.facebook.com/roadmap/offline-access-removal/

0

アクセス・トークンを返しますが、それは数時間のために有効です。このトークンの有効性には、トークンの有効期限があります。 しかし、このトークンは、約60日間有効な新しい拡張トークンと交換できます。ユーザーを取得新しいトークンに次のコード:

URL URL =新しいURL( "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id= "+のAppID +" & client_secret = "+ clientSecretId +" & fb_exchange_token =" + fb_exchange_token;

のInputStreamのIStream = url.openConnection ().getInputStream();

BufferedReaderのBR =新しいBufferedReaderの(新しいInputStreamReaderの(ISTREAM));

ストリングnew_token = br.readLine();

それは助けて欲しいです!

関連する問題