IOS XMPP的实践

安卓app逆向破解脱壳教程 From:Hook 神器家族的 Frida 工具使用详解:https://blog.youkuaiyun.com/FlyPigYe/article/details/90258758 详解 Hook 框架 frida (信抢红包):https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】:https://www.jianshu.com/p/2d755beb1c54 frida 官网文档:https://fr.. 阅读详情
近期一网友说一起研究XMPP协议,然后就花了点时间 研究了研究,其实也谈不上研究XMPP协议,就是简单的在IOS平台上使用而已。不过一切都得从使用开始,然后才能深入研究。

  关于XMPP的介绍,我找了些资料

简介:http://www.cnblogs.com/cokecoffe/archive/2012/08/19/2646245.html

实现:http://www.cnblogs.com/cokecoffe/archive/2012/08/19/2646280.html

比较具体的:http://wiki.jabbercn.org/index.php?title=RFC3920&variant=zh-cn

 


  

至于在IOS上的应用,参考了国外这个教程:

http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-interface-setup/

从从服务器搭建,到客户端实现,一共有四个步骤。服务器搭建基本没有什么大问题,细心一点,关键是剩下的三步。

教程使用的xmpp framework不是最新的,所以如果你现在从Github上下载最新的XMPP Framework的话,应该是会出不少问题。

比如就说导入框架的时候,教程简单的说把几个文件夹托进去就可以。但是等实际操作的时候,会发现,这么做的话会引起很多编译报错。

所以呢,最好按照https://github.com/cokecoffe/XMPPFramework说明里的

Getting started using XMPPFramework on iOS

一步步来导入Framework,记住每做一步都要编译一下验证是否没有编译报错,要不等把所有框架都加进去后,再编译,到时候错误很难查出,我就在这上面浪费了不少时间。

 

剩下就是客户端的创建了。先大概了解下程序的框架,主要是有三个界面,一个登陆,一个好友列表,一个聊天界面。

程序与服务器交互,我们把协议实现在AppDelegate里,这样方便在任何类中调用。

看图吧:

关键部分就是XMPPDelegate协议的实现部分,简单的列举一下要使用到的方法:

复制代码
 1 1.关于连接的
 2 //此方法在stream开始连接服务器的时候调用
 3 - (void)xmppStreamDidConnect:(XMPPStream *)sender
 4 //此方法在stream连接断开的时候调用
 5 - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error;

 6 2.关于验证的
 7 //验证失败后调用
 8 - (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(NSXMLElement *)error
 9 //验证成功后调用
10 - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender


11 3.关于通信的
12 //收到消息后调用
13 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
14 //接受到好友状态更新
15 - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
复制代码

 


 

之后就是具体去实现了。我在实现过程遇到了各种问题,虽然不大,但是很不好解决。因为资料甚少。

下面是我遇到的几个问题:

1.在收到消息后,

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

会被调用,然后就是解析message,提取消息的类型、内容等信息。

按教程来,等好友发送消息过来的时候,提取body的时候,会发现会挂掉。打印出message没有body一项。

这是因为好友的聊天输入框激活的时候就会给我们发送消息,这个时候的消息里没有body一项,所以[message elementForName:@"body"]返回nil,然后我又把nil添加到了NSDictionary里,所以挂掉了。

后来看官方的Demo里,有这样一个方法[message isChatMessageWithBody],方法作用正如其名。

所以在转发消息之前,先判断下,就ok。

 

2.教程里的好友页面,-(void)viewDidAppear:(BOOL)animated方法里会调用connect。

也就是每次好友页面出现都会connect。这里虽然不会导致程序crash掉,但是stream会重复建立,有可能消息会收不到。

所以我在connect方法里加以判断,如果stream!=nil,直接return。

 

3.这个问题就比较诡异了,我发现我只要给好友发送消息,对方就显示我已经下线了。

找了许久,就查发送消息那块,死活没问题啊。一个星期后,偶然看起来好友列表里显示的好友地址不对,原来,好友名和域名少了个@符号。

结果导致了这诡异的问题。真是粗心。

 


 

基本上就总结了这些,因为我写再多也不如自己亲身实验,所以大家多多实验,遇到问题可以交流。本人比较在乎文章产生的影响,不希望误导别人,也不希望被人误导。所以大家如果读到此文章,要慎重阅读,并且敢于提出质疑。如果这里有什么不妥的地方,欢迎指出。

国内也有几个教程,基本也是参考上面提到的那个国外的教程。大同小异,写的也不错,可以参考。

http://blog.youkuaiyun.com/kangkangz4/article/details/7740135

 XMPP Framework 框架下载 https://github.com/cokecoffe/XMPPFramework

SAP-ABAP:SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践 SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践 阅读详情

相关推荐

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 421

IOS -- xmppStreamDidDisconnect: Error Domain=GCDAsyncSocketErrorDomain Code=7 解决方案

在使用XMPPFramework 的时候,每次发送消息调用 [xmppStream sendElement:aMessage]; 就会调用xmppStreamDidDisconnect 这个代理。报错如下: xmppStreamDidDisconnect: Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by r

Gmonday 一个帅哥的专栏 10000

别光看Demo了!用UE5 Lyra框架快速搭建你的多人对战游戏原型(含完整配置流程)

本文详细介绍了如何利用UE5 Lyra框架快速搭建多人对战游戏原型,包含完整的配置流程和实战案例。Lyra作为可直接二次开发的游戏模板,内置了GAS技能系统、Enhanced Input输入控制等核心功能,大幅缩短开发周期。通过替换角色模型、调整武器数值和配置新地图规则,开发者可在48小时内完成科幻团队竞技游戏原型的搭建。

weixin_28717411的博客 455

【iOS XMPP】使用XMPPFramewok(四):收发消息

收发消息   接收消息 通过实现  - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message; 方法 当接收到 标签的内容时,XMPPFramework 框架回调该方法 根据 XMPP 协议,消息体的内容存储在标签 内 - (void)xmpp

天下只此一家的专栏 981

esim分布式云卡池技术

eSIM卡,即Embedded-SIM,嵌入式SIM卡。eSIM卡的概念就是将传统SIM卡直接嵌入到设备芯片上,而不是作为独立的可移除零部件加入设备中,用户无需插入物理SIM卡。这一做法将允许用户更加灵活的选择运营商套餐,或者在无需解锁设备、购买新设备的前提下随时更换运营商。未来通用的eSIM标准建立将为普通消费者、企业用户节省更多移动设备使用成本,并带来更多的便利、安全性。 2018年 3月7日,中国联通宣布,正式在上海、天津、广州、深圳、郑州、长沙6座城市率先启动“eSIM一号双终端”业务的办理。[.

著名博客 3707

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 267

xmpp错误日志集锦

xmppStreamDidDisconnect: Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused" UserInfo=0x16d5b5a0 {NSLocalizedFailureReason=Error in connect() function, NSLocalizedDescription=Connection ref

SoulHao的专栏 3946

使用Verilog实现QR分解——嵌入式 [设计与代码]

通过Verilog的硬件描述语言,我们可以将QR分解算法实现为硬件电路,并在嵌入式系统中高效地运行。本文将介绍如何使用Verilog设计并实现QR分解算法,该算法用于将一个矩阵分解为正交矩阵Q和上三角矩阵R。具体而言,QR分解通过对矩阵的列进行正交化处理,得到正交矩阵Q,并将对应的正交化结果存储在上三角矩阵R中。该算法通过将矩阵分解为两个部分,正交矩阵Q和上三角矩阵R,实现了对矩阵的分解和变换。模块,该模块接收待分解矩阵A,并输出正交矩阵Q和上三角矩阵R。下面给出了使用Verilog实现QR分解的源代码。

CodeMaven的博客 620

关于XMPP聊天遇到的问题

准备做这时还没兴奋的,遇到的问题也蛮纠结的,其他的还好主要是在发送这块遇到了问题 总结一下,发送消息时一定要注意,Chat chat = cm.createChat("user",null),此处的user是定要是目标用户名@主机名,例如xxxx@192.168.0.xxx ,否则对方收不到任何消息,也不报错,这问题搞了半天终于解决,记录一下

waitinghc的专栏 549

【图像去噪】基于梯度为0法实现图像去噪附matlab代码

近几年,徐立提出的 L0 梯度最小化模型在图像平滑领域得到了广泛的应用和发展[11]. 和以往的局部滤波模型不同的是该模型可以全局的估计图像的像素值,因此,L0 梯度最小化模型在处理图像的同时能够很好的保护图像的边缘.​。

qq_59747472的博客 182

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

PPT里全是文字且很拥挤怎么办?本篇教你使用7种不同的排版让你的PPT瞬间变得高大上起来。

打造全国最全的AI Agent开发知识领域的博客 5021

IOS XMPP的实践(2)

近期一网友说一起研究XMPP协议,然后就花了点时间 研究了研究,其实也谈不上研究XMPP协议,就是简单的在IOS平台上使用而已。不过一切都得从使用开始,然后才能深入研究。   关于XMPP的介绍,我找了些资料 简介:http://www.cnblogs.com/cokecoffe/archive/2012/08/19/2646245.html 实现:http://www.cnblogs.co

探路者_iOS 629

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

xmpp学习1

自己学习xmpp官方文档,慢慢整理的笔记,不见得都是正确的,请用选择性眼光看待,也有问题尚未解决,持续更新中~~~       创建新工程,命名为XMPPIOS.       一:导入XMPPFramework     将XMPP拖拽到工程中。   添加静态库         并在Build

jinyeweiyang的专栏 431

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

XMPP

http://www.cnblogs.com/cokecoffe/archive/2012/08/22/2651645.html IOS XMPP的实践   近期一网友说一起研究XMPP协议,然后就花了点时间 研究了研究,其实也谈不上研究XMPP协议,就是简单的在IOS平台上使用而已。不过一切都得从使用开始,然后才能深入研究。   关于XMPP的介绍,我找了些资料

AndYouAndMe的专栏 564

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

XMPP 基础介绍 iOS导入XMPPFramework框架

即时通讯技术(IM -- Instant Messaging)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容。 有许多的IM系统,如AOL、Yahoo IM、 MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,

zhaojian3513的专栏 888

iOS XMPP搭建IM

XMPP框架地址: https://github.com/robbiehanson/XMPPFramework    eJabberd服务器:https://www.process-one.net/en/ejabberd/downloads  Spark: http://www.igniterealtime.org/downloads/download-landing.jsp?file=s

weixin_40873814的博客 1370

XMPP 基础

CHENYILONG Blog XMPP 基础 技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong Fullscreen XMPP基础 技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/lu...

weixin_30433075的博客 98

XMPP学习Day1

我是个初学者。我热爱iOS开发。最近迷上了即时通讯。然后在自己电脑上面搭建一个服务器自己是弄一下。在这里记录自己学习的历程以此鞭策自己。 这里忽略建立服务器的艰辛。哈哈,也可以和我讨论一下。 感谢博主的博客http://blog.youkuaiyun.com/kangkangz4/article/category/1089711,让我学习到了XMPP的知识。 今天就是xmpp的登录以及注销的demo。

咚咚锵咚锵咚锵 2042
上一篇: iPhone实现自定义多选列表
下一篇: 如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本
focusjava
博客等级 码龄14年 127粉丝 528原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值