PubNub 服务器未正确格式化消息
PubNub Server does not format message properly
我有服务器配置来与 Android 客户端对话:
<?php
require_once("mysql.class.php");
require_once("lib/autoloader.php");
// Setting up the PubNub Server:
use Pubnub\Pubnub;
$pubnub = new Pubnub(
"pub-c...", ## PUBLISH_KEY
"sub-c..." ## SUBSCRIBE_KEY
);
// Publishing :
$post_data = json_encode(array("type"=> "groupMessage", "data" => array("chatUser" => "SERVER", "chatMsg" => "Now lets talk", "chatTime"=>1446514201516)));
$info = $pubnub->publish('MainChat', $post_data);
print_r($info);
print_r($post_data);
?>
和html:
<!doctype html>
<html>
<head>
<title>PubNub PHP Test Page</title>
</head>
<body>
<form method="POST" action="index.php">
<input type="submit" name="submit" value="TestSendMessage" />
</form>
</body>
</html>
发布功能在服务器中工作,因为我可以看到消息到达客户端 Android 应用程序的日志控制台,但消息从未被正确解析,因此不会出现在列表视图中订阅回调:
public void subscribeWithPresence(String channel) {
this.channel = channel;
Callback subscribeCallback = new Callback() {
@Override
public void successCallback(String channel, Object message) {
if (message instanceof JSONObject) {
try {
JSONObject jsonObj = (JSONObject) message;
JSONObject json = jsonObj.getJSONObject("data");
final String name = json.getString(Constants.JSON_USER);
final String msg = json.getString(Constants.JSON_MSG);
final long time = json.getLong(Constants.JSON_TIME);
if (name.equals(mPubNub.getUUID())) return; // Ignore own messages
final ChatMessage chatMsg = new ChatMessage(name, msg, time);
presentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
// Adding messages published to the channel
mChatAdapter.addMessage(chatMsg);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
Log.d("PUBNUB", "Channel: " + channel + " Msg: " + message.toString());
}
@Override
public void connectCallback(String channel, Object message) {
Log.d("Subscribe", "Connected! " + message.toString());
//hereNow(false);
// setStateLogin();
}
};
try {
mPubNub.subscribe(this.channel, subscribeCallback);
//presenceSubscribe();
} catch (PubnubException e) {
e.printStackTrace();
// Checking if success
Log.d("Fail subscribe ", "on channel: " + channel);
}
}
通过单击 TestSendMessage
在浏览器中测试服务器输出结果:
Array ( [0] => 1 [1] => Sent [2] => 14465159776373950 ) {"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}
在应用程序中,日志输出来自行:Log.d("PUBNUB", "Channel: " + channel + " Msg: " + message.toString());
Returns: D/PUBNUB: Channel: MainChat Msg: {"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}
它应该如此,但消息从未出现在消息的 ListView 中,因此无法通过 JSON 解析。
JSON 标签直接来自常量 class 为:
public static final String JSON_GROUP = "groupMessage";
public static final String JSON_USER = "chatUser";
public static final String JSON_MSG = "chatMsg";
public static final String JSON_TIME = "chatTime";
如何重新配置服务器发送以允许应用内解析成功?
通过 PubNub
发送 JSON
Send the JSON object without stringifying it first。在 PHP 的情况下,不要 json_encode
消息。 PubNub SDK 将为您编码和解码。
这个:
$post_data = array("type"=> "groupMessage", "data" => array(
"chatUser" => "SERVER", "chatMsg" => "Now lets talk",
"chatTime"=>1446514201516));
不是这个:
$post_data = json_encode(array("type"=> "groupMessage", "data" => array(
"chatUser" => "SERVER", "chatMsg" => "Now lets talk",
"chatTime"=>1446514201516)));
如果解决了,请发表评论。
我有服务器配置来与 Android 客户端对话:
<?php
require_once("mysql.class.php");
require_once("lib/autoloader.php");
// Setting up the PubNub Server:
use Pubnub\Pubnub;
$pubnub = new Pubnub(
"pub-c...", ## PUBLISH_KEY
"sub-c..." ## SUBSCRIBE_KEY
);
// Publishing :
$post_data = json_encode(array("type"=> "groupMessage", "data" => array("chatUser" => "SERVER", "chatMsg" => "Now lets talk", "chatTime"=>1446514201516)));
$info = $pubnub->publish('MainChat', $post_data);
print_r($info);
print_r($post_data);
?>
和html:
<!doctype html>
<html>
<head>
<title>PubNub PHP Test Page</title>
</head>
<body>
<form method="POST" action="index.php">
<input type="submit" name="submit" value="TestSendMessage" />
</form>
</body>
</html>
发布功能在服务器中工作,因为我可以看到消息到达客户端 Android 应用程序的日志控制台,但消息从未被正确解析,因此不会出现在列表视图中订阅回调:
public void subscribeWithPresence(String channel) {
this.channel = channel;
Callback subscribeCallback = new Callback() {
@Override
public void successCallback(String channel, Object message) {
if (message instanceof JSONObject) {
try {
JSONObject jsonObj = (JSONObject) message;
JSONObject json = jsonObj.getJSONObject("data");
final String name = json.getString(Constants.JSON_USER);
final String msg = json.getString(Constants.JSON_MSG);
final long time = json.getLong(Constants.JSON_TIME);
if (name.equals(mPubNub.getUUID())) return; // Ignore own messages
final ChatMessage chatMsg = new ChatMessage(name, msg, time);
presentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
// Adding messages published to the channel
mChatAdapter.addMessage(chatMsg);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
Log.d("PUBNUB", "Channel: " + channel + " Msg: " + message.toString());
}
@Override
public void connectCallback(String channel, Object message) {
Log.d("Subscribe", "Connected! " + message.toString());
//hereNow(false);
// setStateLogin();
}
};
try {
mPubNub.subscribe(this.channel, subscribeCallback);
//presenceSubscribe();
} catch (PubnubException e) {
e.printStackTrace();
// Checking if success
Log.d("Fail subscribe ", "on channel: " + channel);
}
}
通过单击 TestSendMessage
在浏览器中测试服务器输出结果:
Array ( [0] => 1 [1] => Sent [2] => 14465159776373950 ) {"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}
在应用程序中,日志输出来自行:Log.d("PUBNUB", "Channel: " + channel + " Msg: " + message.toString());
Returns: D/PUBNUB: Channel: MainChat Msg: {"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}
它应该如此,但消息从未出现在消息的 ListView 中,因此无法通过 JSON 解析。
JSON 标签直接来自常量 class 为:
public static final String JSON_GROUP = "groupMessage";
public static final String JSON_USER = "chatUser";
public static final String JSON_MSG = "chatMsg";
public static final String JSON_TIME = "chatTime";
如何重新配置服务器发送以允许应用内解析成功?
通过 PubNub
发送 JSONSend the JSON object without stringifying it first。在 PHP 的情况下,不要 json_encode
消息。 PubNub SDK 将为您编码和解码。
这个:
$post_data = array("type"=> "groupMessage", "data" => array(
"chatUser" => "SERVER", "chatMsg" => "Now lets talk",
"chatTime"=>1446514201516));
不是这个:
$post_data = json_encode(array("type"=> "groupMessage", "data" => array(
"chatUser" => "SERVER", "chatMsg" => "Now lets talk",
"chatTime"=>1446514201516)));
如果解决了,请发表评论。