이 문서는 채널톡 iOS SDK(이하 SDK)에서 사용하는 모델에 대해 설명합니다.
BootConfig
ChannelIO.boot
의 옵션을 설정합니다. boot
메소드의 매개변수로 전달하는 모델입니다. 사용 예제는 시작하기 문서를 참고합니다.
변수명 | 타입 | 설명 |
---|---|---|
pluginKey | String | 채널의 플러그인 키입니다. |
memberId | String? | 멤버 유저를 구분하는 id입니다. |
memberHash | String? | memberId 의 해시화 된 값입니다. 더 자세한 내용은 맴버 해시를 참고합니다. |
profile | Profile? | 유저의 프로필 값입니다. |
language | Language? | 유저가 사용할 언어입니다. 유저를 새로 생성하는 경우에만 효력이 있습니다. 이미 존재하는 유저의 언어는 변경되지 않습니다. |
unsubscribeEmail | Bool? | 이메일을 통한 마케팅 메시지를 수신할 지 여부를 설정합니다. |
unsubscribeTexting | Bool? | 문자 (sms, lms)를 통한 마케팅 메시지를 수신할 지 여부를 설정합니다. |
trackDefaultEvent | Bool? | PageView 와 같은 기본 이벤트를 전송할 지 여부를 설정합니다. |
hidePopup | Bool? | 인앱에서 보이는 기본 마케팅 메시지와 메시지 알림 팝업을 보일지 여부를 설정합니다. |
channelButtonOption | ChannelButtonOption? | 채널 버튼의 모양과 위치를 설정합니다. 여백의 단위는 pt (point) 입니다. |
bubbleOption | BubbleOption? | 인앱에서 보이는 기본 메시지 알림, 마케팅 버블의 위치와 여백을 설정합니다. 여백의 단위는 pt (point) 입니다. |
appearance | Appearance? | SDK의 화면 테마를 설정합니다. |
Language
SDK가 지원하는 언어입니다.
@objc public enum LanguageOption: Int {
case english
case korean
case japanese
case device
}
typedef SWIFT_ENUM(NSInteger, LanguageOption, closed) {
LanguageOptionEnglish = 0,
LanguageOptionKorean = 1,
LanguageOptionJapanese = 2,
LanguageOptionDevice = 3,
};
ChannelButtonOption
채널 버튼의 아이콘 모양과 위치를 설정합니다.
아이콘은 ChannelButtonIcon을 통해 설정할 수 있고, 위치는 왼쪽 아래 또는 오른쪽 아래로 위치를 설정할 수 있습니다. 위치의 기본값은 right
, 여백의 기본값은 각 20pt입니다.
// Units of x and y are pt in iOS.
let buttonOption = ChannelButtonOption(
icon: .channel,
position: .left,
xMargin: 16,
yMargin: 23
)
// Units of x and y are pt in iOS.
ChannelButtonOption *buttonOption = [
[ChannelButtonOption alloc]
initWithPosition:ChannelButtonPositionLeft
xMargin:16
yMargin:23
];
변수명 | 타입 | 설명 |
---|---|---|
icon | ChannelButtonIcon | 채널 버튼의 아이콘을 설정합니다. 기본값은 channel 입니다.(SDK >= 11.0.0) |
position | ChannelButtonPosition | 채널 버튼의 위치를 설정합니다. 기본값은 right 입니다. |
xMargin | Float | 채널 버튼의 x축 기준 마진을 설정합니다. 단위는 pt 입니다. |
yMargin | Float | 채널 버튼의 x축 기준 마진을 설정합니다. 단위는 pt 입니다. |
ChannelButtonPosition
채널 버튼의 위치를 설정합니다.
@objc
public enum ChannelButtonPosition: Int {
case right
case left
}
ChannelButtonIcon
채널 버튼의 아이콘을 설정합니다.
@objc
public enum ChannelButtonIcon: Int {
case channel
case chatBubbleFilled
case chatProgressFilled
case chatQuestionFilled
case chatLightningFilled
case chatBubbleAltFilled
case smsFilled
case commentFilled
case sendForwardFilled
case helpFilled
case chatProgress
case chatQuestion
case chatBubbleAlt
case sms
case comment
case sendForward
case communication
case headset
}
BubbleOption
인앱에서 발생하는 메시지 알림, 마케팅 버블의 위치와 여백을 설정합니다.
위치의 기본값은 top
, 여백의 기본값은 20pt입니다.
// Units of x and y are pt in iOS.
let bubbleOption = BubbleOption(
position: .top, // .top or .bottom
yMargin: 0
)
// Units of x and y are pt in iOS.
BubbleOption *bubbleOption = [[BubbleOption alloc] init];
[bubbleOption setPosition:BubblePostitionTop]; // BubblePostitionTop or BubblePostitionBottom
[bubbleOption setYMargin:0];
Profile
유저의 프로필 객체입니다.
변수명 | 타입 | 설명 |
---|---|---|
name | String? | 유저의 이름입니다. |
String? | 유저의 email 입니다. | |
mobileNumber | String? | 유저의 핸드폰 번호입니다. |
avatarUrl | String? | 유저의 이미지 URL 입니다. |
User
채널톡이 설치된 웹사이트, 또는 앱을 방문한 모든 유저 객체입니다.
변수명 | 타입 | 설명 |
---|---|---|
id | String | SDK에서 사용하는 고유 식별자입니다. |
memberId | String? | 유저를 구분하는 식별자입니다. |
name | String? | 유저의 이름입니다. |
avatarUrl | String? | 유저 프로필 이미지의 URL입니다. |
profile | [String: Any]? | 유저의 프로필 정보를 담은 객체입니다. |
alert | Int | 유저가 읽지 않은 중요 알림 갯수입니다. 채널 버튼에서 숫자로 알림이 표현됩니다. |
unread | Int | 유저가 읽지 않은 모든 알림 갯수입니다. alert 메시지의 수를 포함합니다. 채널 버튼에서 빨간 점으로 알림이 표현됩니다. |
tags | [String]? | 유저의 태그입니다. |
language | Language | 유저의 초기 언어입니다. |
unsubscribeTexting | Bool | 이메일을 통한 마케팅 메시지를 수신할 지 여부를 설정합니다. |
unsubscribeEmail | Bool | 문자 (sms, lms)를 통한 마케팅 메시지를 수신할 지 여부를 설정합니다. |
@objc
public class User: NSObject {
@objc public let id: String
@objc public let memberId: String
@objc public let name: String
@objc public let avatarUrl: String?
@objc public let profile: [String : Any]?
@objc public let alert: Int
@objc public let unread: Int
@objc public let tags: [String]?
@objc public let language: String?
@objc public let unsubscribeEmail: Bool
@objc public let unsubscribeTexting: Bool
}
@interface User : NSObject
@property (nonatomic, readonly, copy) NSString * _Nonnull id;
@property (nonatomic, readonly, copy) NSString * _Nonnull memberId;
@property (nonatomic, readonly, copy) NSString * _Nonnull name;
@property (nonatomic, readonly, copy) NSString * _Nullable avatarUrl;
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nullable profile;
@property (nonatomic, readonly) NSInteger alert;
@property (nonatomic, readonly, copy) NSArray<NSString *> * _Nullable tags;
@property (nonatomic, readonly, copy) NSString * _Nullable language;
@property (nonatomic, readonly) BOOL unsubscribeEmail;
@property (nonatomic, readonly) BOOL unsubscribeTexting;
@end
PopupData
인앱 팝업 객체입니다.
변수명 | 타입 | 설명 |
---|---|---|
chatId | String | 팝업의 대상이 되는 채팅방의 ID입니다. |
avatarUrl | String | 팝업의 아바타 URL입니다. |
name | String | 팝업에서 표시할 이름입니다. |
message | String | 팝업에서 표시할 메시지입니다. |
@objc
public class PopupData: NSObject {
@objc public let chatId: String
@objc public let message: String
@objc public let name: String
@objc public let avatarUrl: String
}
@interface PopupData : NSObject
@property (nonatomic, readonly, copy) NSString * _Nonnull chatId;
@property (nonatomic, readonly, copy) NSString * _Nonnull message;
@property (nonatomic, readonly, copy) NSString * _Nonnull name;
@property (nonatomic, readonly, copy) NSString * _Nonnull avatarUrl;
@end
UserData
updateUser
의 데이터 구성에 사용하는 모델입니다.
변수명 | 타입 | 설명 |
---|---|---|
language | Language | 유저가 사용할 언어입니다. |
tags | [String]? | 유저의 태그입니다. 추가하는 태그 데이터로 덮어 씌웁니다. 최대 갯수는 10개이며, 대소문자를 구분하지 않습니다. (소문자로 처리합니다) |
profile | [String: Any]? | 유저의 프로필 정보를 담은 객체입니다. 추가하는 프로필 정보로 덮어 씌웁니다. null로 설정한 경우 프로필 정보를 초기화 합니다. |
profileOnce | [String: Any]? | 유저에 추가할 프로필 정보입니다. 해당 프로필 값이 없는 경우 새로 추가합니다. |
unsubscribeEmail | Bool | 이메일을 통한 마케팅 메시지를 수신할 지 여부를 설정합니다. |
unsubscribeTexting | Bool | 문자(sms, lms)를 통한 마케팅 메시지를 수신할 지 여부를 설정합니다. |
var profile: [String: Any] = [:]
// name
profile["name"] = USER_NAME
// mobileNumber
profile["mobileNumber"] = "+~~~"
// email
profile["email"] = EMAIL
// avatar url
profile["avatarUrl"] = AVATAR_URL
// other
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 {
// success, result data is user
} else if let error = error {
// error, see 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
}
}];
Appearance
SDK의 테마를 나타내는 객체입니다.
@objc
public enum Appearance: Int {
case system
case light
case dark
}
BootStatus
부트 결과에 대한 enum 객체입니다.
변수명 | 설명 |
---|---|
success | boot 가 성공했습니다. |
notInitialized | ChannelIO.initialize() 가 호출되지 않았습니다. |
networkTimeout | 네트워크 문제로 ChannelIO.boot 가 실패했습니다. |
notAvailableVersion | 지원되지 않는 SDK 버전입니다. |
serviceUnderConstruction | 채널톡 서버가 점검 중입니다. |
requirePayment | 채널이 차단되었거나 유료 결제가 필요한 경우입니다. |
accessDenied | 서버에서 4xx 에러를 반환했습니다. |
unknown | 알 수 없는 오류입니다. |
@objc
public enum BootStatus : Int {
case success
case notInitialized
case networkTimeout
case notAvailableVersion
case serviceUnderConstruction
case requirePayment
case accessDenied
case unknown
}
typedef SWIFT_ENUM(NSInteger, BootStatus, closed) {
BootStatusSuccess = 0,
BootStatusNotInitialized = 1,
BootStatusNetworkTimeout = 2,
BootStatusNotAvailableVersion = 3,
BootStatusServiceUnderConstruction = 4,
BootStatusRequirePayment = 5,
BootStatusAccessDenied = 6,
BootStatusUnknown = 7,
};