- 更新日: 2016年8月1日
- Rails
Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
FacebookグラフAPIの v2.0 が2016/08/08で deprecation(非推奨)になるので、v2.1 かそれより新しい API バージョンにアップグレードして下さいね、というメールが Facebook から届きました。Rails で Devise + OmniAuth + omniauth-facebook で、Facebook による OAuth 認証を実装しているアプリケーションです。使っている gem の omniauth および omniauth-facebook をアップデートし、また Facebook の開発者ダッシュボードのページで API Version Upgrades の設定を行い、新しいバージョンの API 呼び出しを行うように修正しました。
Rails4 で Devise と OmniAuth で、Twitter/Facebook のOAuth認証と通常フォームでの認証を併用して実装 | EasyRamble
Rails4 にて Devise でユーザー登録・ログイン認証・認可の機能を追加 | EasyRamble
— 環境 —
Rails 4.2
Ruby 2.3
omniauth, omniauth-facebook の gem を更新
以下ページあたりを読むと分かるが、以前の omniauth-facebook はバージョン指定なしの API エンドポイント URL を使っている。
Bind API version with omniauth-facebook version – Issue #190 – mkdynamic/omniauth-facebook – GitHub
今日時点(2016/08/01)での最新の omniauth-facebook(4.0.0)だと、エンドポイント URL が v2.6 に指定されています。
omniauth-facebook/facebook.rb at master ?? mkdynamic/omniauth-facebook – GitHub
ということで、まずは omniauth-facebook 及び omniauth の gem をアップデートしました。適宜 git でブランチを切って作業。
Gemfile
1 2 |
gem "omniauth" gem "omniauth-facebook" |
gem をアップデート。
1 2 3 |
$ bundle update omniauth-facebook |
これで omniauth (1.3.1), omniauth-facebook (4.0.0)と、最新バージョンにアップデートされた。
アプリケーション側のソースコード修正は、自分の今回の環境では必要ありませんでした。Facebook アカウント情報から取得したい情報が、デフォルトとは別途にある場合には、config/initializers/omniauth.rb で設定を行う。
config/initializers/omniauth.rb
1 2 3 4 |
Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, ENV['APP_ID'], ENV['APP_SECRET'], scope: 'email,user_birthday,read_stream', display: 'popup' end |
詳しくは omniauth-facebook の README に書いてあります。
GitHub – mkdynamic/omniauth-facebook: Facebook OAuth2 Strategy for OmniAuth
必要であれば、適宜ソースコードの修正を行います。
Facebook 開発者ページで API Version Upgrades の設定
続いて Facebook 開発者ページでの設定を行う。前提として development, production 用と各々別の App ID でアプリケーションを登録しておいたほうが良いです。以下のページに移動。
1. まずは development 用(開発環境)の App ID のアプリケーションを選択
2. ダッシュボードの設定 – 詳細設定をクリック
3. API Version Upgrades の Upgrade All Calls を「はい」に変更して保存
以上の変更を行った後に、ダッシュボードTOPに戻り、APIバージョンが「v2.1」となっていることを確認します。
その後、development, staging 環境等での動作テストや RSpec テスト等が全て通ることを確認する。テストが全てOKであれば、production 環境にデプロイ後、Facebook 開発者ダッシュボードで production 用 App ID のアプリケーションを選択して、上記と同様の手順を行います。
Google Chrome のデベロッパーツールで、omniauth-facebook による OAuth ログインのための Facebook API 呼び出しが、以下の URL リクエストとなっていることを確認しました。
1 2 3 |
https://www.facebook.com/v2.6/dialog/oauth?client_id=... |
ちなみに、Facebook Graph API の最新バージョンは v2.7 です。omniauth-facebook で v2.7 を使いたい場合は、以下のように設定すれば大丈夫かと思う。これも README に書いてあります。
config/initializers/omniauth.rb
1 2 3 4 5 6 7 |
use OmniAuth::Builder do provider :facebook, ENV['APP_ID'], ENV['APP_SECRET'], client_options: { site: 'https://graph.facebook.com/v2.7', authorize_url: "https://www.facebook.com/v2.7/dialog/oauth" } end |
以上で Facebook API バージョンのアップグレード作業は終了。
Facebook から届いたメール内容 ‘New Developer Alert for YourApp’
Facebook から6月、7月に各々メールが2通届きまして、それぞれ以下の内容でした。念の為に訳とともに掲載しておきます。
YourApp has been making recent API calls to Graph API v2.0, which will reach the end of the 2-year deprecation window on Monday, August 8, 2016. Please migrate all calls to v2.1 or higher in order to avoid potential broken experiences.We recommend using our new Graph API Upgrade Tool to see which of your calls are affected by this change as well as any replacement calls in newer versions. You can also use our changelog to see the full list of changes.
You can view this and other Developer Notifications related to your app, YourApp, in the App Dashboard.
訳)YourApp(あなたのアプリケーション)が最近 Graph API v2.0 への呼び出しを行っています。Graph API v2.0 は、2016/08/08(月曜日)に2年経過による非推奨となります。将来的な不具合を避けるために、全ての API 呼び出しを v2.1 またはそれより新しいものに移行してください。
我々は Graph API のアップグレードツールを使うことを推奨します。このツールを使うことで、あなたのどの API 呼び出しが、新しいバージョンへの置き換えと同様にこのアップグレードによって、影響を受けるかが分かります。また我々の全ての変更リストを確認するためにチェンジログを見ることもできます。
App ダッシュボードで、このメッセージ及びあなたのアプリケーション YourApp に関係のある他の開発者向け通知を確認できます。
To prepare for your app migrating to v2.1, we have released a new feature under API Version Upgrades in your app dashboard that helps you to upgrade your app before the August 8, 2016 deadline. This will prevent you from getting more notices like these, and automatically upgrades all of your app’s usage to Graph API v2.1.The oldest supported version of the Graph API for YourApp is v2.0, which will be deprecated on Monday, August 8, 2016. If your app has been making recent API calls against v2.0, please migrate all calls to v2.1 or higher in order to avoid potential broken experiences.
We recommend using our new Graph API Upgrade Tool to see which of your calls are affected by this change as well as any replacement calls in newer versions. You can also use our changelog to see the full list of changes.
We encourage you to ask questions & give feedback in the Facebook Developer Community group, which is supported by our engineers who are ready to help.
You can view this and other Developer Notifications related to your app, YourApp, in the App Dashboard.
訳)API v2.1 への移行に準備するために、我々は API バージョンのアップグレードにおける特徴を公開しました。あなたの App ダッシュボードで確認でき、これはあなたが2016/08/08の締切前にアップグレードを行うのを助けます。これは、このような通知や API v2.1 への自動的なアップグレードを防ぎます。
YourApp の Graph API でサポートされるもっとも古いバージョンは v2.0 です。これは2016/08/08(月曜日)に非推奨となります。もしあなたのアプリケーションが v2.0 への呼び出しを行っているのであれば、将来的な不具合を避けるために、全ての API 呼び出しを v2.1 またはそれより新しいものに移行してください。
我々は Graph API のアップグレードツールを使うことを推奨します。このツールを使うことで、あなたのどの API 呼び出しが、新しいバージョンへの置き換えと同様にこのアップグレードによって、影響を受けるかが分かります。また我々の全ての変更リストを確認するためにチェンジログを見ることもできます。
Facebook 開発者コミュニティのグループで質問やフィードバックをおすすめします。このグループは我々のエンジニアにサポートされています。
App ダッシュボードで、このメッセージ及びあなたのアプリケーション YourApp に関係のある他の開発者向け通知を確認できます。
- – 参考リンク –
- FACEBOOK API更新まとめ(Railsアプリ/omniauth) – Qiita
- Facebook Login Provider Will Automatically Update to v2.1 on August 8th, 2016 – Janrain Support
- API Upgrade Tool – 開発者向けFacebook
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- window.NREUMがHTMLヘッダー部に自動挿入されるのはNew Relic用
Leave Your Message!