【问题标题】:apn_sender and Rails 3apn_sender 和 Rails 3
【发布时间】:2012-12-06 15:24:50
【问题描述】:

我有一个项目需要从服务器向设备发送通知。我不知道如何以及从哪里开始(首先创建表或其他),因为我是 Ruby on Rails 的新手。我已经按照 apn_sender 教程进行操作,但它不起作用并且总是在开始时出错。有没有为 Rails 3 创建 apn_sender 的完整教程?

谢谢

【问题讨论】:

  • 很抱歉回复晚了,但我已经成功并发布了一个教程作为答案。
  • 我已经完成了几个月的任务。哈哈 。顺便说一句,感谢您回答我的问题。真的很感激:)

标签: ios ruby-on-rails ruby-on-rails-3 apple-push-notifications resque


【解决方案1】:

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'

在 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

here.检索到这个没有生成apn_sender脚本的原因是因为生成器脚本需要为3系列rails更新。

启动发送者

./script/apn_sender --environment=production --verbose start

在启动环境时,生产值可能就是您想要的,因为 ad_hoc 和发布版本都使用生产证书。

github上的This fork已经修正了rails 3的一些问题,但是resque版本问题还是需要明确解决。

手动测试

This website 展示了如何绕过守护进程发送消息。他将令牌存储为 base64 编码的字符串,既美观又紧凑。 apn_sender 框架中设备字符串的格式是一个十六进制字符串,格式如下: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,因为它让一切变得如此简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2011-03-18
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多