iPhoneアプリでは、ユーザーの端末にプッシュ通知を送ることができます。
このプッシュ通知ですが、アプリ毎に管理されているので、ユーザーの端末からアプリが消されていると、当然ながら、プッシュ通知は届かなくなります。アプリ側では、端末からアプリが消えているかを把握したいですよね。
今回はRailsで、Push通知関連を行うことができるapn_senderを用いた手法を紹介したいと思います。
■導入
$ vi Gemfile gem 'apn_sender', git: 'https://github.com/phuongnd08/apn_sender.git', branch: 'master' $ bundle install
※2013/11/11現在、 gem 'apn_sender'でインストールすると、新しいバージョンのapn_senderになり、Pushを送るメソッド名が変わっているので注意
■プッシュ通知を送るコード
今回は紹介しません。githubのREADMEを見てください。
https://github.com/phuongnd08/apn_sender
■削除したユーザーを取得するコード(feedback)
これも上記のgithubに載っていますが、こちらを紹介したいと思います。
●コード
※スクリプト名は何でも良いです。
$ vi ./script/apn_feedback_production.rb # encoding: utf-8 require 'apn' opts = {:full_cert_path => "/var/www/project_name/current/config/certs/apn_production.pem"} feedback = APN::Feedback.new(opts) #feedback = APN::Feedback.new() items = feedback.data # => Array of APN::FeedbackItem elements items.each do |item| p [item.token,item.timestamp].join(' ') # ... custom logic here end $ bundle exec rails r ./script/apn_feedback_production.rb -e production
上のコードでは、標準出力で、
p [item.token,item.timestamp].join(' ')
のように、端末の「device_token」と「AppleのAPNが端末からアプリが消されたと判断した日時」を返すようにしており、以下のような出力になります。
"devicetokendevicetokendevicetokendevicetokendevicetokendeviceto1 2013-11-10 22:14:32 +0900" "devicetokendevicetokendevicetokendevicetokendevicetokendeviceto2 2013-11-10 22:14:59 +0900" "devicetokendevicetokendevicetokendevicetokendevicetokendeviceto3 2013-11-10 22:26:44 +0900"
また、このFeedbackのScriptを1時間に1回実行して、出力を確認してみた結果、
上記のように、プッシュ通知を実行した20時30分直後の、21時、22時で多くのFeedbackが取れましたが、それ以降も少しずつFeedbackが取られ、
「AppleのAPNが端末からアプリが消されたと判断した日時」は、かなりばらつくようです。
紹介は以上になります。
Appleのプッシュ通知の詳細は、Local NotificationおよびPush Notificationプログラミングガイドを参考にしてください!