网易云信IM(即时聊天,类似微信)第一版
2017年1月6日
一.基本介绍
1.免费版一个应用可以创建100个云信id (收费版一般2000元上下一个月)
官网:http://netease.im/
官网文档;http://dev.netease.im/docs?doc=iOS
2.该库有两个版本
完成版(含实时音视频库)
轻量版(基本够用了,有聊天,用户关系)目前我们用的就是这个版本
3.效果:(我们的原则是尽量不改第三方库代码,能通过扩展实现就扩展实现,如何无法实现,尽量将.m实现文件的接口,暴露到.h的方式)
二前期准备
1.demo实例http://netease.im/im-sdk-demo (我们基本上是参照这个demo类推的)
Paste_Image.png Paste_Image.png
基本架构图
Paste_Image.png
2.为了快速集成我们是基于云信的UI开源库开发的(不当当含有sdk,还有成行的ui界面)iOS的UI开源库 Paste_Image.png
3.一些类推约定
HuNTESConfig 类推 NTESDemoConfig
HuSessionListViewController 类推 NIMSessionListViewController
HuSessionViewController 类推 NIMSessionViewController
二具体实现
1.第三方库添加(NIMKit)
由于我们是参照NIMDemo类推开发的,我们总共引入了如下库
platform :ios, '8.0'
target '317hu' do
pod 'NIMKit'
pod 'CocoaLumberjack', '~> 2.0.0-rc2'
pod 'Reachability', '~> 3.1.1'
end
正常都应该可以编译成功,如果不行,请参考如下cocoapods文档
注意和demo的目录结构稍微有点不一样,应该是Podfile设置不同导致,我们还是按照正常的逻辑添加
Paste_Image.png2.主要代码实现:
2.0 pch头文件添加如下预加载头文件
//NIM
#import "NIMSDK.h"
#import "NIMKit.h"
#import <CocoaLumberjack/CocoaLumberjack.h>
#import "NTESGlobalMacro.h"
#ifdef DEBUG
static DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else
static DDLogLevel ddLogLevel = DDLogLevelInfo;
#endif
2.1.程序启动注册相关信息 (由于聊天相关苹果通知怕骚扰客户太多,苹果相关的push先不考虑)
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//网易云信相关初始化
[self startNIM];
}
- (void)startNIM
{
// 添加 SDK 初始化方法
//cerName为推送证书名,如果前期测试不需要的话,可以直接填nil
//目前用中卫护信测试应用
NSString *appKey = [[HuNTESConfig sharedConfig] appKey];
NSString *cerName= [[HuNTESConfig sharedConfig] cerName];
[[NIMSDK sharedSDK] registerWithAppID:appKey cerName:cerName];
//注册自定义消息的解析器
[NIMCustomObject registerCustomDecoder:[NTESCustomAttachmentDecoder new]];
//注册 NIMKit 自定义排版配置
[[NIMKit sharedKit] registerLayoutConfig:[NTESCellLayoutConfig class]];
}
2.2在app自己的登录逻辑下,集成获取云信账号逻辑
Paste_Image.png
登录界面登录后,保留护士端的云信id,和云信token,
{
[kUserDefaults setObject:nim_accid forKey:kNIMACCID];
[kUserDefaults setObject:nim_token forKey:kNIMToken];
[[NSUserDefaults standardUserDefaults]synchronize];
}
账号退出登录,别忘了清空账号
- (void)clearNIMData
{
[kUserDefaults removeObjectForKey:kNIMACCID];
[kUserDefaults removeObjectForKey:kNIMToken];
[kUserDefaults synchronize];
}
2.3.登录逻辑(含自动登录和手动登录),添加踢人保护
2.4实现最近消息会话列表,第三方库是这个类 NIMSessionListViewController(我们的类 HuSessionListViewController继承于该类)
2.4.1添加该类个性化业务消息
2.4.2添加该类tableView 删除样式和排序规则
2.5实现具体聊天界面,第三方库是这个类 NIMSessionViewController(我们的类 HuSessionViewController集成与该类)
2.5.1添加该类个性化内容-自定义消息
2.5.2添加该类个性化内容-默认头像
2.5.3添加该类个性化内容-头像跳转
2.5.4添加该类个性化内容-自定义消息跳转
2.5.5添加该类个性化内容-首次聊天会话通知后台(注意获取对方患者云信id用session,不要用消息体message获取id,可能为空)
#import "HuSessionViewController.h"
- (void)viewDidLoad {
[super viewDidLoad];
[self setInitData];
// Do any additional setup after loading the view.
}
- (void)setInitData
{
_firstload = YES;
}
- (void)sendMessage:(NIMMessage *)message
{
[super sendMessage:message];
//通知后台,第一次进入该页面第一次聊天(后台可以发送消息模板给客户端)
if(_firstload)
{
NSString *patientId = self.session.sessionId;//获取对方的云信id
if(patientId)
{
[self notifyAppServerHasChatWithPatient:patientId];
_firstload = NO;
}
}
}
2.5.6添加该类个性化内容-自定义底部聊天会话框
Paste_Image.png2.6其他IM公共接口相关
2.6.1手动登录云信接口
2.6.2 和患者聊天接口
2.6.3 给指定患者推送自定义消息(如随访)
2.6.4云信消息小红点数量图标
三.消息接口调试
1.接口参数说明
http://dev.netease.im/docs?doc=server&#%E5%8F%91%E9%80%81%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF
2.如何实现API接口测试(云信)http://app.netease.im/index#/app/3108769
第一步添加运行测试账号 (注意这些账号都是和应用的App Key绑定的) Paste_Image.png Paste_Image.png
第二步:接口调试
Paste_Image.png Paste_Image.png
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。