2.함수함수

Edit

2.1초기화 및 종료

2.1.1초기화

*  webRtc 초기화를 실행한다. 한번만 실행해야 한다.
- (void)initializeManager;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {


    [[NexusWebRTCManager sharedInstance] initializeManager];
...
}

2.1.2종료

- (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];
}
표 2-1응답 데이터 정의

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];
표 2-2응답 데이터 정의

name

object type

comment

more

NSNumber(BOOL)

요청한 데이터 이후가 존재하는지

invokeId

NSString

요청 invokeid

currentCount

NSNumber

요청에 응답의 현재 인덱스

totalCount

NSNumber

요청에 응답 개수

uuid

NSString

요청한 uuid (기본값은 NULL)

list

NSArray<ChatList>

ChatList 데이터 정의 참조

표 2-3ChatList 데이터 정의

name

object type

comment

groupId

NSString

room id

chat

NSDictionary<Chat>

Chat 데이터 정의 참조

표 2-4Chat 데이터 정의

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에러코드