集成方式
更新时间: 2022/09/27 03:00:38
NIM SDK 提供两种集成方式:您既可以通过 CocoaPods
自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。
我们提供两个下载地址。分别为:
此外,为了让开发者可以轻松快速地在 App 中集成 IM 功能,我们还提供了开源的 聊天 UI 组件 , 通过简单的配置就可以实现聊天功能。
手动集成
【注】NIMSDK 在 5.1.0 版本之后已改为动态库,集成方式有所改变,若需要集成高于此版本的 SDK,只需要做以下步骤: 将下载的 SDK 拖动到 Targets -> General -> Embedded Binaries 里,如下图
弹框这样选择
即可完成集成。
若想集成静态库,可使用如下集成方式:
-
根据自己工程需要,下载对应版本的 NIM SDK,得到 NIMSDK.framework 文件 ( 如果选择音视频版本,还将得到 NIMAVChat.framework 文件和 NMC.framework 文件,外加一个资源文件 ) ,将他们导入工程。
-
添加其他 NIM SDK 依赖库
- MobileCoreServices.framework
- SystemConfiguration.framework
- AVFoundation.framwork
- CoreTelephony.framework
- CoreMedia.framework
- AudioToolbox.framework
- VideoToolbox.framework
- libc++.tbd 注1
- libsqlite3.0.tbd
- libz.tbd
注1 :在 SDK 3.0.0 以前版本 (包括 3.0.0) ,c++ 库请使用 libstdc++6.0.9.tbd , 之后的版本统一替换成 libc++.tbd 。
-
在
General
->Embedded Binaries
里,添加 NIMSDK.framework 文件 ( 如果选择音视频版本, 还需要添加 NIMAVChat.framework 文件和 NMC.framework 文件) -
在
Build Settings
->Other Linker Flags
里,添加选项-ObjC
。 -
在需要使用即时通讯 SDK 的地方
import <NIMSDK/NIMSDK.h>
,在需要使用实时音视频 SDK 的地方import <NIMAVChat/NIMAVChat.h>
。 -
由于库包含模拟器版本,会导致打包失败。所以需要在打包之前将模拟器版本剥去
- 在工程里创建
nim_strip_archs.sh
脚本到指定目录,如Supporting Files
里 - 在
Build Phases
中增加过程,类型为New Run Script Phase
- 在工程里添加内容: /bin/sh 您的脚本路径 如
/bin/sh "${SRCROOT}/NIMDemo/Supporting Files/nim_strip_archs.sh"
- 将如下内容复制到脚本
- 在工程里创建
#!/bin/sh
# Strip invalid architectures
strip_invalid_archs() {
binary="$1"
echo "current binary ${binary}"
# Get architectures for current file
archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
stripped=""
for arch in $archs; do
if ! [[ "${ARCHS}" == *"$arch"* ]]; then
if [ -f "$binary" ]; then
# Strip non-valid architectures in-place
lipo -remove "$arch" -output "$binary" "$binary" || exit 1
stripped="$stripped $arch"
fi
fi
done
if [[ "$stripped" ]]; then
echo "Stripped $binary of architectures:$stripped"
fi
}
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
done
自动集成
在 Podfile
文件中加入
IM 音视频完整版:
pod 'NIMSDK'
或 IM 精简版
pod 'NIMSDK_LITE'
安装
pod install
如果无法安装 SDK 最新版本,运行以下命令更新本地的 CocoaPods 仓库列表
pod repo update
类库说明
NIM SDK 主要提供了如下类(协议)与方法
类(协议) | 描述 | 说明 |
---|---|---|
NIMSDK | SDK的主入口类 | 提供初始化,注册,内部管理类管理的功能 |
NIMLoginManager | 登录管理类 | 负责登录,注销和相应的回调收发 |
NIMChatManager | 聊天管理类 | 负责消息的收发 |
NIMConversationManager | 会话管理类 | 负责消息,最近会话的管理 |
NIMTeamManager | 群组管理类 | 负责群组各种操作 |
NIMMediaManager | 媒体管理类 | 负责多媒体相关的接口,比如语音录制,声音播放 |
NIMSystemNotificationManager | 系统通知管理类 | 负责系统消息的接收和存储 |
NIMApnsManager | 推送管理类 | 负责推送的设置和接收 |
NIMResourceManager | 资源管理类 | 负责文件的上传和下载 |
NIMUserManager | 好友管理类 | 负责对好友的增删查,以及对其会话的消息设置 |
NIMChatroomManager | 聊天室管理类 | 负责聊天室状态管理和数据拉取及设置 |
NIMDocTranscodingManager | 文档转码管理类 | 负责文档转码的查询和删除等 |
NIMAVChat 主要提供了如下类(协议)与方法
类(协议) | 描述 | 说明 |
---|---|---|
NIMAVChat | NIMSDK 的音视频和实时会话扩展 | 封装了网络通话、实时会话和网络探测等的管理 |
NIMNetCallManager | 音视频网络通话管理类 | 提供音视频网络通话功能 |
NIMRTSManager | 实时会话管理类 | 提供数据通道 (TCP/语音通道) 来满足实时会话的需求 |
NIMRTSConferenceManager | 多人实时会话管理类 | 提供多人数据通道 (TCP) 来满足多人实时会话的需求 |
NIMAVChatNetDetectManager | 音视频网络探测管理类 | 提供音视频网络状态诊断功能 |
调用规则
调用方式
所有业务均通过 NIMSDK 单例调用
objc@interface NIMSDK : NSObject
/**
* 获取SDK实例
*
* @return NIMSDK实例
*/
+ (instancetype)sharedSDK;
@end
以获取聊天管理类为例:
objcid<NIMChatManager> chatManager = [[NIMSDK sharedSDK] chatManager];
虽然所有的云信接口都是线程安全的,但我们强烈推荐您在且只在主线程调用相应接口。
通知方式
SDK 通过两种方式通知上层 API 调用结果:回调(callback)和委托 (delegate),两种方式都只在主线程触发。
一般回调接口直接反映在对应接口的 completion
参数上,调用时设置即可。而委托则需要开发者在合适时机在对应管理类上进行添加和移除:一般推荐在相应 ViewController 或管理类初始化进行委托注册,在其销毁时进行移除。
例如,开发者需要在在会话页上监听消息的发送结果
objc@implementation MySessionViewController
- (void)dealloc
{
...
[[NIMSDK sharedSDK].chatManager removeDelegate:self];
...
}
- (void)viewDidLoad
{
...
[[NIMSDK sharedSDK].chatManager addDelegate:self];
...
}
#pragma mark - NIMChatManagerDelegate
- (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error
{
//发送结果
}
所有调用错误都会以 NSError
的形式暴露。针对不同场景,我们将错误进行分类,主要分为以下两种错误域和对应错误码
错误域 | 错误码 | 说明 |
---|---|---|
NIMLocalErrorDomain | NIMLocalErrorCode | 本地操作出错导致 |
NIMRemoteErrorDomain | NIMRemoteErrorCode | 与服务器交互出错导致 |
在开发过程中遇到错误情况,可以对照错误域和错误码进行排查,具体定义可以参考 NIMGlobalDefs.h
。当然在开发过程中你也可以通过检视 NSError 中 userInfo
对应的错误描述信息定位问题。