これは多くのFacebook/Android開発者に影響を与える可能性があると思いますが、それでもこのトピックについてはそれほど多くの議論がないようです...
私の質問
extendAccessTokenIfNeeded関数を使用してトークンを正常に更新した人はいますか?成功した場合、デバイス(またはエミュレーター)はどのバージョンで実行されていましたか?
バックグラウンド
Facebookからoffline_access権限が2012年5月1日から廃止されるというメールを受け取り、Facebookは最新のSDKへのアップグレードを推奨しました。罰金。
最新のSDKにアップグレードし、公式のFacebookアプリがデバイスにインストールされ、(最終的には!)シングルサインオンは正常に機能しているようです。60日間のトークンを受け取っていますが、これも問題ありません。
extendAccessTokenIfNeeded(Context context、ServiceListener serviceListener)を使用しようとすると、問題が発生しました。有効期限を長くするためにトークンを更新することができませんでした。試行の合間に24時間待ちましたが、トークンが更新されませんでした。更新されたトークンを取得する唯一の方法は、ログアウトしてログインすることです。これは、サンプルプロジェクト「Hackbook」を使用したときにも発生しました。
最も明白な答えは、私が何か間違ったことをしているということですが、バグレポートがFacebookに送信され、「shouldExtendAccessTokenはほとんどの場合falseを返します」と述べています。このレポートには、優先度の高い「ウィッシュリスト」が与えられています。
extendAccessTokenAsNeeded()の代替
Facebookのドキュメントでは、 offline_accessの非推奨トークンについて、GraphAPIを使用して拡張できます。ただし、これには「アプリシークレット」をURLに含める必要があるという欠点があります。利点は、ユーザーが公式のFacebookアプリをデバイスにインストールする必要がないことです。
その他のアイデアと懸念
Facebook.javaのextendAccessTokenIfNeeded関数を常にtrueを返すように変更することで、一度更新したと思います。(私が「考える」と言う理由は、それが行動を繰り返さないためであり、次の成功のチャンスが来るまでさらに24時間待たなければならないと思うからです)
HackbookではAndroidHttpClientをインポートする必要があることに気付きました。これは、API8以降でのみ使用できます。これは、Facebook SSO(特にトークンの更新)がAPI 8以降を搭載したデバイスでのみ機能する可能性が高いことを意味しますか?
SDKに含まれているFacebook.apkはかなり古いものです。おそらくこれが、API8以降を実行しているエミュレーターでトークンが更新されない理由ですか?
そして最後に、これはすべて、公式のFacebookアプリをインストールしている人々にのみ関係します!公式のFacebookアプリがない人のために別の方法を完了する必要があります(今すぐ文句を言うだけです!)
関連するFacebookリンク
関連するスタックオーバーフローの質問
Facebookの60日間のアクセストークンと非推奨のOffline_Access