文档反馈
文档反馈

iOS Getting Started

手动登录

快速集成网易云信登录,只需要操作以下几步就可以完成:
1. 下载SDK并导入。
2. 添加其他 NIM SDK 依赖库
3. 在AppDelegate.m引用"NIMSDK.h"并初始化SDK
4. 在Main.storyboard创建控件并实现与ViewController的对应
5. 实现ViewController的login方法并实现登录

1. 下载SDK并导入

从官网上下载SDK之后,在你的工程中右键,手动add files to到工程。 enter image description here

2.添加其他 NIM SDK 依赖库

MobileCoreServices.framework
SystemConfiguration.framework
AVFoundation.framwork
CoreTelephony.framework
CoreMedia.framework
AudioToolbox.framework
VideoToolbox.framework
libc++.tbd (注2)
libsqlite3.0.tbd
libz.tbd

注1:开发者应根据自身项目,将不冲突的依赖库也添加进工程。

注2:在 SDK 3.0.0 以前版本 (包括 3.0.0) ,c++ 库请使用 libstdc++6.0.9.tbd , 之后的版本统一替换成 libc++.tbd 。

Build Settings -> Other Linker Flags 里,添加选项 -ObjC

enter image description here

在工程配置 info.plist 文件中,添加条目 NSAppTransportSecurity ,属性设为 Dictionary。在此条目下添加键值对,key为 NSAllowsArbitraryLoads, 值为 YES

enter image description here

<span id="3.在AppDelegate.m引用"NIMSDK.h"并初始化SDK">3. 在AppDelegate.m引用"NIMSDK.h"并初始化SDK

#import "AppDelegate.h"
#import "NIMSDK.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 添加 SDK 初始化方法    
    //cerName为推送证书名,如果前期测试不需要的话,可以直接填nil
    [[NIMSDK sharedSDK] registerWithAppID:@"45c6af3c98409b18a84451215d0bdd6e"
                                  cerName:nil];

    return YES;
}

4. 在Main.storyboard创建控件并实现与ViewController的对应

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextField *name;//account
@property (weak, nonatomic) IBOutlet UITextField *pwd;//password

@end

@implementation ViewController


//Button用来执行login方法
- (IBAction)login:(UIButton *)sender {

}

5. 实现ViewController的login方法并实现登录

- (IBAction)login:(UIButton *)sender {
    NSString *account = _name.text;//获取控件的account
    NSString *token = _pwd.text;//获取控件的token

    NSString *pwd = [token tokenByPassword];//demo的Appkey登录是token会md5加密

    //手动登录,error为登录错误信息,成功则为nil。
    //不要在登录完成的回调中直接获取 SDK 缓存数据,而应该在 同步完成的回调里获取数据 或者 监听相应的数据变动回调后获取
    [[[NIMSDK sharedSDK] loginManager] login:account
                                   token:token
                              completion:^(NSError *error) {
  if (error == nil)
  {
     //初始化一个MainViewController
     MainViewController *main = [[MainViewController alloc] 
                                  initWithNibName:nil bundle:nil];
     //初始化一个navigation
     UINavigationController *navigation = [[UINavigationController alloc] 
                      initWithRootViewController:main];
     //添加到rootViewController
    [UIApplication sharedApplication].keyWindow.rootViewController 
                                = navigation];
  }
  }];
}

自行集成SDK详解

由于 NIM SDK 是静态库,且为了方便开发者使用,我们将armv7 i386 x86_64 arm64平台 的静 态库合并成一个Fat Library,导致整个 SDK 比较大。但实际编译时会根据调用功能多少增加 ipa 文件大小,实测大约只会增加2-3M左右

云信iOS SDK的要求

SDK支持7.0 Demo兼容8.0。

手动添加SDK

1.下载对应版本的 NIM SDK,得到一个 NIMSDK.a 文件和 ExportHeaders 文件夹,以及Libs

enter image description here

2.将三个文件复制到您的工程中

enter image description here

3.导入工程

enter image description here

enter image description here

4.添加其他 NIM SDK 依赖库

MobileCoreServices.framework
SystemConfiguration.framework
AVFoundation.framwork
CoreTelephony.framework
CoreMedia.framework
AudioToolbox.framework
VideoToolbox.framework
libc++.tbd (注2)
libsqlite3.0.tbd
libz.tbd

注1:开发者应根据自身项目,将不冲突的依赖库也添加进工程。

注2:在 SDK 3.0.0 以前版本 (包括 3.0.0) ,c++ 库请使用 libstdc++6.0.9.tbd , 之后的版本统一替换成 libc++.tbd 。

Build Settings -> Other Linker Flags 里,添加选项 -ObjC

enter image description here

在工程配置 info.plist 文件中,添加条目 NSAppTransportSecurity ,属性设为 Dictionary。在此条目下添加键值对,key为 NSAllowsArbitraryLoads, 值为 YES

enter image description here

注:在需要使用即时通讯 SDK 的地方 import "NIMSDK.h",在需要使用实时音视频 SDK 的地方 import "NIMAVChat.h"

初始化SDK详解

在需要使用 SDK 的地方导入头文件 NIMSDK.h

#import "AppDelegate.h"
#import "NIMSDK.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 添加 SDK 初始化方法    
    //cerName为推送证书名,如果前期测试不需要的话,可以直接填nil
    [[NIMSDK sharedSDK] registerWithAppID:@"45c6af3c98409b18a84451215d0bdd6e"
                                  cerName:nil];

    return YES;
}

注:推荐在 APP 启动时尽快注册 NIM SDK。

手动登录详解

初始化控件

Tip:在Main.storyboard中创建控件,并实现与代码一一对应

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextField *name;//account
@property (weak, nonatomic) IBOutlet UITextField *pwd;//password

@end

@implementation ViewController


//Button用来执行login方法
- (IBAction)login:(UIButton *)sender {

}

导入UIKit

Tip:1.可以利用静态库的方式; 2.可以从git上下载(这里是第二种)

enter image description here

从下载的文件中,复制NIMKit以及NIMKitResource.bundle到自己的工程中,并Add Files to 你的工程,并在需要的头文件中引用import “NIMKit.h”

enter image description here

实现button的监听事件登录跳转

Tip:手动登录的方法请参考开发文档

- (IBAction)login:(UIButton *)sender {
    NSString *account = _name.text;//获取控件的account
    NSString *token = _pwd.text;//获取控件的token

    NSString *pwd = [token tokenByPassword];//demo的Appkey登录是token会md5加密

    //手动登录,error为登录错误信息,成功则为nil。
    //不要在登录完成的回调中直接获取 SDK 缓存数据,而应该在 同步完成的回调里获取数据 或者 监听相应的数据变动回调后获取
    [[[NIMSDK sharedSDK] loginManager] login:account
                                   token:token
                              completion:^(NSError *error) {
  if (error == nil)
  {
     //初始化一个MainViewController
     MainViewController *main = [[MainViewController alloc] 
                                  initWithNibName:nil bundle:nil];
     //初始化一个navigation
     UINavigationController *navigation = [[UINavigationController alloc] 
                      initWithRootViewController:main];
     //添加到rootViewController
    [UIApplication sharedApplication].keyWindow.rootViewController 
                                = navigation];
  }
  }];
}

实现手动登录

Tip: 本节基于上节登录成功,返回的error为nil才可以实现跳转

#import "MainViewController.h"
#import "NIMKit.h"

@interface MainViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;//定义跳转会话界面的Button
@end

@implementation MainViewController


- (IBAction)start:(id)sender {
    //构建会话,这里sessionID是写死的,有需要的可以自行修改
    NIMSession *session = [NIMSession session:@"wujie" type:NIMSessionTypeP2P];
    //初始化SessionViewCongtroller
    NIMSessionViewController *vc = [[NIMSessionViewController alloc] 
                            initWithSession:session];
    //实现跳转
    [self.navigationController pushViewController:vc animated:YES];
}

@end

实现上述代码之后会跳转到我们的UI界面,并可以发起文本消息的收发,如果需要其它的基础消息,例如图片,文件消息需要您在此基础上自行实现。

Tip:这个时候可能会有没有头像,那就需要做如下操作:

由于 NIMKit 并不关心业务逻辑信息,比如用户昵称,用户头像等。用户可以通过 NIMKit 单例向 NIMKit 注入一个内容提供类,通过这个内容提供类,NIMKit 才能够正确的进行业务逻辑数据的绘制。

开发者需要自定义一个提供类并实现NIMKitDataProvider协议

enter image description here

并且,实现里面的方法(可以参考demo),并在app启动的时候注册。

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [[NIMSDK sharedSDK] registerWithAppID:@"45c6af3c98409b18a84451215d0bdd6e"
                                  cerName:nil];

    //这里的 NTESDataProvider 实现了 NIMKitDataProvider 协议
    [[NIMKit sharedKit] setProvider:[NTESDataManager sharedInstance]];

    return YES;
}

UI界面包括组件我们是开放源码的,我们最多只能做到组件接口的解释,至于其他深度定制请自行参考源码,头像以及其他用户资料请参考组件数据提供者章节。头像数据是在NTESDataManager,头像控件在NIMMessageCell

基于Demo开发

Demo及SDK、UIKIT下载


工程导入指引详解

在官网上下载相应的代码之后,进入下载demo源码,进入NIMDemo,然后打开xcworkspace

enter image description here

注: Demo是不支持pod操作的,Demo源码直接打开就可以在Xcode中运行,不需要在做其他相关的操作,请相关开发者请勿误操作

×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。