apn_sender和Rails 3

我有一个项目需要从服务器发送通知到设备。 我不知道如何以及从何处开始(先创建表或其他),因为我是Ruby on Rails的新手。 我遵循apn_sender教程,但它不起作用,并且在启动时总是出错。 有没有为Rails 3创建apn_sender的完整教程?

谢谢

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' 

在1.20之后Resque中的信号处理发生了变化,因此您必须使用较旧的1.20.0。 守护进程应该一直是一个要求,但从未在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上的这个fork已经纠正了一些rails 3问题,但resque版本问题仍然需要明确解决。

手动测试

该网站显示了如何绕过守护进程发送消息。 他将令牌存储为base64编码的字符串,这很好而且紧凑。 apn_sender框架中设备字符串的格式是一个hex字符串,格式如下: 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 

一个版本的代码缺少38,导致从反馈服务返回错误的令牌字符串

JetBrains的RubyMine

如果您计划将Ruby开发提升到新的水平,您还应该考虑像RubyMine这样的IDE,因为它使一切变得如此简单。