サーバーからデバイスに通知を送信する必要があるプロジェクトがあります。私はRuby on Railsを初めて使用するため、どのように、どこから始めればよいかわかりません(最初にテーブルを作成するか、その他)。apn_sender チュートリアルに従っていますが、機能せず、開始時に常にエラーが発生します。Rails 3 用の apn_sender を作成するための完全なチュートリアルはありますか?
ありがとう
サーバーからデバイスに通知を送信する必要があるプロジェクトがあります。私はRuby on Railsを初めて使用するため、どのように、どこから始めればよいかわかりません(最初にテーブルを作成するか、その他)。apn_sender チュートリアルに従っていますが、機能せず、開始時に常にエラーが発生します。Rails 3 用の apn_sender を作成するための完全なチュートリアルはありますか?
ありがとう
私も apn_sender の問題に取り組んできました。なぜなら、Apple プッシュ通知のサポートがかなりしっかりしているように見えるからです。しかし、プロジェクトは放棄され、現在は最新の 3 シリーズ レールに遅れをとっています。私は次のようにシステムを動作させました。
gem 'apn_sender', :require => 'apn'
gem 'daemons'
gem 'resque', '1.20.0'
gem 'resque-access_worker_from_job'
Resque 1.20 以降ではシグナル処理が変更されたため、古い 1.20.0 を使用する必要があります。Daemons は最初から要件であったはずですが、gem 仕様で明示的に指定されることはありませんでした。
#!/usr/bin/env ruby
# Daemons sets pwd to /, so we have to explicitly set RAILS_ROOT
RAILS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
require 'rubygems'
require 'apn'
require 'apn/sender_daemon'
APN::SenderDaemon.new(ARGV).daemonize
ここからこれを取得しました。apn_sender スクリプトが生成されない理由は、ジェネレーター スクリプトを 3 シリーズ レール用に更新する必要があるためです。
./script/apn_sender --environment=production --verbose start
ad_hoc バージョンとリリース バージョンの両方が実稼働証明書を使用しているため、環境を開始するときは、おそらく実稼働値が必要です。
この github のフォークにより、Rails 3 の問題の一部が修正されましたが、resque バージョンの問題は明示的に解決する必要があります。
この Web サイトは、デーモンをバイパスしてメッセージを送信する方法を示しています。彼はトークンを base64 でエンコードされた文字列として保存します。これは素晴らしくコンパクトです。apn_sender フレームワークのデバイス文字列の形式は、次のような形式の 16 進文字列ですdeadbeef 0a1b2cdf deadbeef 0a1b2cdf deadbeef 0a1b2cdf deadbeef 0a1b2cdf
。スペースはオプションです。
require 'base64'
ios_device_token = User.where(username: 'Cameron').first.ios_device_token
token = Base64.decode64(ios_device_token).unpack('H*').first.scan(/\w{8}/).join(' ')
notification = APN::Notification.new(token, { alert: 'Hello, World!', sound: true, badge: 99 })
sender = APN::Sender.new(verbose: true, environment: 'production')
sender.send_to_apple(notification)
# Unpacking code borrowed from http://github.com/jpoz/APNS/blob/master/lib/apns/core.rb
while bunch = socket.read(38) # Read data from the socket
f = bunch.strip.unpack('N1n1H140')
feedback << APN::FeedbackItem.new(Time.at(f[0]), f[2])
end
コードの 1 つのバージョンには 38 がなく、フィードバック サービスから不正なトークン文字列が返されました。
Ruby 開発を次のレベルに引き上げる計画がある場合は、RubyMineのような IDE も検討する必要があります。これにより、すべてが非常に簡単になります。