4

サーバーからデバイスに通知を送信する必要があるプロジェクトがあります。私はRuby on Railsを初めて使用するため、どのように、どこから始めればよいかわかりません(最初にテーブルを作成するか、その他)。apn_sender チュートリアルに従っていますが、機能せず、開始時に常にエラーが発生します。Rails 3 用の apn_sender を作成するための完全なチュートリアルはありますか?

ありがとう

4

1 に答える 1

4

Rails 3 と apn_sender

私も apn_sender の問題に取り組んできました。なぜなら、Apple プッシュ通知のサポートがかなりしっかりしているように見えるからです。しかし、プロジェクトは放棄され、現在は最新の 3 シリーズ レールに遅れをとっています。私は次のようにシステムを動作させました。

Gemfile

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 仕様で明示的に指定されることはありませんでした。

スクリプト/apn_sender

#!/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)

feedback.rb ファイルが最新であることを確認してください

# 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 がなく、フィードバック サービスから不正なトークン文字列が返されました。

JetBrains による RubyMine

Ruby 開発を次のレベルに引き上げる計画がある場合は、RubyMineのような IDE も検討する必要があります。これにより、すべてが非常に簡単になります。

于 2013-04-20T19:48:16.723 に答える