网易云信IM(即时聊天,类似微信)第一版

2017年1月6日
一.基本介绍
1.免费版一个应用可以创建100个云信id (收费版一般2000元上下一个月)
官网:http://netease.im/
官网文档;http://dev.netease.im/docs?doc=iOS

2.该库有两个版本
完成版(含实时音视频库)
轻量版(基本够用了,有聊天,用户关系)目前我们用的就是这个版本

3.效果:(我们的原则是尽量不改第三方库代码,能通过扩展实现就扩展实现,如何无法实现,尽量将.m实现文件的接口,暴露到.h的方式)

Paste_Image.png

二前期准备
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.png

2.主要代码实现:
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.png

2.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

Paste_Image.png

2.如何实现API接口测试(云信)http://app.netease.im/index#/app/3108769
第一步添加运行测试账号 (注意这些账号都是和应用的App Key绑定的)

Paste_Image.png
Paste_Image.png

第二步:接口调试


Paste_Image.png
Paste_Image.png

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

推荐阅读更多精彩内容