이 문서는 채널톡 iOS SDK(이하 SDK)의 ChannelIO에 대해서 설명합니다.
initialize
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
application | UIApplication | O | Application 객체입니다. |
ChannelIO
객체를 초기화 합니다. SDK의 메서드를 사용하기에 앞서 ChannelIO
초기화 과정이 필요합니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
ChannelIO.initialize(application)
...
return true
}
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[ChannelIO initialize:application];
return YES;
}
initializeWindow
SceneDelegate를 사용하는 경우에 필요합니다. UIWindowScene
으로 ChannelWindow
를 반환합니다.
클래스 변수로 ChannelIO
용 변수를 선언합니다. 아래 예시에서는 channelWindow
입니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
windowScene | UIWindow | O | UIWindowScene 객체입니다. |
class SceneDelegate: NSObject, UISceneDelegate {
var channelWindow: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let windowScene = scene as? UIWindowScene {
channelWindow = ChannelIO.initializeWindow(with: windowScene)
}
...
}
}
// SceneDelegate.m
@interface SceneDelegate ()
@property (strong, nonatomic) UIWindow * channelWindow;
@end
@implementation SceneDelegate
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
_channelWindow = [ChannelIO initializeWindowWith:(UIWindowScene *)scene];
}
@end
delegate
ChannelIO
에 발생하는 이벤트의 대리자입니다.
ChannelIO.delegate = self
...
ChannelIO.delegate = self;
boot
SDK를 사용하기 위해 필요한 정보를 로드합니다. 부트를 성공한 이후에는 채널톡의 기능을 사용할 준비를 마칩니다.
더 자세한 내용은 부트와 라이프 사이클을 참고합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
config | BootConfig | O | 부트 설정입니다. 플러그인 키, 채널톡 버튼 위치 등을 설정합니다. |
completion | ((BootStatus, User?) -> Void)? | X | 부트 상태와 유저 정보를 반환합니다. |
let bootConfig = BootConfig(pluginKey: YOUR_PLUGIN_KEY)
ChannelIO.boot(with: bootConfig) { (status, user) in
switch status {
case .success:
...
default:
...
}
}
BootConfig *bootConfig = [[BootConfig alloc] init];
[bootConfig setPluginKey:YOUR_PLUGIN_KEY];
[ChannelIO bootWith:bootConfig completion:^(BootStatus status, User *user) {
if (status == BootStatusSuccess && user != nil) {
// success
} else {
// show failed reason from bootStatus
}
}];
sleep
시스템 푸시 알림 수신과 track
을 제외한 모든 기능을 비활성화 합니다. 채널톡 서버와의 소켓 통신이 끊기기 때문에 실시간 기능 (채팅, 마케팅 팝업 등) 사용이 불가능합니다. 더 자세한 안내는 라이프 사이클을 참조합니다.
ChannelIO.sleep()
...
[ChannelIO sleep];
...
shutdown
SDK와 채널과의 연결을 끊습니다. SDK의 모든 기능 사용이 중단됩니다. 더 자세한 안내는 라이프 사이클을 참조합니다.
ChannelIO.shutdown()
...
[ChannelIO shutdown];
...
showChannelButton
전역 화면에 채널 버튼을 표시합니다.
ChannelIO.showChannelButton()
...
[ChannelIO showChannelButton];
...
hideChannelButton
전역 화면에서 채널 버튼을 숨깁니다.
ChannelIO.hideChannelButton()
...
[ChannelIO hideChannelButton];
...
showMessenger
메신저를 표시합니다.
ChannelIO.showMessenger()
...
[ChannelIO showMessenger]
...
hideMessenger
메신저를 닫습니다.
ChannelIO.hideMessenger()
...
[ChannelIO hideMessenger];
...
openChat
유저챗을 엽니다. 새로운 상담을 열거나, 기존에 존재하는 유저챗을 열 수 있습니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
chatId | String? | X | 채팅의 ID 입니다. chatId가 유효하지 않거나, nil 인 경우 새로운 유저챗을 엽니다. |
message | String? | X | 새로 채팅을 여는 경우, 메시지 입력창에 미리 입력되어 있는 메시지입니다. chatId가 nil인 경우 유효합니다. |
ChannelIO.openChat(with: CHAT_ID, message: MESSAGE)
// Open chat id is '123'
[ChannelIO openChatWith:@"123" message: nil]
// Same as ChannelIO.openChat("123", null);
// When chat id parameter is not null, message parameter is ignored.
[ChannelIO openChatWith:@"123" message: @"asd"]
// Open new chat like click start new chat in lounge
[ChannelIO openChatWith:nil message: nil]
// Open new chat with "123" in input box.
// If support bot is enabled, open support bot instead.
[ChannelIO openChatWith:nil message: @"123"]
openSupportBot
유저챗을 열어 특정 서포트봇을 실행합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
supportBotId | String? | X | 서포트봇의 ID 입니다. supportBotId가 유효하지 않거나, nil 인 경우 채팅방을 닫습니다. |
message | String? | X | 서포트봇 동작을 완료한 후 입력창에 표시될 메시지입니다. |
// Id가 '123'인 서포트봇을 실행합니다.
ChannelIO.openSupportBot(with: "123", message: nil)
// Id가 '123'인 서포트봇을 실행합니다.
// 서포트봇이 완료된 후 메시지 입력창에 '입력 문자'가 입력됩니다.
ChannelIO.openSupportBot(with: "123", message: "입력 문자")
// Id가 '123'인 서포트봇을 실행합니다.
[ChannelIO openSupportBotWith: @"123" message: nil];
// Id가 '123'인 서포트봇을 실행합니다.
// 서포트봇이 완료된 후 메시지 입력창에 '입력 문자'가 입력됩니다.
[ChannelIO openSupportBotWith: @"123" message: @"입력 문자"];
track
유저의 이벤트를 트래킹합니다. 더 자세한 안내는 이벤트 트래킹 문서를 참조합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
eventName | String | O | 트래킹할 이벤트 이름입니다. 최대 30자 입니다. |
eventProperty | [String: Any]? | X | 이벤트에 대한 추가 정보입니다. |
// Only send event name
ChannelIO.track(eventName: EVENT_NAME, eventProperty: nil)
// Event with properties
var eventProperties: [String:Any] = [:]
eventProperties[PROPERTY_KEY_1] = STRING_VALUE
eventProperties[PROPERTY_KEY_2] = INT_VALUE
ChannelIO.track(eventName: EVENT_WITH_PROPERTIES_NAME, eventProperty: eventProperties)
// Only send event name
[ChannelIO trackWithEventName:@"EVENT_NAME" eventProperty:nil];
// Event with properties
NSDictionary<NSString *, id> *eventProperties = [NSMutableDictionary dictionary];
[eventProperties setValue:STRING_VALUE forKey:PROPERTY_KEY_1];
[eventProperties setValue:INT_VALUE forKey:PROPERTY_KEY_2];
[ChannelIO trackWithEventName:@"EVENT_WITH_PROPERTIES_NAME" eventProperty:eventProperties];
setPage
track
이 호출 될 때의 화면 이름을 설정합니다. setPage
보다 먼저 track
을 호출하는 경우 이벤트에 페이지 정보가 반영되지 않습니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
page | String? | X | track이 호출 될 때의 화면 이름입니다..track(nil) 을 호출하는 경우 이벤트의 페이지가 null 로 설정됩니다. |
resetPage
track
이 호출 될 때의 화면 이름을 초기화 합니다. 기본 설정은 track을 호출하는 ViewController의 이름입니다.
ChannelIO.resetPage()
ChannelIO.resetPage();
updateUser
유저 정보를 수정합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
userData | [String: Any?] | O | 수정할 유저 정보입니다. |
completion | ((Bool, User?) -> Void)? | X | 유저 정보 수정 결과를 반환합니다. |
var profile: [String: Any] = [:]
profile[OTHER_KEY] = OTHER_VALUE
let userData = UpdateUserParamBuilder()
.with(language: .english)
.with(profile: profile)
.build()
ChannelIO.updateUser(param: userData) { (error, user) in
if let user = user, error == nil {
...
} else if let error = error {
...
}
}
UpdateUserParamObjcBuilder *builder = [[UpdateUserParamObjcBuilder alloc] init];
// name
[builder withProfileKey:@"name" value:USER_NAME];
// mobileNumber
[builder withProfileKey:@"mobileNumber" value:@"+~~~"];
// email
[builder withProfileKey:@"email" value:EMAIL];
// avatar url
[builder withProfileKey:@"avatarUrl" value:AVATAR_URL];
// other
[builder withProfileKey:@"OTHER_KEY" value:OTHER_VALUE];
[builder withLanguage:LanguageOptionEnglish];
[ChannelIO updateUserWithParam:[builder build] completion:^(NSError * error, User * user) {
if (user != nil && error == nil) {
// success, result data is user
} else (error != nil) {
// error, see error
}
}];
addTags
유저에게 태그를 추가합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
tags | [String] | O | • 추가할 수 있는 태그의 최대 개수는 10개입니다. • 태그는 소문자로 변환되어 저장됩니다. • 이미 추가된 태그는 무시됩니다. • nil이나 빈 문자열, 혹은 이를 포함하는 리스트는 허용하지 않습니다. |
completion | ((Error?, User?) -> Void)? | X | 태그를 추가한 결과로 User를 반환합니다. 추가에 실패한 경우 에러를 반환합니다. |
var tags: [String] = []
tags.append(TAG_1)
tags.append(TAG_2)
tags.append(TAG_3)
tags.append(TAG_4)
ChannelIO.addTags(tags) { (error, user) in
if let user = user {
...
} else if error = error {
...
}
}
NSMutableArray<NSString *> testTags = [NSMutableArray arrayWithCapacity:4];
[testTags addObject:@"tag1"];
[testTags addObject:@"tag2"];
[testTags addObject:@"tag3"];
[testTags addObject:@"tag4"];
[ChannelIO addTags:testTags completion:^(NSError * error, User * user) {
if user != nil {
// success
} else if error != nil {
// check reason
}
}];
removeTags
유저의 태그를 제거합니다. 존재하지 않는 태그는 무시합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
tags | [String] | O | 제거할 태그입니다. • null이나 빈 문자열, 혹은 이를 포함하는 리스트는 허용하지 않습니다. |
completion | ((Error?, User?) -> Void)? | X | 태그를 제거한 결과로 User를 반환합니다. 제거에 실패한 경우 에러를 반환합니다. |
var tags: [String] = []
tags.append(TAG_1)
tags.append(TAG_2)
tags.append(TAG_3)
tags.append(TAG_4)
ChannelIO.removeTags(tags) { (error, user) in
if let user = user {
...
} else if error = error {
...
}
}
NSMutableArray<NSString *> testTags = [NSMutableArray arrayWithCapacity:4];
[testTags addObject:@"tag1"]
[testTags addObject:@"tag2"]
[testTags addObject:@"tag3"]
[testTags addObject:@"tag4"]
[ChannelIO removeTags:testTags completion:^(NSError * error, User * user) {
if user != nil {
// success
} else if error != nil {
// check reason
}
}];
initPushToken
디바이스 토큰에 대한 변경 사항을 채널톡에 전달합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
deviceToken | Data | O | 푸시 알림을 받기 위한 deviceToken입니다. |
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
ChannelIO.initPushToken(deviceToken: deviceToken)
...
}
// AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate, UNUserNotificationCenterDelegate>
@property (nonatomic, strong) UIWindow *window;
@end
// AppDelegate.m
@implementation AppDelegate
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[ChannelIO initPushTokenWithDeviceToken:deviceToken.map]
}
isChannelPushNotification
SDK가 처리해야 하는 푸시 데이터인지 확인합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
_ | [AnyHashable: Any] | O | 푸시 알림으로 받은 userInfo 객체입니다. |
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
if ChannelIO.isChannelPushNotification(userInfo) {
...
}
completionHandler()
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler {
NSDictionary *userInfo = response.notification.request.content.userInfo;
// This line
if ([ChannelIO isChannelNotification:userInfo]) {
[ChannelIO receivePushNotification:userInfo completion: nil];
[ChannelIO storePushNotification: userInfo];
}
completionHandler();
}
receivePushNotification
채널톡에 유저가 푸시 알림을 받았음을 전달합니다.
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
if ChannelIO.isChannelPushNotification(userInfo) {
ChannelIO.receivePushNotification(userInfo)
...
}
completionHandler()
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler {
NSDictionary *userInfo = response.notification.request.content.userInfo;
if ([ChannelIO isChannelNotification:userInfo]) {
// This line
[ChannelIO receivePushNotification:userInfo completion: nil];
[ChannelIO storePushNotification: userInfo];
}
completionHandler();
}
storePushNotification
디바이스에 푸시 정보를 저장합니다.
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
if ChannelIO.isChannelPushNotification(userInfo) {
ChannelIO.storePushNotification(userInfo)
...
}
completionHandler()
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler {
NSDictionary *userInfo = response.notification.request.content.userInfo;
if ([ChannelIO isChannelNotification:userInfo]) {
[ChannelIO receivePushNotification:userInfo completion: nil];
// This line
[ChannelIO storePushNotification: userInfo];
}
completionHandler();
}
hasStoredPushNotification
디바이스에 저장된 채널 푸시 정보가 있는지 확인합니다.
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if ChannelIO.hasStoredPushNotification() {
...
}
}
}
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// This line
if ([ChannelIO hasStoredPushNotification]) {
[ChannelIO openStoredPushNotification]
}
}
@end
openStoredPushNotification
storePushNotification
을 통해 디바이스에 저장 된 푸시 정보를 이용하여 유저챗을 엽니다.
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
ChannelIO.openStoredPushNotification()
...
}
}
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
if ([ChannelIO hasStoredPushNotification]) {
// This line
[ChannelIO openStoredPushNotification]
}
}
@end
isBooted
부트가 된 상태인지 확인합니다.
ChannelIO.isBooted
ChannelIO.isBooted
setDebugMode
디버그 모드를 설정합니다. true
로 설정한 경우 로그 메시지가 표시됩니다.
ChannelIO.setDebugMode(with: true)
[ChannelIO setDebugModeWith:@(YES)]
setAppearance
SDK의 테마를 설정합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
appearance | Appearance | O | .light와 .dark 로 명시하는 경우 해당 속성으로 테마를 고정합니다. .system 인 경우 기기의 시스템 테마를 따릅니다. |
ChannelIO.setAppearance(.light)
[ChannelIO setAppearance:AppearanceLight];
applyAppearance deprecated
deprecated
setAppearance
으로 변경 되었습니다.
SDK의 테마를 설정합니다.
매개변수 | 타입 | 필수 여부 | 설명 |
---|---|---|---|
appearance | Appearance | O | .light와 .dark 로 명시하는 경우 해당 속성으로 테마를 고정합니다. .system 인 경우 기기의 시스템 테마를 따릅니다. |
ChannelIO.applyAppearance(.light)
[ChannelIO setAppearance:AppearanceLight];