使用 Urban AirShip 和 Rails 3 for iphone 推送通知
Posted
技术标签:
【中文标题】使用 Urban AirShip 和 Rails 3 for iphone 推送通知【英文标题】:Push notification using Urban AirShip and Rails 3 for iphone 【发布时间】:2011-10-01 03:18:52 【问题描述】:使用 Rails 3 网络应用程序通过 Urban AirShip 发送推送通知的最佳方式是什么?
来自 Urban Airship 文档:
到 /api/push/broadcast/ 的 HTTP POST 将给定的通知发送给所有人 注册的设备令牌 应用。有效载荷是 JSON 使用内容类型应用程序/json, 采用这种结构:
"aps":
"badge": 15,
"alert": "Hello from Urban Airship!",
"sound": "cat.caf"
,
"exclude_tokens": [
"device token you want to skip",
"another device token you want to skip"
]
我真的不知道从哪里开始!
【问题讨论】:
拜托,谁给了我“-1”可以解释一下他为什么这样做?会更有建设性 好吧,我猜你明白了,因为你的问题没有显示任何研究工作。任何关于 Rails、JSON、Urban Airship 和 POST 组合的 Google 查询都会为您提供很多起点。 但是我在网上找东西的时间已经到了!而且没有什么用处。好吧,如果 t 就像做谷歌搜索一样简单......为什么没有人回答? 普通老兄。我第一枪就进去了。确保也搜索添加 github 关键字。 【参考方案1】:更好的方法是使用UrbanAirship Groupon version。他们的文档非常清楚地指定了每一件事,并且代码会更整洁。在我的应用程序中工作和测试。
从自述文件中,(还有一些 cmets 和所有):-
注意:如果您使用的是 Ruby 1.8,您还应该安装 system_timer gem 以获得更可靠的超时行为。有关更多信息,请参阅http://ph7spot.com/musings/system-timer。黄芩
gem install system_timer
安装
gem install urbanairship
# or specify in your gem file
gem "urbanairship"
配置在初始化目录中定义所有这些,然后确保你重新启动你的应用程序。
Urbanairship.application_key = 'application-key'
Urbanairship.application_secret = 'application-secret'
Urbanairship.master_secret = 'master-secret'
Urbanairship.logger = Rails.logger
Urbanairship.request_timeout = 5 # default
用法
注册设备令牌
Urbanairship.register_device 'DEVICE-TOKEN' # => true
注销设备令牌
Urbanairship.unregister_device 'DEVICE-TOKEN' # => true
发送推送通知(对于即时交付删除 schedule_for 属性)
notification =
:schedule_for => 1.hour.from_now,
:device_tokens => ['DEVICE-TOKEN-ONE', 'DEVICE-TOKEN-TWO'],
:aps => :alert => 'You have a new message!', :badge => 1
Urbanairship.push notification # => true
批量推送通知发送(对于即时交付删除 schedule_for 属性)
notifications = [
:schedule_for => 1.hour.from_now,
:device_tokens => ['DEVICE-TOKEN-ONE', 'DEVICE-TOKEN-TWO'],
:aps => :alert => 'You have a new message!', :badge => 1
,
:schedule_for => 3.hours.from_now,
:device_tokens => ['DEVICE-TOKEN-THREE'],
:aps => :alert => 'You have a new message!', :badge => 1
]
Urbanairship.batch_push notifications # => true
发送广播通知 Urbanairship 允许您向您的应用程序的所有活动注册设备令牌发送广播通知。(对于即时交付删除 schedule_for 属性)
notification =
:schedule_for => 1.hour.from_now,
:aps => :alert => 'Important announcement!', :badge => 1
Urbanairship.broadcast_push notification # => true
【讨论】:
出色的答案.. :) 解释得很好:)【参考方案2】:看看这个例子:
https://github.com/bhedana/urbanairship_on_rails
它是从Urban Airship support site链接的
【讨论】:
好的,谢谢你,但我已经试过了,当我启动我的服务器(rails s)时,它会抛出以下错误:“/Users/abramo/.rvm/gems/ruby-1.9.2 -p180/gems/urbanairship_on_rails-0.0.1/lib/urbanairship_on_rails/models/apn/broadcast_notification.rb:18:in `好的,这是从 ROR 控制器发送城市飞艇广播的简单方法:
require 'net/http'
require 'net/https'
require 'open-uri'
app_key = 'JJqr...'
app_secret = 'lAu7...'
master_secret = 'K81P...'
payload =
"aps" => "badge" => "0", "alert" => "My own message", "sound" => ""
.to_json
full_path = 'https://go.urbanairship.com/api/push/broadcast/'
url = URI.parse(full_path)
req = Net::HTTP::Post.new(url.path, initheader = 'Content-Type' =>'application/json')
req.body = payload
req.basic_auth app_key, master_secret
con = Net::HTTP.new(url.host, url.port)
con.use_ssl = true
r = con.start |http| http.request(req)
logger.info "\n\n##############\n\n " + "Resonse body: " + r.body + " \n\n##############\n\n"
干杯!
【讨论】:
为什么这么糟糕?顺便说一句,我将您的答案标记为正确的答案! 虽然这是 /terrible/ 的代码,但它似乎是通过代理获取请求路由的唯一方法。【参考方案4】:在 Rails 4.2.x 和 Ruby 2.3.x 中,我使用的是“urbanairship”gem,最好参考最新的文档here。
发送到ios的例子:
def deliver_push_notification recipient_uuid, message
ua = Urbanairship
client = ua::Client.new(key: ENV["URBAN_AIRSHIP_APP_KEY"], secret: ENV["URBAN_AIRSHIP_MASTER_SECRET"])
p = client.create_push
p.audience = ua.ios_channel(recipient_uuid)
p.notification = ua.notification(ios: ua.ios(alert: message))
p.device_types = ua.device_types(["ios"])
p.send_push
end
【讨论】:
以上是关于使用 Urban AirShip 和 Rails 3 for iphone 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Urban AirShip (Swift) 获取 appDelegate