使用Xamarin,我安装了QuickBlox Nuget(1.2.7): https://www.nuget.org/packages/Quickblox.Sdk/
并使用本教程: http://quickblox.com/developers/Sample-chat-xamarin 本教程可能已经过时,因为一些代码片段无法开箱即用,并且需要对类名称和函数进行一些更改,但它是我为Xamarin和QuicBlox找到的最佳源代码。
我试图发送和接收消息并遇到一些困难。 虽然我可以使用管理面板成功发送消息并在聊天记录中查看消息,但我无法找到通过消息文本接收消息的方法。
收到的消息包含消息ID,发件人ID等,但messageText字段始终为null。 当我使用getMessagesAsync主动获取消息(通过其id或作为聊天对话历史记录的一部分)时,我收到一条带有文本的消息。 所以文本在那里,事件被调用,但文本保持为空...
我尝试了不同的发送和接收消息的方式,使用:
发送消息 - 两者都有效,消息已发送,可以使用管理面板查看:
1
quickbloxClient.ChatXmppClient.SendMessage(...)
2
privateChatManager.SendMessage (messageText);
接收消息 - 只有ChatXmppClient有效,收到的消息及其所有详细信息但消息文本字段为空:
1
quickbloxClient.ChatXmppClient.MessageReceived += MessageReceived;
public async void MessageReceived (object sender, MessageEventArgs messageEventArgs)
{
if (messageEventArgs.MessageType == Xmpp.Im.MessageType.Chat && messageEventArgs.Message != null)
{
var message = messageEventArgs.Message; // contains message's details
var text = messageEventArgs.Message.messageText; // null
}
}
/// received (the event fired) with message details but without message text (null)
2
privateChatManager.MessageReceived += MessageReceived;
/// the event doesn't get called
任何帮助将不胜感激。
答案 0 :(得分:0)
解决方法代码: 发送 -
var extraParamsList = new List<System.Xml.Linq.XElement> ();
extraParamsList.Add (new System.Xml.Linq.XElement ((System.Xml.Linq.XName)"save_to_history", 1));
extraParamsList.Add (new System.Xml.Linq.XElement ((System.Xml.Linq.XName)"send_to_chat", 1));
extraParamsList.Add (new System.Xml.Linq.XElement ((System.Xml.Linq.XName)"message_text", messageTextEncoded));
var extraParams = new System.Xml.Linq.XElement ((System.Xml.Linq.XName)EXTRA_PARAMS, extraParamsList.ToArray ());
quickbloxClient.ChatXmppClient.SendMessage (recieverId, messageText, extraParams, dialogId, null, Xmpp.Im.MessageType.Chat);
接收 -
var messageText = string.Empty;
/// In case there are more needed fields
foreach (var element in responseMessage.ExtraParameters.Elements ())
{
var name = element.Name.LocalName;
var value = element.Value;
if (!string.IsNullOrWhiteSpace (name) && !string.IsNullOrWhiteSpace (value))
{
switch (name)
{
case "message_text":
messageText = value
default:
break;
}
}
}
答案 1 :(得分:0)
我知道我迟到了回答,但希望它可以帮助别人。 我的申请面临着类似的问题。经过大量的努力,我发现Quickblox Nuget 出现了错误, 1.2.7 。我在所有项目(即PCL,droid和ios)中将其降级为1.2.2 然后重建我的项目和宾果! 有效。
答案 2 :(得分:0)