项目配置

  • 在工程target的"Build Settings"中,找到"Linking"的"Other Linker Flags",添加参数-ObjC。

IMSDK

  • imsdk只包含消息基础通讯功能

初始化IM

启动im服务只需要设置用户的access token,调用启动接口并添加消息的监听对象。

[IMService instance].deviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

[[IMService instance] startRechabilityNotifier];

用户登录成功后启动IM,设置用户的accesstoken并启动im

[IMHttpAPI instance].accessToken = accessToken;
[IMService instance].accessToken = accessToken;
[[IMService instance] start];

用户注销后清空用户的devicetoken并停止IM

[IMHttpAPI unbindDeviceToken];
[IMService instance].accessToken = @""
[[IMService instance] stop];

应用切到后台暂停IM,此后所有的消息将通过推送通道下发

[[IMService instance] enterBackground]; 

应用切到前台恢复IM

[[IMService instance] enterForeground];

发送消息

  • 启动IM服务设置好用户id之后便可以开始发送消息,消息发送的代码需要在UI线程中调用(消息内容大小限制为4k) :

      IMMessage *im = [[IMMessage alloc] init];
    //设置发送方id
    im.sender = sender;
    //设置接收方id
    im.receiver = receiver;
    //消息本地id
    im.msgLocalID = msgLocalID;
    im.content = "消息内容";
    [[IMService instance] sendPeerMessage:im]; 

类IMService

设置当前用户的access token

属性名:String accessToken
功能:在调用start之前必须要设置用户的accessToken,token是由第三方应用服务器调用IM服务器RestAPI所得。

设置当前设备的id

属性名:String deviceID
功能:设备id可以用户多点登陆的唯一性判断,可选调用

设置观察者

方法名: -(void) addMessageObserver:(id<IMServiceObserver>)observer
功能:设置observer,在observer中处理接受到的消息。
参数说明:
* observer 观察者
返回值:无返回值

开始接受消息

方法名:-(void) start
功能:用户登陆成功后,连接im服务器来接受在线消息。

停止接受消息

方法名:-(void) stop
功能:用户注销后,断开和im服务器的连接,从而终止接受在线消息。

应用进入到前台

方法名:-(void) enterForeground
功能:应用进入前台,im服务器将停止将消息推送到通知栏

应用进入到后台

方法名:-(void) enterBackground
功能:应用进入后台,im服务器会将将消息推送到通知栏

发送消息

方法名: -(BOOL) sendPeerMessage:(IMMessage*)msg
功能:发送im消息,如果当前连接处于断开状态,消息会发送失败, 函数返回YES,也不能表明服务器已经接收到消息。
参数说明:
*msg 消息对象
返回值:BOOL

接口IMServiceObserver

连接状态

方法名:-(void) onConnectState:(int)state
功能:连接状态变更通知
参数说明:
*state 连接的状态 STATE_UNCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_CONNECTFAIL
返回值:无返回值

异地登陆

方法名: -(void) onLoginPoint:(LoginPoint*)lp
功能:当前登陆用户在异地登陆
参数说明:
*lp 登录点信息
返回值:无返回值

消息

方法名:-(void) onPeerMessage:(IMMessage*)msg
功能:接受到一条im消息
参数说明:
*msg 消息对象
返回值:无返回值

消息ACK

方法名:-(void) onPeerMessageACK:(int)msgLocalID uid:(int64_t)uid
功能:服务器对收到消息的ack,此时这条消息才能标志为发送成功
参数说明:
*msgLocalID 消息的本地ID
*uid 消息接受者
返回值:无返回值

消息接受者ACK

方法名:-(void)onPeerMessageRemoteACK:(int)msgLocalID uid:(int64_t) uid
功能:消息已经被对端接收到。
参数说明:
*msgLocalID 消息的本地ID
*uid 消息接受者
返回值:无返回值

消息发送失败

方法名:-(void) onPeerMessageFailure:(int)msgLocalID uid:(int64_t)uid
功能:消息发出后,未收到服务器的ack,在和服务器的连接断开后,会通知消息发送失败。
参数说明:
*msgLocalID 消息的本地ID
*uid 消息接受者
返回值:无返回值

类IMApi

设置当前用户的device token

方法名:-(BOOL) bindDeviceToken:(NSString*)deviceToken success:(void (^)())success fail:(void (^)())fail
功能:设置device token后,im服务器会对用户推送离线消息
参数说明:
*deviceToken APNS的deviceToken
返回值:boolean 是否设置成功。

清空当前用户关联的device token

方法名:-(BOOL) unbindDeviceToken:(NSString*)deviceToken success:(void (^)())success fail:(void (^)())fail
功能:im服务器不会再对这台设备推送离线消息
参数说明:
*deviceToken APNS的deviceToken
*accessToken 用户当前的accessToken
返回值:boolean 是否清空成功。

IMKit

  • 除了imsdk必要的初始化动作外,使用imkit需要初始化存储类
    //setDBPath必须要在引用PeerMessageHandler,GroupMessageHandler之前调用
//可以将当前登录的uid加入到路径中,这样不同用户登录的时候,可以保留前一个用户的聊天历史
[MessageDB setDBPath:path];
[IMService instance].peerMessageHandler = [PeerMessageHandler instance];
[IMService instance].groupMessageHandler = [GroupMessageHandler instance];

打开聊天界面

MessageViewController* msgController = [[MessageViewController alloc] init];
msgController.peerUID = peerUID;
msgController.peerName = peerName;
msgController.currentUID = currentUID;
[self.navigationController pushViewController:msgController animated: YES];

GoBelieve IOS SDK接入备忘的更多相关文章

  1. GoBelieve Android SDK接入备忘

    Android SDK版本 目前SDK只支持Android 2.2或以上版本的手机系统. AndroidManifest.xml配置 以下配置可以在IMDemo/AndroidManifest.xml ...

  2. GoBelieve JS IM SDK接入备忘

    类IMService 构造函数 参数说明: * `observer` 回调对象(可选) 设置当前用户的access token 属性名:String accessToken 功能:在调用start之前 ...

  3. UE4 ios环境搭建备忘

    1.windows.mac安装证书 2.安装xcode .app -- 路径可以拖入 sudo gem install xcodeproj 3.错误处理 Setting up Mono Running ...

  4. iOS 7设计备忘单

    With the release of iOS 7, app designers and developers will need to adjust their visual language to ...

  5. SDK接入(3)之iOS内支付(In-App Purchase)接入

    SDK接入(3)之iOS内支付(In-App Purchase)接入 继整理了Android平台的SDK接入过程.再来分享下iOS平台的内支付(In-App Purchase)接入,作为笔者在游戏开发 ...

  6. iOS第三方开源库的吐槽和备忘(转)

    原文:http://www.cocoachina.com/industry/20140123/7746.html 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽.   目前比较活跃的社区 ...

  7. iOS第三方开源库的吐槽和备忘

    转自:http://blog.ibireme.com/2013/09/23/ios-third-party-libs/#more-41361 由 ibireme 发表于 2013/09/23 做iOS ...

  8. 手机游戏渠道SDK接入工具项目分享(二)万事开头难

    一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...

  9. ios--集成支付宝钱包支付iOS SDK的方法与经验

    文/胖花花(简书作者)原文链接:http://www.jianshu.com/p/fe56e122663e著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 没想到,支付宝的SDK是我目前 ...

随机推荐

  1. jQuery获取table表中的td标签

    首先我来介绍一下我遇到的问题 1.当有一个table表包含了<tr>标签,<td>标签,大致可以认为是这样的: <tr> <td> @scene.ID ...

  2. Javaweb三大组件-过滤器、监听器

    1. 过滤器 [filter] 作用: 对单个获取多个servlet起到增强[advice]的作用. 用于在所有的servlet执行前,做一些预处理.例如:做编码处理, 访问量统计[servletCo ...

  3. 网站部署中遇到的问题-编译器错误信息: CS0016

    问题描述: 访问站点出现错误win7 x64+iis7.5 配置错误:CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ ...

  4. 【HTML&CSS】文本的基本处理

    其实在写这篇博客的时候已经学了很久,也写了不少代码,特别是很枯燥的看完整个html部分,因为不带有CSS写出来的东西干巴巴的一点也不好看. 直到展开CSS学习才开来补上博客,嗯,这是个好习惯. 这是运 ...

  5. 修改mysql编码方式

    第一种:     通过mysql命令行修改: 1)首先查看数据库字符编码,命令为: show variables like’collation_%’; show variables like’char ...

  6. sqlalchemy & python & datatables & javascript 中文拼音排序

    近期有中文拼单排序需要,查询资料,mysql数据库有convert函数支持 select cname from channel order by convert(cname using gbk); # ...

  7. May 24th 2017 Week 21th Wednesday

    Always remember that you are absolutely unique. 永远记住,你是独一无二的. I am unique, in the way that all I do ...

  8. Python3循环语句

    Python3 循环语句 Python中的循环语句有for和while. 循环语句控制结构图如下: 一.while循环 ①循环结构 while 判断条件: 执行语句 实例: n = int(input ...

  9. java 解压缩Zip文件 ziputil

    package com.lanyuan.assembly.util; import java.io.BufferedOutputStream;import java.io.File;import ja ...

  10. QT学习之窗口右键菜单

    #QT学习之窗口右键菜单 QWidget 及其子类都有右键菜单,主要因为其有两个与右键菜单相关联的函数: Qt::ContextMenuPolicy contextMenuPlicy() const ...