美文网首页即时聊天iOS Dev
网易云信IM(即时聊天,类似微信)第一版

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

作者: wangyu2488 | 来源:发表于2017-02-22 15:22 被阅读9800次

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

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

相关文章

网友评论

  • 3d41e4744ad9:pod下来的版本为什么和官方的不一样呢?官方demoUI没有问题,可是我集成的聊天UI头像和昵称都没有显示,且UI有问题,对比了下官方demo NIMSessionViewController控制器代码不一致,试着改了下,感觉好有难度,请问楼主有遇到过吗,有什么好的解决办法吗?谢谢!!!
  • YJExpand:您好,我想问下有swift版本的吗?
  • 0b9f16a04610:您好,我想咨询下,自己app的登录系统和SDK的登录系统 是一套还是两套?

    官方的demo里这么说 //用户APP的帐号体系和 NIM SDK 并没有直接关系,开发者需要根据自己的实际情况配置自身用户系统和 NIM 用户系统的关系
  • 酒红色T恤:我看了Github上面的Demo,只用UI感觉有点困难@楼主
  • 156d72df55fc:我想问一下在iOS11上id<NIMCellLayoutConfig> config = model.layoutConfig; 获取不到config导致崩溃怎么解决呀,你们有木有遇到过呀
    wangyu2488:@NSLog_木木 可能是ios11的问题, 要强制类型转换
  • RyanWong_iOS:你好,请问怎么自定义他们的toolbar的?
  • 4bc973e9926f:您好,我是直接继承的NIMSessionViewController聊天界面,但是发送的图片和视频 或者标签链接无法点击,我询问技术支持 ,他说要自己实现 .现在被困在这儿不知道怎么办了 能沟通下吗
    4bc973e9926f:@Uncle_Gao 嗯 自己实现图片点击预览功能就行了 网易云信爆出来的有函数方法 接收图片的
    Uncle_Gao:@One_Person_Mr 兄弟 你这个问题现在解决了吗?如果解决了,能交流下么 提前感谢了
    4bc973e9926f:@wangyu2488
  • 小叮当de琉璃球:请问那个自己接入demo,修改appkey后,发现注册入不了,如何解决 @wangyu2488
    4bc973e9926f:你的云信通讯弄好了么? 可以沟通下经验吗?
  • Idoahc:您好,咨询一下我只想用云信的聊天界面UI,可以单独拿出来用吗,其他的核心东西我们有。
    4bc973e9926f:你的云信弄好了吗?可以沟通下经验吗?
    Idoahc:@wangyu2488 那等于说是直接继承那个聊天控制器就行吗,
    wangyu2488:@SuperDi 可以用
  • 时光作祟不朽间:继承自NIMSessionViewController,但是键盘弹出的时候输入框显示不出来,遇到过这个问题吗
    时光作祟不朽间:@霍根施拉格 把导航栏隐藏,自定义导航栏
    wangyu2488:@霍根施拉格 什么问题,这个做的比较早了,基本上都算完成了。
    acabedb0628a:你好,这个问题我也遇到了,请问你是怎么解决的?
  • RunLoop:有自定义聊天UI界面吗
  • 二营长意大利炮呢:加载出的聊天记录中的图片类型和视频类型的消息没有缩略图,只有黑色背景怎么处理啊?
  • 少年不知代码贵:self notifyAppServer。 这个方法是SDK的原有的吗?
    wangyu2488:@疯癫的你 自己的,通知自己程序后台app
    wangyu2488:@疯癫的你 没有,是我们自己app和我们自己后台交互
  • kinmo:你好,上面的自定义有没有整合一个demo提供下呢?谢谢
    kinmo:@wangyu2488 云信的demo解读起来有点困难,不知有没有时间请教一下?
    wangyu2488:@July丶ye 云信有demo的,公司项目暂时没时间抽离,提供不了
  • SHyH5:您好,我最近也在集成网易云信的即时通讯功能,有一些自定义的东西,能请教一下吗
    ,谢谢
    a44ad246b1ca:请问一下他的发送消息的类型是怎么设置的啊,我的默认的通知类型
    wangyu2488:@SHyH5 说吧

本文标题:网易云信IM(即时聊天,类似微信)第一版

本文链接:https://www.haomeiwen.com/subject/sulmwttx.html