在Android上使用XMPP进行用户推送通知 - 有没有方法可以针对特定的目标,使它们不会发送到Google Talk等地方。

12

我希望使用XMPP向客户端推送数据,这将转化为用户的通知,并计划使用他们的Google ID登录我的应用程序。据我了解,XMPP是一条直接发送到地址的简单消息,但我希望客户端能够将其作为指令并将其转换为游戏状态信息。

如果用户在Google聊天中收到一堆命令元组或十六进制垃圾,那将非常令人沮丧!我是否误解了所有这些工作方式?


1
如果您运行自己的XMPP服务器,您将不需要尝试获取他们的Google凭据,并且您将不会遇到您在此问题中概述的问题。 - CommonsWare
1
我正在使用应用程序引擎框架。 - Hortinstein
2个回答

16

JIDs(Jabber / XMPP IDs,因此也包括Google Talk IDs)有多种形式。

第一种是“bare JID”,例如:user@example.com
其次是“full JID”,例如:user@example.com/xyz123,其中xyz123被称为resource(资源)。

一个用户可以同时从多个客户端登录到他们的XMPP帐户,只要每个客户端使用唯一的资源即可。对于Google Talk而言,通常服务器会分配资源。

当你与某人在XMPP上交谈时,通常使用他们的bare JID来寻址消息——你不需要关心消息传递到哪个客户端;该人的服务器根据其可用性等将其定向到相应的客户端。

但是你也可以直接寻址到一个full JID。这就是你想做的,这样只有user@example.com/my-game-some-unique-ID才能接收你特定于游戏的消息。

我不知道Google App Engine API是否提供了这种灵活性 :)


另一种选择是发送不同的消息类型——如果GAE允许的话。XMPP是可扩展的,这意味着你不必向最终用户发送纯文本的<message/>标准格式的XML。你可以在其中嵌入一个专门的负载,如<game/>子元素,因为常规即时消息客户端不知道如何解析你的<game/>元素,它们将不会向用户显示任何信息。只有你的游戏客户端才能解析和理解此信息。


1
非常棒的答案,我真的很感激。我之前对这两个问题都没有任何想法。再次感谢! - Hortinstein
抱歉晚点才留言,我在测试这个功能时发现 Google Talk 的表现不太符合我的预期。 我正在向 user@gmail.com/myownresource 发送 XMPP 消息,尽管这是一个自定义的资源,但 Google Talk 仍然可以接收到我的消息。据我所知,它本不应该这样,对吧?这是我的问题链接:http://stackoverflow.com/questions/8524263/google-talk-receiving-messages-with-different-jid-resource - Rafaesp

1

“Xtify有一个开箱即用的解决方案,运行XMPP的变体。然后,您可以使用他们的Web服务将通知、自定义数据和意图推送到设备和应用程序中。我一直在使用他们更标准的解决方案(推送和管理平台),但推送API也可以免费使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接