Ruby on rails GCM&x2B;XMPP&x2B;上游消息+;RubyonRails

Ruby on rails GCM&x2B;XMPP&x2B;上游消息+;RubyonRails,ruby-on-rails,google-cloud-messaging,xmpp,xmpp4r,chrome-gcm,Ruby On Rails,Google Cloud Messaging,Xmpp,Xmpp4r,Chrome Gcm,用例:Android设备无法直接联系Ruby On Rails服务器(它位于防火墙后面),我也无法使用Internet服务器直接接收请求。我需要有一个内部Rails服务器来从Android设备检索消息,而不是一个池策略,我已经看到GCM+XMPP将非常适合 但是,我找不到任何关于如何在Ruby/Rails中编写这种场景的信息 我如何将我的Ruby On Rails服务器连接到Google CCS服务器? 对于上游,消息来自安卓设备,这不是问题的范围 我知道我必须为此使用XMPP 我知道有rub

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

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

我如何将我的Ruby On Rails服务器连接到Google CCS服务器?

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


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

  • 15年12月17日: 尝试使用。我已经在上创建了一个项目并添加了一个服务器API密钥,还启用了API
    Google Cloud Messaging for Android
    。我已经测试过(基于,到目前为止,它执行时没有错误:

    require 'stella_gcm_xmpp'
    id = '[project_number]@gcm.googleapis.com'
    password = [API_KEY]
    
    gcm = StellaGcmXmpp.new(id, password, true, true)
    gcm.connect
    gcm.callback
    


上行消息测试

客户端(出于完整性考虑,超出问题范围):

服务器端

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

调试--:收到: {“数据”:{“我的”:“我的消息”},“时间到现场”:86400,“发件人”:“APA91bG”5QIpVrBvuooVp7xOos"EYZA4xNH0EGZVBJXXW4AVE4NPZO84Q3MC2-FKAGMTFFGUMKUYVIZVWP5GBBC38NDS4GWYAISABJFHZD3J5KMBLKGAH6LWKBLKLHKIVT3OZCF2HKIKKHQ”;“消息id:“8”,“类别”:“com.ionicframework.gcest908063”} D、 [2015-12-18T10:09:05.665623#4019]调试--:处理: {“数据”:{“我的”:“我的消息”},“时间到现场”:86400,“发件人”:“APA91bG”5QIpVrBvuooVp7xOos_EYZA4xNH0EGZVUDBJXXW4AVE4NPZO84Q3MC2I-FKAGMTFFGUMKUYVIZVWP5GBBC38NDS4GWYAISABJFHZD3J5KBLKGAH6LWKBLKLHKIVT3OZCF2HKKIKKIKK4W”,“消息id”:“8”,“类别”:“com.ionicframework.gcmt908063”(Jabber::消息) D、 [2015-12-18T10:09:05.665760#4019]调试--:尝试诗节。。。 D、 [2015-12-18T10:09:05.665859#4019]调试--:尝试消息/iq/presence/cbs。。。 [2015-12-18 10:09:05]GCM发送失败id:8错误: *发生“GCM发送失败id:8错误:”不是因为错误,而是因为消息类型为空*
下游消息测试(出于完整性考虑,超出问题范围)

客户端

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

服务器端

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

客户端

msg:{“数据”:{“msg”:“teste”}
CCS(GCM的XMPP服务器)将位于您的Android客户端和ruby服务器之间。一旦您的ruby服务器可以建立到CCS的XMPP连接,那么从客户端到服务器以及从客户端到服务器的传递消息就没有什么特别的事情了。ruby服务器将负责向CCS发送和接收消息。

当然。但是什么是gems呢您是否已将代码整合到一起,以获得Rails的有效解决方案?
$ 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
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*