[TOC]
1.概述
iLive_iOS_Play_SDK 是一個(gè)適用于iOS平臺(tái)的直播SDK,使用此SDK可以與CC視頻云服務(wù)進(jìn)行對(duì)接,在iOS端使用CC視頻的直播回放功能,本SDK只針對(duì)iOS手機(jī)播放端。
1.1 功能特性
功能 | 描述 |
---|---|
回放視頻 | 觀看直播回放視頻 |
文檔展示 | 觀看直播時(shí)展示的文檔 |
問答 | 觀看直播時(shí)的問答 |
歷史聊天數(shù)據(jù) | 觀看歷史聊天數(shù)據(jù) |
房間信息 | 觀看直播間信息 |
1.2 閱讀對(duì)象
本文檔為技術(shù)文檔,需要閱讀者:
- 具備基本的iOS開發(fā)能力
- 準(zhǔn)備接入CC視頻的直播回放SDK相關(guān)功能
- 對(duì)CC云直播產(chǎn)品使用方法有基礎(chǔ)的了解,使用幫助地址
2.開發(fā)準(zhǔn)備
2.1 開發(fā)環(huán)境
- Xcode : Xcode 開發(fā)IDE
2.2 錯(cuò)誤碼及錯(cuò)誤描述
(1). 業(yè)務(wù)錯(cuò)誤
typedef NS_ENUM(NSInteger, ERROR_SERVICE_TYPE) {
ERROR_ROOM_STATE = 1001,//@"直播間狀態(tài)不可用,可能沒有開始推流"
ERROR_USELESS_INFO = 1002,//@"沒有獲取到有用的視頻信息"
ERROR_PASSWORD = 1003,//@"密碼錯(cuò)誤"
};
(2). 系統(tǒng)錯(cuò)誤
typedef NS_ENUM(NSInteger, ERROR_SYSTEM_TYPE) {
ERROR_RETURNDATA = 1004,//@"返回內(nèi)容格式錯(cuò)誤"
ERROR_PARAMETER = 1005,//@"可能是參數(shù)錯(cuò)誤"
ERROR_NETWORK = 1006,//@"網(wǎng)絡(luò)錯(cuò)誤"
};
日志工具類
(1) 單例模式
/**
- @brief 獲取單例對(duì)象
*/
- (instancetype)sharedInstance;
/**
- @brief 是否需要存儲(chǔ)日志信息到文件中,最好在AppDelegate類里面調(diào)用,這樣就適用于全局日
- 志的存儲(chǔ),當(dāng)然中途調(diào)用也可以,從調(diào)用后開始應(yīng)用之后的日志存儲(chǔ)邏輯
*/
-(void)isNeedToSaveLog:(BOOL)needsave;
/**
- @brief 存儲(chǔ)日志的信息
- action相當(dāng)于key,也可以理解為存儲(chǔ)的事件名稱
- logStr相當(dāng)于value,也可以理解為存儲(chǔ)的日志信息字符串
*/
-(void)saveLog:(NSString *)logStr action:(NSString *)action;
(2) 示例應(yīng)用及說明
在CCSDK中相關(guān)的信息已經(jīng)做了日志打印的相關(guān)處理操作,但是在demo中也添加了幾句話,用戶也可以自定義添加自己需要的日志,用于記錄或者調(diào)試都可以。
注意:
SDK中設(shè)置的日志存儲(chǔ)目錄為:NSHomeDirectory()/Library/CCLog/ ,存儲(chǔ)文件名為yyyy-MM-dd.log
SDK中如果開啟了日志存儲(chǔ)以后,日志只存不刪,需要使用者按照自己的邏輯進(jìn)行刪除
1. 在AppDelegate.m中添加了
[[SaveLogUtil sharedInstance]isNeedToSaveLog:YES];
表示設(shè)置為記錄日志log
2. 在PlayForPCVC.m中添加了
[[SaveLogUtil sharedInstance] saveLog:@"" action:@"視頻加載成功或開始播放,多次調(diào)用,不必關(guān)心"];
表示視頻加載成功或開始播放
3. PlayBackVC.m中添加了
[[SaveLogUtil sharedInstance] saveLog:@"" action:@"視頻加載成功或開始播放,多次調(diào)用,不必關(guān)心"];
表示視頻加載成功或開始播放
3.快速集成
首先,需要下載最新版本的SDK,下載地址為:Live_iOS_Play_SDK
集成前需要知道的事情:
- 工程分三個(gè)部分:一個(gè)有連麥功能(Demo-觀看端有連麥),體積較大,一個(gè)無連麥功能(Demo-觀看端無連麥),體積較小,第三個(gè)部分是離線下載回放(Demo-離線下載),其中離線下載回放中的CCSDK用有連麥的庫和無連麥的庫都可以,示例中用的無連麥的庫(體積較小)
- (重要)本SDK只支持真機(jī),不支持模擬器
- (重要)本SDK只支持iOS8.0及以上版本,iOS7.x版本不支持
- (重要)當(dāng)使用有連麥工程時(shí),分為音視頻連麥和音頻連麥兩種連麥,有連麥的demo中沒有以頁面體現(xiàn)兩種連麥的按鈕,當(dāng)選中簡介時(shí),連麥為音視頻連麥,當(dāng)選中 文檔,聊天或問答任意一個(gè)時(shí),連麥為音頻連麥,代碼使中用_isAudioVideo加以區(qū)分,當(dāng)_isAudioVideo==YES;時(shí)為音視頻連麥,當(dāng)_isAudioVideo==NO;時(shí)為音頻連麥
3.1 導(dǎo)入framework
三個(gè)工程SDK目錄都在工程目錄下的CCSDK文件夾中,文件夾中的所有文件都屬于SDK部分,應(yīng)全部應(yīng)用(注意不要遺漏socketio.html文件)
3.2 Demo
- Demo-觀看端有連麥實(shí)現(xiàn)了基本的播放,在線回放邏輯,可以直接運(yùn)行
- Demo-觀看端無連麥實(shí)現(xiàn)了基本的播放,在線回放邏輯,可以直接運(yùn)行,除無連麥外,功能同上
- Demo-離線下載實(shí)現(xiàn)了基本的離線下載和離線回放邏輯,可以直接運(yùn)行(其中的CCSDK用4,5兩個(gè)工程中的任意一個(gè)CCSDK文件夾即可)
3.3 配置依賴庫
在項(xiàng)目/General/Linked framework and libraries 中不要忘記添加對(duì)用的依賴
基礎(chǔ)配置類PlayParameter
@property(nonatomic, copy)NSString *userId;//用戶ID
@property(nonatomic, copy)NSString *roomId;//房間ID
@property(nonatomic, copy)NSString *viewerName;//用戶名稱
@property(nonatomic, copy)NSString *token;//房間密碼
@property(nonatomic, copy)NSString *liveId;//回放ID,回放時(shí)才用到
@property(nonatomic, copy)NSString *recordId;//回放ID
@property(nonatomic, copy)NSString *viewerCustomua;//用戶自定義參數(shù),需和后臺(tái)協(xié)商,沒有定制傳@""
@property(nonatomic, copy)NSString *destination;//下載文件解壓到的目錄路徑(離線下載相關(guān))
@property(nonatomic,strong)UIView *docParent;//文檔父類窗口
@property(nonatomic,assign)CGRect docFrame;//文檔區(qū)域
@property(nonatomic,strong)UIView *playerParent;//視頻父類窗口
@property(nonatomic,assign)CGRect playerFrame;//視頻區(qū)域
@property(nonatomic,assign)BOOL security;//是否使用https,靜態(tài)庫暫時(shí)只能使用http協(xié)議
/*
* 0:IJKMPMovieScalingModeNone
* 1:IJKMPMovieScalingModeAspectFit
* 2:IJKMPMovieScalingModeAspectFill
* 3:IJKMPMovieScalingModeFill
*/
@property(assign, nonatomic)NSInteger scalingMode;//屏幕適配方式,含義見上面
@property(nonatomic,strong)UIColor *defaultColor;//ppt默認(rèn)底色,不設(shè)置(nil)默認(rèn)為白色
@property(nonatomic,assign)BOOL pauseInBackGround;//后臺(tái)是否繼續(xù)播放,注意:如果開啟后臺(tái)播放需要打開 xcode->Capabilities->Background Modes->on->Audio,AirPlay,and Picture in Picture
/*
* PPT適配模式分為三種,
* 1.一種是全部填充屏幕,可拉伸變形,
* 2.第二種是等比縮放,橫向或豎向貼住邊緣,另一方向可以留黑邊,
* 3.第三種是等比縮放,橫向或豎向貼住邊緣,另一方向出邊界,裁剪PPT,不可以留黑邊
*/
@property(assign, nonatomic)NSInteger PPTScalingMode;//PPT適配方式,含義見上面
3.4 登錄直播間
可以登錄也可以不登錄,本文檔是按照需要登錄設(shè)計(jì)的,如不需登錄請(qǐng)?zhí)^3.4
首先導(dǎo)入頭文件
#import "CCSDK/CCLiveUtil.h"
#import "CCSDK/RequestDataPlayBack.h"
配置參數(shù)
//更多參數(shù)請(qǐng)查看PlayParameter 屬性
PlayParameter *parameter = [[PlayParameter alloc] init];
parameter.userId = @"用戶ID";
parameter.roomId = @"房間ID";
parameter.liveId = @"直播ID,回放時(shí)才用到";
parameter.recordId = @"回放ID";
parameter.viewerName = @"用戶名稱";
parameter.token = @"房間密碼";
parameter.security = @"是否使用https,靜態(tài)庫暫時(shí)只能使用http協(xié)議";
parameter.pauseInBackGround = YES;后臺(tái)是否繼續(xù)播放
_requestDataPlayBack = [[RequestDataPlayBack alloc] initWithParameter:parameter];
_requestDataPlayBack.delegate = self;;//需要實(shí)現(xiàn)RequestDataPlayBackDelegate代理方法
實(shí)現(xiàn)代理方法
#pragma mark - RequestDataPlayBackDelegate
/**
* @brief 請(qǐng)求成功
*/
-(void)requestSucceed {
// NSLog(@"請(qǐng)求成功!");
}
/**
* @brief 登錄請(qǐng)求失敗
*/
-(void)requestFailed:(NSError *)error reason:(NSString *)reason {
NSString *message = nil;
if (reason == nil) {
message = [error localizedDescription];
} else {
message = reason;
}
}
3.5 開啟視頻直播回放
跳轉(zhuǎn)到直播回放頁面,配置觀看直播回放同樣需要導(dǎo)入頭文件
#import "CCSDK/CCLiveUtil.h"
#import "CCSDK/RequestDataPlayBack.h"
配置參數(shù),和登錄時(shí)配置的參數(shù)差不多,很多參數(shù)都是登錄傳過來的
PlayParameter *parameter = [[PlayParameter alloc] init];
parameter.userId = @"用戶ID";
parameter.roomId = @"房間ID";
parameter.liveId = @"直播ID,回放時(shí)才用到";
parameter.recordId = @"回放ID";
parameter.viewerName = @"用戶名稱";
parameter.token = @"房間密碼";
parameter.playerParent = self.videoView;//視頻父類窗口
parameter.playerFrame = _videoRect//視頻區(qū)域;
parameter.security = NO;
parameter.pauseInBackGround = YES;
parameter.defaultColor = [UIColor whiteColor];
parameter.scalingMode = 1;
_requestDataPlayBack = [[RequestDataPlayBack alloc] initWithParameter:parameter];
_requestDataPlayBack.delegate = self;
3.6 文檔觀看
PlayParameter增加兩個(gè)屬性
@property(nonatomic,strong)UIView *docParent;//文檔父類窗口
@property(nonatomic,assign)CGRect docFrame;//文檔區(qū)域
4. 功能使用
4.1 RequestDataPlayBack回放請(qǐng)求類介紹
4.1.1 在回放PlayBackViewController.m中主要調(diào)用此類來和此SDK交互
4.1.2 RequestDataPlayBack中的成員變量
@property (weak,nonatomic) id<RequestDataPlayBackDelegate> delegate;//代理
@property (retain, atomic) id<IJKMediaPlayback> ijkPlayer;//播放器
播放器倍速,直播和回放都可以用,一般只用于回放
ijkPlayer.playbackRate = 1.5; 設(shè)置播放器以1.5倍速播放,其他倍速同理,可快可慢
float speed = ijkPlayer.playbackRate; 獲取當(dāng)前播放器的播放速度,并賦值給speed變量
4.1.3 RequestDataPlayBack中的成員方法
/**
* @brief 登錄房間
* @param parameter 配置參數(shù)信息
* 必填參數(shù) userId
* 必填參數(shù) roomId
* 必填參數(shù) liveid
* 必填參數(shù) viewerName
* 必填參數(shù) token
* 必填參數(shù) security
*/
- (id)initLoginWithParameter:(PlayParameter *)parameter;
/**
* @brief 進(jìn)入房間,并請(qǐng)求畫圖聊天數(shù)據(jù)并播放視頻(可以不登陸,直接從此接口進(jìn)入直播間)
* @param parameter 配置參數(shù)信息
* 必填參數(shù) userId;
* 必填參數(shù) roomId;
* 必填參數(shù) liveid;
* 必填參數(shù) viewerName;
* 必填參數(shù) token;
* 必填參數(shù) docParent;
* 必填參數(shù) docFrame;
* 必填參數(shù) playerParent;
* 必填參數(shù) playerFrame;
* 必填參數(shù) security;
* 必填參數(shù) pauseInBackGround;
* 必填參數(shù) defaultColor;
* 必填參數(shù) PPTScalingMode;
* 必填參數(shù) scalingMode;
*/
- (id)initWithParameter:(PlayParameter *)parameter;
/**
* @brief 銷毀文檔和視頻,清除視頻和文檔的時(shí)候需要調(diào)用,推出播放頁面的時(shí)候也需要調(diào)用
*/
- (void)requestCancel;
/**
* @brief time:從直播開始到現(xiàn)在的秒數(shù),SDK會(huì)在畫板上繪畫出來相應(yīng)的圖形
*/
- (void)continueFromTheTime:(NSInteger)time;
/**
* @brief 獲取文檔區(qū)域內(nèi)白板或者文檔本身的寬高比,返回值即為寬高比,做屏幕適配用
*/
- (CGFloat)getDocAspectRatio;
/**
* @brief 改變文檔區(qū)域大小,主要用在文檔生成后改變文檔窗口的frame
*/
- (void)changeDocFrame:(CGRect) docFrame;
/**
* @brief 改變播放器frame
*/
- (void)changePlayerFrame:(CGRect) playerFrame;
/**
* @brief 播放器暫停
*/
- (void)pausePlayer;
/**
* @brief 播放器播放
*/
- (void)startPlayer;
/**
* @brief 播放器關(guān)閉
*/
- (void)shutdownPlayer;
/**
* @brief 播放器停止
*/
- (void)stopPlayer;
/**
* @brief 從頭播放
*/
- (void)replayPlayer;
/**
* @brief 播放器是否播放
*/
- (BOOL)isPlaying;
/*
* @brief 播放器當(dāng)前播放時(shí)間
*/
- (NSTimeInterval)currentPlaybackTime;
/*
* @brief 設(shè)置播放器當(dāng)前播放時(shí)間(用于拖拽進(jìn)度條時(shí)掉用的)
*/
- (void)setCurrentPlaybackTime:(NSTimeInterval)time;
/*
* @brief 回放視頻總時(shí)長
*/
- (NSTimeInterval)playerDuration;
/**
* @brief 設(shè)置后臺(tái)是否可播放
*/
- (void)setpauseInBackGround:(BOOL)pauseInBackGround;
4.2 事件監(jiān)聽
事件監(jiān)聽只需要實(shí)現(xiàn)對(duì)應(yīng)的代理方法即可
4.2.1 獲取文檔內(nèi)白板或者文檔本身的寬高
/**
* @brief 獲取文檔內(nèi)白板或者文檔本身的寬高,來進(jìn)行屏幕適配用的
*/
- (void)getDocAspectRatioOfWidth:(CGFloat)width height:(CGFloat)height;
4.2.2 歷史提問&回答
/**
* @brief 收到本房間的歷史提問&回答
*/
- (void)onParserQuestionArr:(NSArray *)questionArr onParserAnswerArr:(NSArray *)answerArr;
4.2.3 歷史聊天數(shù)據(jù)
/**
* @brief 解析本房間的歷史聊天數(shù)據(jù)
*/
-(void)onParserChat:(NSArray *)arr;
4.2.4 請(qǐng)求回放地址成功
/**
* @brief 請(qǐng)求回放地址成功
*/
-(void)requestSucceed;
4.2.5 請(qǐng)求回放地址失敗
/**
* @brief 請(qǐng)求回放地址失敗
*/
-(void)requestFailed:(NSError *)error reason:(NSString *)reason;
4.2.6 登錄成功
/**
* @brief 登錄成功
*/
- (void)loginSucceedPlayBack;
4.2.7 登錄失敗
/**
* @brief 登錄失敗
*/
-(void)loginFailed:(NSError *)error reason:(NSString *)reason;
4.2.8 獲取房間信息
/**
* @brief 獲取房間信息,主要是要獲取直播間模版來類型,根據(jù)直播間模版類型來確定界面布局
* 房間簡介:dic[@"desc"];
* 房間名稱:dic[@"name"];
* 房間模版類型:[dic[@"templateType"] integerValue];
* 模版類型為1: 聊天互動(dòng): 無 直播文檔: 無 直播問答: 無
* 模版類型為2: 聊天互動(dòng): 有 直播文檔: 無 直播問答: 有
* 模版類型為3: 聊天互動(dòng): 有 直播文檔: 無 直播問答: 無
* 模版類型為4: 聊天互動(dòng): 有 直播文檔: 有 直播問答: 無
* 模版類型為5: 聊天互動(dòng): 有 直播文檔: 有 直播問答: 有
* 模版類型為6: 聊天互動(dòng): 無 直播文檔: 無 直播問答: 有
*/
-(void)roomInfo:(NSDictionary *)dic;
4.2.9 加載視頻失敗
/*
* 加載視頻失敗
*/
- (void)playback_loadVideoFail;
4.2.10 回放翻頁數(shù)據(jù)列表
/*
* 回放翻頁數(shù)據(jù)列表
* docName 文檔名稱
* url 文檔url
* pageTitle 頁面標(biāo)題
* time 翻頁時(shí)間
*/
- (void)pageChangeList:(NSMutableArray *)array;
4.2.11 雙擊ppt(The new method)
/**
* @brief 雙擊ppt(The new method)
*/
- (void)doubleCllickPPTView;
4.2.11 獲取PPT當(dāng)前頁數(shù)和總頁數(shù)
/**
* @brief 獲取ppt當(dāng)前頁數(shù)和總頁數(shù)(The new method)
*
* 回調(diào)當(dāng)前翻頁的頁數(shù)信息 <br/>
* 白板docTotalPage一直為0, pageNum從1開始<br/>
* 其他文檔docTotalPage為正常頁數(shù),pageNum從0開始<br/>
* @param dictionary 翻頁信息
*/
- (void)onPageChange:(NSDictionary *) dictionary;
4.2.12 獲取歷史廣播
/**
* @brief 收到歷史廣播(The new method)
* content 廣播內(nèi)容
* time 發(fā)布時(shí)間(單位:秒)
*/
- (void)broadcastHistory_msg:(NSArray *)History_msg;
4.3.播放器監(jiān)聽
添加播放器監(jiān)聽事件(監(jiān)聽播放狀態(tài)改變)
1. 播放器的監(jiān)聽事件有以下幾種
1. IJKMPMoviePlayerLoadStateDidChangeNotification 視頻加載視頻狀態(tài)發(fā)生改變
(1)IJKMPMovieLoadStateStalled 正在加載
(2)IJKMPMovieLoadStatePlayable 可以播放
(3)IJKMPMovieLoadStatePlaythroughOK 已經(jīng)緩存完成,如果設(shè)置了自動(dòng)播放,這時(shí)會(huì)自動(dòng)播放
2. IJKMPMoviePlayerPlaybackStateDidChangeNotification 視頻播放狀態(tài)發(fā)生改變
(1)IJKMPMoviePlaybackStateStopped 播放停止
(2)IJKMPMoviePlaybackStatePlaying 播放
(3)IJKMPMoviePlaybackStatePaused 暫停
(4)IJKMPMoviePlaybackStateInterrupted 打斷(停止,中斷)
(5)IJKMPMoviePlaybackStateSeekingForward 向前拖動(dòng)
(6)IJKMPMoviePlaybackStateSeekingBackward 向后拖動(dòng)
3. IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey 視頻播放終止播放原因
4. IJKMPMoviePlayerPlaybackDidFinishNotification 視頻終止播放
5. IJKMPMovieNaturalSizeAvailableNotification 視頻開始播放時(shí),用這個(gè)可以監(jiān)聽到視頻的分辨率
6. IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey 視頻播放完成(有可能是加載失敗,也有可能是播放結(jié)束)
7. IJKMPMoviePlayerPlaybackDidFinishNotification 視頻播放完成(有可能是加載失敗,也有可能是播放結(jié)束)
4.4 接收數(shù)據(jù)格式介紹
1 收到提問&回答(RequestDataDelegate和RequestDataPlayBackDelegate 中代理方法)
RequestDataDelegate中代理名稱如下:
- (void)onQuestionArr:(NSArray *)questionArr onAnswerArr:(NSArray *)answerArr;
RequestDataPlayBackDelegate中代理名稱如下:
- (void)onParserQuestionArr:(NSArray *)questionArr onParserAnswerArr:(NSArray *)answerArr;
2 提問格式,數(shù)組
(
{
content = question;//問題內(nèi)容
encryptId = 2264AF619DD010E9;//問題ID
id = 342854;//提問ID,此ID和上面的encryptId無差別,都是提問的唯一標(biāo)志,且和下面的回答id是一對(duì)多對(duì)應(yīng),一個(gè)問題可以有多條回答信息
isPublish = 1;//問題是否發(fā)布
questionUserAvatar = "";//頭像
questionUserId = 00d30351184d4cbdb0fcbadd9a55ba1c;//提問問題的用戶的用戶id
questionUserName = qwer;//提問問題用戶的用戶名
time = 69006;//提問問題時(shí)間點(diǎn)(毫秒)
triggerTime = "2017-11-21 13:50:19";//具體時(shí)間點(diǎn)
}
)
3 收到提問(RequestDataDelegate中代理方法)
- (void)onQuestionDic:(NSDictionary *)questionDic;
{
action = question;
time = 0;//新的提問和回答時(shí)間全部為0,歷史的提問和回答才有正確時(shí)間
value = {
content = question;
id = BC2D248818827729;//如果該用戶被禁言后,該用戶發(fā)出問題的id都為-1,并且該問題只會(huì)發(fā)送給該用戶,不會(huì)發(fā)送給其他用戶
triggerTime = "2017-11-21 14:02:54";
userAvatar = "";
userId = 9c408a9761d74cb9b64587b2776c5327;
userName = qwer;
};
}
注:提問者角色默認(rèn)為學(xué)生
4 收到回答(RequestDataDelegate中代理方法)
- (void)onAnswerDic:(NSDictionary *)answerDic;
{
action = answer;
time = 0;//新的提問和回答時(shí)間全部為0,歷史的提問和回答才有正確時(shí)間
value = {
content = answer;
isPrivate = 0;
questionId = BC2D248818827729;
questionUserId = 9c408a9761d74cb9b64587b2776c5327;
triggerTime = "2017-11-21 14:04:17";
userAvatar = "";
userId = 4c70191006d54d549e43ccff4bc1bfd1;
userName = admin;
userRole = publisher;
};
}
5 收到30條歷史聊天數(shù)據(jù)信息(RequestDataDelegate中代理方法)
- (void)onChatLog:(NSArray *)chatLogArr;
(
{
content = message;//聊天內(nèi)容
time = 68996;//聊天時(shí)間(毫秒)
userAvatar = "";//聊天者頭像
userCustomMark = "";//個(gè)性化信息
userId = 00d30351184d4cbdb0fcbadd9a55ba1c;//聊天者id
userName = qwer;//聊天者用戶名
userRole = student;//聊天者用戶角色
}
)
6 收到學(xué)生發(fā)送的公聊信息(RequestDataDelegate中代理方法)
- (void)onPublicChatMessage:(NSDictionary *)dic;
{
msg = chat;//內(nèi)容
time = "14:10:16";//時(shí)間
useravatar = "";//頭像
usercustommark = "";//個(gè)性化信息
userid = 9c408a9761d74cb9b64587b2776c5327;//用戶id
username = qwer;//用戶名
userrole = student;//用戶角色
}
7 收到學(xué)生禁言消息(RequestDataDelegate中代理方法)
(void)onSilenceUserChatMessage:(NSDictionary *)message;
{
msg = asdfghj;
time = "14:13:53";
useravatar = "";
usercustommark = "";
userid = 9c408a9761d74cb9b64587b2776c5327;
username = qwer;
userrole = student;
}
8 收到學(xué)生私聊(RequestDataDelegate中代理方法)
(void)OnPrivateChat:(NSDictionary *)dic;
{
fromuseravatar = "";
fromuserid = 9c408a9761d74cb9b64587b2776c5327;
fromusername = qwer;
fromuserrole = student;
usercustommark = "";
msg = chat;
time = "14:11:32";
touserid = 00d30351184d4cbdb0fcbadd9a55ba1c;
}
9 聊天信息數(shù)組(RequestDataPlayBackDelegate中代理方法)
-(void)onParserChat:(NSArray *)chatArr;
(
{
content = aaa;//聊天內(nèi)容
time = 27;//聊天的時(shí)間點(diǎn)
userAvatar = "";//聊天用戶頭像
userCustomMark = "";//個(gè)性化信息
userId = 00942719153943a4a847d8c9278f030d;//聊天用戶id
userName = admin;//聊天用戶名
userRole = publisher;//聊天用戶角色
}
)
5.API查詢
Doc目錄打開index.html文件
6.Q&A
6.1如發(fā)現(xiàn) dyld: Library not loaded: @rpath/CCPush.framework/CCPush
Referenced from: /var/containers/Bundle/Application/3CC41924-7F22-48FC-AAD1-7C2C089EF749/demo.app/demo
Reason: image not found問題
將報(bào)錯(cuò)的類庫添加進(jìn)入
General -> Embedded Binaries 和 General -> Linked Frameworks and Libraries 兩處即可