2.1초기화 및 종료
2.1.1초기화
* webRtc 초기화를 실행한다. 한번만 실행해야 한다.
- (void)initializeManager;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[NexusWebRTCManager sharedInstance] initializeManager]; ... }
2.1.2종료
webRtc 사용 종료처리한다.
- (void)cleanup;
- (void)applicationWillTerminate:(UIApplication *)application { [[NexusWebRTCManager sharedInstance] cleanup]; }
2.2설정
2.2.1접속 서버를 세팅
서버 정보를 세팅한다.
- (void)setLoginServerInfo:(NSString *)serverIP serverURL:(NSString *)serverURL
- serverIP
Web RTC Server Domain ex) nexus.co.kr
- serverURL
Web Server URL ex) ws://10.10.10.1:8060 , wss://10.10.10.1:8061
NSString* serverIP = @"nexuscommunity.net"; NSString* serverURL = @"ws://10.10.90.237:8060"; [[NexusWebRTCManager sharedInstance] setLoginServerInfo:serverIP serverURL:serverURL];
2.2.2사용자 정보 세팅
로그인을 위해 사용자의 계정정보를 입력한다.
- (void)setLoginUserInfo:(NSString *)userDN userId:(NSString *)userId password:(NSString *)password
- userDN
User Display Name
- userId
User Id
- password
User Pasword
NSString* userDN = @"3011"; NSString* userId = @"3011"; NSString* password = @"1111"; [[NexusWebRTCManager sharedInstance] setLoginServerInfo:serverIP serverURL:serverURL]; [[NexusWebRTCManager sharedInstance] setLoginUserInfo:userDN userId:userId password:password];
2.2.3접속 기타 설정(모바일의 경우 push Token 설정을 반드시 해야 한다.)
로그인을 위한 접속 설정 및 push token 세팅
- (void)setLoginEtc:(NSString *)pushKey reconnectCount:(int)reconnectCount reconnectTerm:(int)reconnectTerm;
- pushKey
APNS 를 사용하기 위한 단말 push token 값
- reconnectCount
접속실패시 재접속 횟수 설정
- reconnectTerm
재접속시 Delay 값 설정
[[NexusWebRTCManager sharedInstance] setLoginEtc:[UserManager sharedInstance].voipPushToken reconnectCount:10 reconnectTerm:5000];
2.3콜백
2.3.1이벤트 콜백
- (void)nexusWebRTCManagerCallBack:(NSDictionary *)json;
- json
NSDictionary 형태의 login 및 call 관련 이벤트가 들어온다.
- (void)nexusWebRTCManagerMessageCallBack:(NSDictionary *)json;
- json
NSDictionary 형태의 채팅 관련 이벤트가 들어온다.
- (void)nexusWebRTCManagerSIPCallBack:(NSDictionary *)json;
- json
NSDictionary 형태의 실제 debug 를 구한 데이터 send/recv 의 패킷이 들어온다
2.3.2이벤트 콜백 등록
콜백을 받을 객체를 지정한다.
@interface LoginViewController ()<NexusWebRTCManagerDelegate> { ... } @implementation LoginViewController ... // call back setting [[NexusWebRTCManager sharedInstance] setDelegate:self]; ... @end
2.3.3이벤트 콜백 함수 선언
deleagate 로 지정된 class 에 아래의 함수들이 선언 되어야 한다. 자세한 연동은 데모앱을 참조 하면 된다.
#pragma mark - #pragma mark NexusWebRTCManagerDelegate - (void)nexusWebRTCManagerCallBack:(NSDictionary *)json { NSLog(@"nexusWebRTCManagerCallBack = %@", json); ... } - (void)nexusWebRTCManagerSIPCallBack:(NSDictionary *)json { NSLog(@"nexusWebRTCManagerSIPCallBack = %@", json); ... } - (void)nexusWebRTCManagerMessageCallBack:(NSDictionary *)json { ... }
2.4로그인/로그아웃
2.4.1로그인 요청
서버에 로그인을 요청한다. 로그인 성공은 이벤트 콜백 으로 확인 가능하다.
- (BOOL)login:(NSError **)error
- return
요청에 오류가 있을 경우 YES 를 반환한다.
- error
요청에 오류가 있을 경우 nil 이 아닌 값을 반환 한다.
BOOL success = [[NexusWebRTCManager sharedInstance] login:&error]; if(success == NO){ NSLog(@"%@ \n Error:[%@]", _descTextView.text, error); }
2.4.2로그아웃
로그 아웃 처리를 한다. 로그아웃 성공은 이벤트 콜백으로 확인 가능하다.
- (void)logout
[[NexusWebRTCManager sharedInstance] logout];
2.5통화
2.5.1전화걸기
전화 걸기를 요청한다.
- (BOOL)call:(NSString *)number error:(NSError **)error;
- number
발신한 상대방의 jid 값 또는 전화번호
- return
요청에 오류가 있을 경우 YES 를 반환한다.
- error
요청에 오류가 있을 경우 nil 이 아닌 값을 반환 한다.
- (IBAction)onClickMakeCall:(id)sender { NSError *error = nil; BOOL success = [[NexusWebRTCManager sharedInstance] call:_outgoingNumberField.text error:&error]; if(success == NO){ _descTextView.text = [NSString stringWithFormat:@"%@ \n Error:[%@]", _descTextView.text, error ]; } }
2.5.2전화받기
전화 수신에 대해 받기 처리한다.
- (void)answer;
- (IBAction)onClickAnswer:(id)sender { [[NexusWebRTCManager sharedInstance] answer]; }
2.5.3전화끊기(전화거절)
전화 수신에 대해 끊기(거절) 처리한다.
- (void)close;
- (IBAction)onClickClose:(id)sender { [[NexusWebRTCManager sharedInstance] close]; }
2.6통화중 기능
2.6.1통화 전환(blind transfer)
통화중인 전화를 제3자에게 전환 처리 한다.
- (BOOL)transfer:(NSString *)number error:(NSError **)error;
- number
전환할 대상의 jid 값 또는 전화번호
- return
요청에 오류가 있을 경우 YES 를 반환한다.
- error
요청에 오류가 있을 경우 nil 이 아닌 값을 반환 한다.
- (IBAction)onClickTransfer:(id)sender { NSError *error = nil; BOOL success = [[NexusWebRTCManager sharedInstance] transfer:_transferNumberField.text error:&error]; if(success == NO){ _descTextView.text = [NSString stringWithFormat:@"%@ \n Error:[%@]", _descTextView.text, error ]; } }
2.6.2보류
통화중인 전화를 보류 시킨다.
- (void)hold;
- (IBAction)onClickHold:(id)sender { [[NexusWebRTCManager sharedInstance] hold]; }
2.6.3보류 해제
보류중인 전화를 정상으로 변경 시킨다.
- (void)resume;
- (IBAction)onClickResume:(id)sender { [[NexusWebRTCManager sharedInstance] resume]; }
자신이 보류 시킨 상태를 해제 하는 것이다. 상대방이 보류 시킨것은 해제 할수 없다.
2.6.4DTMF
DTMF 를 INFO 로 전달한다.
- (void)dtmf:(NSString *)msg;
- msg
DTMF 로 전달할 정보 ( 0~9, #,* )
- (IBAction)onClickDtmp:(id)sender { [[NexusWebRTCManager sharedInstance] dtmf:_dtmfField.text]; }
2.6.5Mute
2.6.5.1Mute 설정
- (void)mute:(BOOL)isMute;
- isMute
YES 이면 Mute 처리, NO 일 경우 해제.
- (IBAction)onClickMute:(id)sender { [[NexusWebRTCManager sharedInstance] mute:YES]; }
2.6.6스피커
2.6.6.1스피커 활성화/비활성화
- (void)speakerOnOff:(BOOL)isSpeaker;
- isSPeaker
YES 이면 미디어가 Speaker 로 나오고, NO 일 경우 earpiece or BLE 등으로 나온다.
- (IBAction)onClickSpeaker:(id)sender { [[NexusWebRTCManager sharedInstance] speakerOnOff:YES]; }
2.6.6.2미디어 Route 상태정보
- (RouteType)isSpeakerRoute;
- RouteType
현상태의 route 가 speaker, earpiec, headset, bluetooth 중 무엇인지 확인 할수 있다.
- (void)routeChange:(NSNotification*)notification { NSDictionary *interuptionDict = notification.userInfo; NSInteger routeChangeReason = [[interuptionDict valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue]; switch (routeChangeReason) { case AVAudioSessionRouteChangeReasonCategoryChange: case AVAudioSessionRouteChangeReasonOverride: { dispatch_async(dispatch_get_main_queue(), ^{ RouteType routeType = [[NexusWebRTCManager sharedInstance] isSpeakerRoute]; if (routeType == ROUTE_TYPE_SPEAKER){ _speakerOnOfButton.selected = YES; }else{ _speakerOnOfButton.selected = NO; } }); } break; default: break; } }
2.7채팅
채팅 요청시 응답은 - (void)nexusWebRTCManagerMessageCallBack:(NSDictionary *)json 함수 구현을 통해서 받을수 있다.
2.7.1채팅방 리스트 요청
대화중인 채팅방 리스트를 요청한다. 방요청시 페이징 처리를 위해서 roomId 를 사용할수 있다.
- (void)requestChatRoomList:(int)limit roomId:(NSString *)roomId;
- limit
요청할 방 개수
- roomId
요청시 마지막으로 받은 Room id 값. 초기요청시는 null
- (void)requestChatRoom { [[NexusWebRTCManager sharedInstance] requestChatRoomList:100 roomId:nil]; }
name | object type | comment |
---|---|---|
groupId | NSString | room id |
totalCount | NSNumber | 요청에 응답 개수 |
currentCount | NSNumber | 요청에 응답의 현재 인덱스 |
more | NSNumber(BOOL) | 요청한 데이터 이후가 존재하는지 |
uuid | NSString | 요청한 uuid (기본값은 NULL) |
creationDate | NSDate | room 생성일 |
modificationDate | NSDate | room 수정일 |
isNotify | NSNumber(BOOL) | 알림 여부 |
isGroup | NSNumber(BOOL) | 그룹 room 인지 여부 |
name | NSString | 방이름(기본값은 NULL) |
members | NSArray<String> | 참석자 리스트 (아이디 or 내선 배열) |
2.7.2채팅방의 이전 채팅 리스트 요청
채팅중의 채팅방의 이전 리스트를 요청한다.
- (void)requestChatMessageList:(int)limit roomId:(NSString *)roomId chatId:(NSString *)chatId;
- limit
요청할 채팅 리스트의 개수
- roomID
채팅방의 room Id 값, Not null
- chatID
채팅 리스트의 마지막 chat Id, 기본값은 null
[[NexusWebRTCManager sharedInstance] requestChatMessageList:PAGE_CHAT_MESSAGE_COUNT roomId:_chatGroupInfo.uuid chatId:nil];
name | object type | comment |
---|---|---|
more | NSNumber(BOOL) | 요청한 데이터 이후가 존재하는지 |
invokeId | NSString | 요청 invokeid |
currentCount | NSNumber | 요청에 응답의 현재 인덱스 |
totalCount | NSNumber | 요청에 응답 개수 |
uuid | NSString | 요청한 uuid (기본값은 NULL) |
list | NSArray<ChatList> | ChatList 데이터 정의 참조 |
name | object type | comment |
---|---|---|
groupId | NSString | room id |
chat | NSDictionary<Chat> | Chat 데이터 정의 참조 |
name | object type | comment |
---|---|---|
type | NSString | 메시지 타입(1:메시지, 2:초대, 3탈퇴, 4파일) |
chatId | NSString | chat id |
date | NSDate | 생성일 |
user | NSString | 요청자 |
message | NSString | type=1 일경우 만 사용 (메시지 내용) |
members | NSArray<String> | type=2 일경우 만 사용(초대자 리스트) |
fileName | NSString | type=4 일경우만 (파일명) |
fileSize | NSNumber | type=4 일경우만 (파일사이즈) |
2.7.3채팅방 생성
채팅방을 생성한다. 단, 채팅방 생성시 채팅 메시지가 하나 이상 필요하다.
채팅방 생성시 방이름은 빈값이다. 필요시 - (void)sendChatRoomRename:(NSString *)roomId name:(NSString *)name; (채팅방 이름변경) 함수를 이용할수 있다.
-(void)createChatRoom:(NSArray *)members message:(NSString *)message invokeId:(NSString *)invokeId;
- members
채팅방에 참석할 사용자 id(내선번호) 의 배열
- message
보낼 채팅 메시지
- invokeId
응답시 받을 key 값(사용자 임의로 설정 가능, 응답시 동일한 값을 받음)
-(void)createChatRoom:(NSArray *)members file:(NSDictionary *)fileInfo invokeId:(NSString *)invokeId;
- members
채팅방에 참석할 사용자 id(내선번호) 의 배열
- file
보낼 채팅 파일의 Dictionary ( url:파일의 경로 , name:파일명, size:사이즈)
- invokeId
응답시 받을 key 값(사용자 임의로 설정 가능, 응답시 동일한 값을 받음)
[[NexusWebRTCManager sharedInstance] requestChatMessageList:PAGE_CHAT_MESSAGE_COUNT roomId:_chatGroupInfo.uuid chatId:nil];
2.7.4채팅방 초대
채팅중의 채팅방에 사용자를 초대 (초대시는 백그라운드 알림은 발생하지 않는다)
- (void)sendChatMemberIn:(NSString *)roomId users:(NSArray *)users;
- roomId
채팅방의 room Id 값, Not null
- users
사용자 ID 및 내선 배열값
NSMutableArray *addUsers = [[NSMutableArray alloc] init]; for (NSDictionary *user in userArray) { NSString *extension = [user objectForKey:@"extension"]; if(extension && extension.length >0 ){ [addUsers addObject:extension]; continue; } } [[NexusWebRTCManager sharedInstance] sendChatMemberIn:_groupId users:addUsers];
2.7.5채팅방 나가기
채팅중의 채팅방에서 나가기
- (void)sendChatMemberOut:(NSString *)roomId userid:(NSString *)userid;
- roomId
채팅방의 room Id 값, Not null
- userid
자기자신 사용자 id 또는 내선
- (void)requestChatRoomOut:(NSString *)uuid { NSString* myId = [MyProfile sharedInstance].extension; [[NexusWebRTCManager sharedInstance] sendChatMemberOut:uuid userid:myId]; }
2.7.6채팅방 메시지 보내기
채팅방에서 메시지 보내기
- (void)sendChatMessage:(NSString *)roomId message:(NSString *)message;
- roomId
채팅방의 room Id 값, Not null
- message
보낼 메시지 text
[[NexusWebRTCManager sharedInstance] sendChatMessage:_chatGroupInfo.uuid message:_textView.text]
2.7.7채팅방 파일 보내기
채팅방에서 파일(이미지) 보내기
- (void)sendChatFile:(NSString *)roomId file:(NSDictionary *)fileInfo;
- roomId
채팅방의 room Id 값, Not null
- fileInfo
보낼 채팅 파일의 Dictionary ( url:파일의 경로 , name:파일명, size:사이즈)
NSDictionary *dic = @{@"url":@"", @"name":sendFileName, @"size":@(fileData.length), }; [[NexusWebRTCManager sharedInstance] sendChatFile:_chatGroupInfo.uuid file:dic];
2.7.8채팅방 이름 변경
채팅방의 이름을 지정할수 있다. 기본값은 빈값이다. 대화 상대방에게 보이는 채팅방 이름이랑은 무관하다.
- (void)sendChatRoomRename:(NSString *)roomId name:(NSString *)name;
- roomId
채팅방의 room Id 값, Not null
- name
변경할 채팅방 명
- (void)requestRenameRoom:(NSString *)uuid title:(NSString *)title { [[NexusWebRTCManager sharedInstance] sendChatRoomRename:uuid name:title]; }
2.7.9채팅방 알림설정
채팅방의 알림 설정을 할수 있다. 채팅방 생성시 기본값은 YES 이다. 채팅 상대방의 알림 설정이랑은 무관하다.
- (void)sendChatRoomNotify:(NSString *)roomId isNotify:(BOOL)isNotify;
- roomId
채팅방의 room Id 값, Not null
- isNotify
알림 설정 YES, NO 값 (기본값은 YES )
- (IBAction)switchValueChange:(id)sender { [[NexusWebRTCManager sharedInstance] sendChatRoomNotify:_groupId isNotify:(_alarmSwitch.on)]; }
2.8에러코드
-101 : Please check the server settings.(Domain)
-102: Please check the server settings.(URL)
-103 : The user DN does not exist.
-104 : The user ID does not exist.
-105 : The Passwod does not exist.
-106 : Plugin in null. (not init WebRTC)
-201 : There is no outgoing phone number.
-202 : There is no phone number.
-301 : error header.
-302 : error payload.