如何使用Quickblox Xamarin nuget从Xmpp消息streem获取消息文本

时间:2016-10-14 09:47:57

标签: c# xamarin.ios quickblox

使用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

任何帮助将不胜感激。

3 个答案:

答案 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)

在Quickblox的官方文档中,他们提到在开始在组对话框中聊天之前,您应该加入此对话框。 enter image description here

但是现在它不再支持Xamarin,因此没有可用的文档可以尝试通过加入group使其起作用。但是如果您按照@Dhruv Bhagat的建议将其降级到1.2.2版本,则可以使用。