集成方式

更新时间: 2022/09/27 03:00:38

NIM SDK 提供两种集成方式:您既可以通过 CocoaPods 自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。

我们提供两个下载地址。分别为:

  • 官网 SDK 下载入口

  • 我们提供了 GitHub 发布仓库 。NIMSDK,此仓库包含 IM 和音视频功能,您可以根据自己的需求选择下载。

此外,为了让开发者可以轻松快速地在 App 中集成 IM 功能,我们还提供了开源的 聊天 UI 组件 , 通过简单的配置就可以实现聊天功能。

手动集成

【注】NIMSDK 在 5.1.0 版本之后已改为动态库,集成方式有所改变,若需要集成高于此版本的 SDK,只需要做以下步骤: 将下载的 SDK 拖动到 Targets -> General -> Embedded Binaries 里,如下图 手动集成IMSDK01

弹框这样选择 手动集成IMSDK02

即可完成集成。

若想集成静态库,可使用如下集成方式:

  • 根据自己工程需要,下载对应版本的 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++.tbd1
    • 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 对应的错误描述信息定位问题。

此文档是否对你有帮助?
有帮助
去反馈
  • 手动集成
  • 自动集成
  • 类库说明
  • 调用规则
  • 调用方式
  • 通知方式