我过去曾在这种情况下使用PubNub 取得成功。我在构建Mote.io 时使用了类似的技术。
我一直认为手机无法轻松实现点对点连接是愚蠢的,但您可以在中间模拟这种与第三方的通信。使用 PubNub 之类的托管服务的优势在于它可以在 Wifi 和蜂窝网络上运行,并且能够处理连接不佳或掉线的问题。
Java SDK
您可以使用PubNub Android SDK for android 订阅和发布到 PubNub 网络上的频道。所有的网络都得到了照顾,您唯一关心的是渠道和消息。
以下示例取自here找到的Android SDK教程。
订阅
这就是乐趣的开始!如果我们想从一个频道接收消息,我们需要订阅一个频道。为此,我们需要做的就是使用 subscribe() 方法并提供一个频道名称。我们将使用 hello_world 作为频道名称。
我们还需要定义一个回调对象,它将作为参数传递给 subscribe() 方法。回调对象的方法将在消息接收、错误、连接、断开连接、重新连接等事件上调用:
try {
pubnub.subscribe("hello_world", new Callback() {
@Override
public void connectCallback(String channel, Object message) {
Log.d("PUBNUB","SUBSCRIBE : CONNECT on channel:" + channel
+ " : " + message.getClass() + " : "
+ message.toString());
}
@Override
public void disconnectCallback(String channel, Object message) {
Log.d("PUBNUB","SUBSCRIBE : DISCONNECT on channel:" + channel
+ " : " + message.getClass() + " : "
+ message.toString());
}
public void reconnectCallback(String channel, Object message) {
Log.d("PUBNUB","SUBSCRIBE : RECONNECT on channel:" + channel
+ " : " + message.getClass() + " : "
+ message.toString());
}
@Override
public void successCallback(String channel, Object message) {
Log.d("PUBNUB","SUBSCRIBE : " + channel + " : "
+ message.getClass() + " : " + message.toString());
}
@Override
public void errorCallback(String channel, PubnubError error) {
Log.d("PUBNUB","SUBSCRIBE : ERROR on channel " + channel
+ " : " + error.toString());
}
}
);
} catch (PubnubException e) {
Log.d("PUBNUB",e.toString());
}
发布
现在是时候找到我们的声音了。是时候向世界各地订阅频道演示的每个人发送消息了。首先,我们将像在第 3 步中所做的那样订阅,只是这次我们将频道指定为演示。一旦我们订阅了频道,我们需要做的就是使用 publish() 方法。我们将指定频道名称,我们要发送的消息。我们还将包含一个回调对象。
Callback callback = new Callback() {
public void successCallback(String channel, Object response) {
Log.d("PUBNUB",response.toString());
}
public void errorCallback(String channel, PubnubError error) {
Log.d("PUBNUB",error.toString());
}
};
pubnub.publish("demo", "Hello World !!" , callback);