Ruby
Facebook
Notification
GraphAPI

RubyでGraph APIのNotificationを使ってFacebookに通知を送る方法(なるべく分かりやすく)

More than 1 year has passed since last update.


まずはじめに

とあるサービスで「Facebookでユーザーに通知を送りたいね。」となりました。

↓みたいなやつです。

Facebookのサンプル画像

これはFacebookからの通知ではなく、Facebookユーザーがアカウント連携しているwebサービスから送信可能な通知です。

しかも特別な権限をユーザーに求める必要はありません。最低限の権限で通知を送れます。

確かに、あのFacebookに自社から通知を送れるとなるとリテンションがかなり上がりそうです。

ネットを検索すると少ないながら、その方法をソースコードとともに紹介していただいているブログなどがありますが、API慣れしていないひよっこエンジニアである私はかなりハマってしまったので、改めて紹介しようと思います。


注意点

現在NotificationのAPIでは、web版のみにしか通知を送れません。

スマホアプリには送られない、ということです。


環境

言語: Ruby 2.3.1

Facebook API 2.5

今回はgemなどは使わずに、純粋なPOSTだけでおこないます。

また、事前にFacebookのAPIを利用したログイン認証のシステムが出来ている前提になります。


コード

app_access_tokenやuser_idはダミーです。

見ての通り、適切なURLにPOSTすれば通知が送れる簡単仕様です。

require 'net/https'

app_access_token = '1234567890123456 |fd987654ab1234d8e1b81491d7654321'

user_id = '123456789012345'

uri = URI.parse("https://graph.facebook.com/v2.5/#{user_id}/notifications?access_token=#{app_access_token}&href=/&template=hello,world!")

http = Net::HTTP.new(uri.host, uri.port)

http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

req = Net::HTTP::Post.new(uri.request_uri)

p req #確認用

res = http.request(req)

p res.body #確認用


結果

これによって送られるのが、以下のような通知

スクリーンショット 2018-02-26 14.11.12.png


解説


app_access_token

まずハマったのがapp_access_tokenでした。

GraphAPIを深く読み込まずに情報をあさり続けてると、どれが正解か分からなくなってしまいました。

というのもGraphAPIには「アクセストークン」と名のつくトークンが多いです。。。


  • ユーザーアクセストークン

  • アプリアクセストークン

  • ページアクセストークン

などなど。混乱してしまいました・・・。


正解

app_access_token=アプリID|app secret

https://developers.facebook.com にアクセスして自分のアプリのダッシュボードを開きます。

「設定」>「ベーシック」のアプリIDこれが|の左側になります。

「設定」>「ベーシック」にある、app secret|の右側になります。

↓のアプリIDとapp secretです。

スクリーンショット 2018-02-26 14.26.40.png


user_id

これはユーザーが自社サービスにログインした時に取得できます。

ユーザーとアプリごとに固有で、一度認証したらずっと固定です。DBに保存するとよいです。

Koalaというgemを利用して、fabebookログインを実装している場合、uidというkeyでresponseが返ってきてる思います。

雑ですが他のライブラリでも、Facebookログイン時のresponseでその他のユーザー情報と共に15桁の数列が返ってきてる場合は、それだと思います。

これがuser_idになります。


href

通知をクリックした時に表示したいページの相対パスになります。

例えば、https://qiita.com/trendを表示したい場合はhref=/trendと書きます。


template

通知に表示するメッセージ文言です。なんでもいいですが、長すぎるとカットされます。


最後に

拙い文章になりましたが、お読みいただきありがとうございます。

アクセストークンやユーザーIDなどをPOSTするだけで通知を送れるのは便利ですね。

体感だとあまり利用しているサービスは多くない気がします。個人的にはWantedlyをよく見かけます。

便利ですが、送りすぎはよくないです。


リファレンスをよく読み、用法用量を守ってPOSTしましょう。



参考

railsからfacebookにnotification APIで通知を送る