网易云信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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,326评论 0 15
  • 一 典型的即时通讯架构可能是这样的 无论是IM消息通信系统还是客户消息系统,其本质都是一套消息发送与投递系统,或者...
    isgiker阅读 4,948评论 3 12
  • 四年级 薛博文 作文比赛那天早上,妈妈骑着摩托车把我送到比赛地点,校门口已经挤满了来自各个学校的...
    zyl林阅读 405评论 6 9
  • 晚上回家饭后舒涵写作业,我闲着没事上网逛逛。前两天买的红酒杯还不错,今天再配个醒酒器,酒架。看好了加在购物车里,等...
    舒涵妈咪阅读 94评论 0 0
  • 父亲生病了,需要到医院做检查,而能陪伴他去医院的我却不在身边,我执意说回家陪他一同去,被他拒绝了,我在电话中又一再...
    女派阅读 954评论 0 0