LeanCloud快速集成IM功能-边学边做

给app快速集成IM功能的大体实现有两种方式:

  • 搭建自己的通信服务器(比如搭建基于XMPP的Openfire)

  • 使用第三方提供的服务器(比如融云,环信以及本文的LeanCloud)

    每种方式都各有利弊,主要看公司的情况而定,大公司一般都采用自己的通信服务器,采用第三方服务器的方式比较适合初创型互联网公司

  • 本文初步小结在开发中使用LeanCloud中的一些坑.

从集成LeanCloud的Framework开始

关于LeanCloud的文档和技术支持这里就不吐槽了.直接爆自己遇到的一些坑.

小坑1

按照官方的说明文档集成框架之后,第一次运行,会报下面的一个错误,这个一看就比较容易解决.但官方文档竟然漏掉了sqlite这个库(也可能是我粗心,未在官方说明中找到相关信息)

symbols for architecture i386:

"_sqlite3_bind_blob", referenced from:

1
-[LCDatabase bindObject:toColumn:inStatement:] in AVOSCloud(LCDatabase.o)

解决办法

  • 选择工程—选择Target— 选择Build Phases — 选择Link Binary With Libraries— 点击+号
  • 添加libsqlite3.dylib即可

小坑2

先看错误提示:

-[LCDatabase userVersion]: unrecognized selector sent to instance 0x7a4ed7f0

这个坑算是比较隐蔽的,当时遇到的时候,google了世界也没有具体的针对性的说明,而且官方的技术工单是需要付费的(#_#).只好自己动手了.

辛辛苦苦搭建好界面,写好初始化代码之后,编译运行,UI正常,但是发送message的时候,直接崩溃!

起初,看错误,是经典信息啊,容易看出是数据库调用了一个没有定义的方法,使用断点查看栈信息后,可以找到如下:

Queue:fmdb <LCDatebaseQueue:....>

  • 猜想1:当时以为是LeanCloud在内部使用第三方数据库框架FMDB而未引用其头文件,于是自己动手直接再项目中添加FMDB,结果无效,问题依旧.
  • 猜想2:可能是LeanCloud框架中使用Category,于是在Other Linker Flags中添加-Objc.结果问题依旧.
  • 在猜想2失败后,纠结了好一阵,后来无意在官网上查到-all_load这个参数.于是乎有了下面的解决办法

解决办法

将猜想2中的-Objc换为-all_load,问题解决.

姿势补充:

-Objc:的作用是将静态库中所有的和对象相关的文件都加载进来.

-all_load:加载静态库中所有文件,包括没有objc的代码文件.

后续

后续还要做一个与web端通信的研究,待续中….