gpt4 book ai didi

ruby-on-rails - GCM + XMPP + 上游消息 + Ruby on Rails

转载 作者:行者123 更新时间:2023-12-03 16:19:29 24 4
gpt4 key购买 nike

用例:Android 设备无法直接联系 Ruby On Rails 服务器(它在防火墙后面),我也无法通过 Internet 服务器直接接收请求。我需要有内部 Rails 服务器来从 Android 设备检索消息,而不是池策略,我已经看到 GCM + XMPP 非常适合。

但是,我找不到任何关于如何在 Ruby/Rails 中编写此类场景的信息。

我怎样才能不仅从我的 Ruby On Rails 服务器发送推送通知,而且接收 Upstream Messages from GCM (Google 云消息传递)将我的 Ruby On Rails 服务器连接到 Google CCS 服务器?

  • 对于Upstream,消息源自Android设备,这不是问题的范围
  • 我知道我必须为此使用 XMPP
  • 我知道有 ruby​​ gem 可以将推送通知从 rails 服务器发送到 Android 设备,但它们都是基于 HTTP 的(至少,我所看到的)并且不能满足我的需要
  • 我知道 Rails 服务器会保持与 Google 的 CCS 服务器(GCM 云连接服务器)的连接打开 (XMPP) 以接收上游消息
  • 我知道 XMPP4r gem,但找不到足以将它与 Rails 集成的代码示例

感谢任何帮助。


记录(或者我到目前为止所做的...)

  • 2015 年 17 月 12 日:尝试使用 this post as a starting point .我在 google console 上创建了一个项目并添加了服务器 API key ,还启用了 API Google Cloud Messaging for Android。我测试了with this code (基于 this blog post),到目前为止,它执行时没有错误:

    require 'stella_gcm_xmpp'
    id = '[project_number]@gcm.googleapis.com'
    password = [API_KEY]

    gcm = StellaGcmXmpp.new(id, password, true, true)
    gcm.connect
    gcm.callback


上游消息测试

客户端(超出问题范围,为了完整起见):

$ ionic start gcm-test
$ ionic platform add android
$ ionic plugin install cordova-plugin-chrome-apps-gcm
$ ionic run android

open Chrome-Dev-Tools console:

> chrome.gcm.register( ['2195xxxxx718'], function(regId) { console.log('regId:' + regId); } )
> regId:APA91bG_5QIpVrBvuooVp7xO...KiVt3ozcf2HKIkHq_42UAPAU4w
> chrome.gcm.send( {destinationId: '2195xxxxx718@gcm.googleapis.com', messageId: '111', timeToLive: 10, data: {my: 'my message'} }, function(messageId) { console.log(messageId); } )
> 8

服务器端

在 Ruby (irb) 控制台上检查上游消息的接收:

D, [2015-12-18T10:09:05.664007 #4019] DEBUG -- : RECEIVED:
<message from='devices@gcm.googleapis.com' to='2195xxxxx718@gcm.googleapis.com' type='normal'><gcm xmlns='google:mobile:data'>{"data":{"my":"my message"},"time_to_live":86400,"from":"APA91bG_5QIpVrBvuooVp7xOos_EYzA4XNH0CeGzVudbJXxW4avE4NpZO84Q3mC2I-FKAGMTfFdGumSGmkUYViZVwp5gbbC38NDS4GWyaIsABJfhZd3J5KMJBLKgah6lC4LwkbLHKiVt3ozcf2HKIkHq_42UAPAU4w","message_id":"8","category":"com.ionicframework.gcmtest908063"}</gcm></message>
D, [2015-12-18T10:09:05.665623 #4019] DEBUG -- : PROCESSING:
<message from='devices@gcm.googleapis.com' to='2195xxxxx718@gcm.googleapis.com' type='normal' xmlns='jabber:client'><gcm xmlns='google:mobile:data'>{"data":{"my":"my message"},"time_to_live":86400,"from":"APA91bG_5QIpVrBvuooVp7xOos_EYzA4XNH0CeGzVudbJXxW4avE4NpZO84Q3mC2I-FKAGMTfFdGumSGmkUYViZVwp5gbbC38NDS4GWyaIsABJfhZd3J5KMJBLKgah6lC4LwkbLHKiVt3ozcf2HKIkHq_42UAPAU4w","message_id":"8","category":"com.ionicframework.gcmtest908063"}</gcm></message> (Jabber::Message)
D, [2015-12-18T10:09:05.665760 #4019] DEBUG -- : TRYING stanzacbs...
D, [2015-12-18T10:09:05.665859 #4019] DEBUG -- : TRYING message/iq/presence/cbs...
[2015-12-18 10:09:05] GCM send Failed id: 8 error:

*The 'GCM send Failed id: 8 error:' occurs not because of an error, but because message-type is empty*

下游消息测试(超出问题范围,为了完整起见)

客户端

chrome.gcm.onMessage.addListener(function(msg) { console.log('msg: ' + JSON.stringify(msg)) } )

服务器端

gcm.send 'APA91bG_5QIpVrBvuooVp7x...kHq_42UAPAU4w', '999', { msg: 'teste' }

客户端

msg: {"data":{"msg":"teste"}}

最佳答案

CCS(GCM 的 XMPP 服务器)将位于您的 Android 客户端和您的 ruby​​ 服务器之间。一旦您的 ruby​​ 服务器可以建立到 CCS 的 XMPP 连接,那么就没有什么特别的事情可以从客户端传递消息到服务器,反之亦然。 ruby 服务器将负责向 CCS 发送消息和从 CCS 接收消息。

关于ruby-on-rails - GCM + XMPP + 上游消息 + Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com