facebook-android-sdkを使った認証がGalaxy Nexusではうまく動かない
エミュレータ上で開発していたときにはうまく動いていたのですが、Galaxy Nexusで動かそうとすると、ログイン時のID/passwordを入れた後にこんなメッセージが表示されるページにリダイレクトされ、アプリ認証が完了しませんでした。
API Error Code: 11
API Error Description: This method is deprecated
Error Message: Display=wap dialogs have been deprecated. You can temporarily enable them by disabling the "july_2012" migration.
They will stop working permanently on July 1,2012.
facebook-android-sdkでは、ログインや認証にWebViewを使っているようで、そのときのuser-agentはデフォルトブラウザのものになっている(はず)ので、それが原因かなあ、と。
ちなみにGalaxy Nexusのuser-agentは以下になります。
Mozilla/5.0 (Linux; U; Android 4.0.2; ja-jp; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
実際に、以下のURLにアクセスしてみたところ、Windowsにインストールしているブラウザ、それにAndroid上のGoogle Chrome Betaや、Galaxy Nexus以外のデフォルトブラウザではちゃんとページに遷移するのですが、Galaxy Nexusのデフォルトブラウザだけエラーページに飛ばされます。
https://m.facebook.com/dialog/permissions.request?_path=permissions.request&app_id=[**app_id**]&redirect_uri=fbconnect%3A%2F%2Fsuccess&display=touch&type=user_agent&perms=read_stream&fbconnect=1&from_login=1&client_id=[**client_id**]&refsrc=http%3A%2F%2Fm.facebook.com%2Flogin.php&refid=9&_rdr
user-agentに”Galaxy Nexus”という文字列が含まれているとこの問題が出るようですので、それを書き換えれば一時しのぎにはなります。例えばこんなかんじでしょうか。
なお、facebookサービスはこれ以外の制御もuser-agentで行っているふうに見えますので、なるべくオリジナルのuser-agent文字列を保ったままにして、不具合の有る場合だけピンポイントで対処するのが良策かと思います。
[追記]公式Facebookアプリがインストールされている端末だと、facebook-android-sdkのコードからではなく、公式Facebookアプリを使用してログインしようとするようになり、そちらでこのエラーが発生してしまいます。従ってSSO無効化対応も行う必要があります。
それにしても、FacebookのAPIの説明など、日本語で解説されているサイトは情報が古いことが多いので、ちゃんと公式サイトを見た方が良いと1日やっただけでも感じました。ここで書いた情報もすぐに古くなることでしょう…
« OracleのJOINも遅い | トップページ | FacebookのFeedページから削除しても消えない場合がある? »
この記事へのコメントは終了しました。
« OracleのJOINも遅い | トップページ | FacebookのFeedページから削除しても消えない場合がある? »
コメント