私はAndroidアプリを開発しています。Facebook の offline_access パーミッションの廃止が迫っているので、Graph API を使用して Facebook トークンを拡張しようとしています。
https://graph.facebook.com/oauth/access_token?
client_id=APP_ID&
client_secret=APP_SECRET&
grant_type=fb_exchange_token&
fb_exchange_token=EXISTING_ACCESS_TOKEN
上記のコードを Android アプリに実装し、更新された Facebook トークンを取得する方法を示す詳細なコードを提供できる人はいますか?
お時間をいただきありがとうございます。
更新 2:
進歩(と思います)!
facebook リクエスト メソッドで完全な URL を使用すると、ベース URL が URL の先頭に追加されます。
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
使用する必要があります
String refreshUrl = "oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
しかし、私は今、応答 {"error":{"message":"Error validationing application. Invalid application ID.","type":"OAuthException","code":190}} を得ています。
更新 1:
これが私が試したものです。コードは完了します。つまり、リスナーの OnComplete が呼び出されますが、応答には新しいアクセス トークンまたは有効期限値が含まれていません。
void refreshWithGraph() {
AsyncFacebookRunner extendingAsyncRunner = new AsyncFacebookRunner(facebook);
Bundle parameters = new Bundle();
//the variable currentAccessToken is obtained after authorisation is complete using currentAccessToken = facebook.getAccessToken();
String refreshUrl = "https://graph.facebook.com/oauth/access_token?client_id=12345678910&client_secret=abcdefghijklmnopqrstuvwxyz&grant_type=fb_exchange_token&fb_exchange_token="+currentAccessToken;
extendingAsyncRunner.request(refreshUrl, parameters, new RefreshListener(), null );
}
これが私のバージョンの RefreshListener です...
//REFRESH LISTENER
public class RefreshListener extends BaseRequestListener {
public void onComplete(final String response, Object state) {
try {
final JSONObject json = Util.parseJson(response);
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE\nResponse is " + response);
tvRefreshToken.setText("IN REFRESH LISTENER ONCOMPLETE\nToken is " + facebook.getAccessToken());
tvRefreshExpiry.setText("IN REFRESH LISTENER ONCOMPLETE\nFacebook expiry is " + millisecToDate(facebook.getAccessExpires()));
}
}); //end runOnUiThread
} catch (JSONException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT JSON EXCEPTION \nResponse is " + response);
}
}); //end runOnUiThread
} catch (FacebookError fe) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tvRefreshResponse.setText("IN REFRESH LISTENER ONCOMPLETE CAUGHT FACEBOOK ERROR \nResponse is " + response);
}
}); //end runOnUiThread
} //end catch Facebook error
} //end onComplete
@Override
public void onIOException(IOException e, Object state) {
tvRefreshResponse.setText("IN REFRESH LISTENER IOEXCEPTION \nException is "+ e.getLocalizedMessage());
}
@Override
public void onFileNotFoundException(FileNotFoundException e, Object state) {
tvRefreshResponse.setText("IN REFRESH LISTENER FILE NOT FOUND EXCEPTION \nException is "+ e.getLocalizedMessage());
}
@Override
public void onMalformedURLException(MalformedURLException e, Object state) {
tvRefreshResponse.setText("IN REFRESH MALFORMED URL \nException is "+ e.getLocalizedMessage());
}
@Override
public void onFacebookError(FacebookError e, Object state) {
tvRefreshResponse.setText("IN REFRESH ONFACEBOOK ERROR \nException is "+ e.getLocalizedMessage());
}
} //end RefreshListener
コードは完了します。つまり、リスナーの OnComplete が呼び出されますが、応答には新しいアクセス トークンまたは有効期限値が含まれていません。応答は...
{"id":"https:\/\/graph.facebook.com\/oauth\/access_token","shares":78,"comments":1}
同じ URL (英数字の現在のトークン値を持つ) を Web ブラウザーに入力すると、応答にはアクセス トークンが含まれます。
関連情報
Facebook の offline_access パーミッションは 2012 年 5 月 1 日に廃止されます
代わりに onResume() で extendsAccessTokenIfNeeded 関数を使用することはお勧めしません。私もそれで問題を抱えており、それが私がGraph APIトークンの更新を検討している理由です:-)
関連するスタック オーバーフローの質問
AndroidアプリでextendAccessTokenIfNeededを使用してFacebookトークンを拡張することは可能ですか? (私の質問)
5 月 1 日以降に廃止された後、offline_access はどのように機能しますか?
extendAccessToken を使用するためのアプリ シークレットの保護 (Java/Android)
関連する Facebook リンク