まずはじめに
とあるサービスで「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 #確認用
結果
これによって送られるのが、以下のような通知
解説
app_access_token
まずハマったのがapp_access_token
でした。
GraphAPIを深く読み込まずに情報をあさり続けてると、どれが正解か分からなくなってしまいました。
というのもGraphAPIには「アクセストークン」と名のつくトークンが多いです。。。
- ユーザーアクセストークン
- アプリアクセストークン
- ページアクセストークン
などなど。混乱してしまいました・・・。
正解
app_access_token=アプリID|app secret
https://developers.facebook.com にアクセスして自分のアプリのダッシュボードを開きます。
「設定」>「ベーシック」のアプリID
これが|
の左側になります。
「設定」>「ベーシック」にある、app secret
が|
の右側になります。
↓のアプリIDとapp secretです。
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しましょう。