Skip to content

Commit e30c785

Browse files
authored
Merge pull request #1 from zoyi-jin/feature/v8_ios
Apply v8 - iOS
2 parents 679d9d3 + dd46fc9 commit e30c785

File tree

4 files changed

+450
-144
lines changed

4 files changed

+450
-144
lines changed

ios/RCTConvert+ChannelIO.h

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,54 @@
1414
NS_ASSUME_NONNULL_BEGIN
1515

1616
@interface RCTConvert (ChannelIO)
17-
+ (ChannelPluginSettings *)settings:(id)json;
17+
+ (BootConfig *)bootConfig:(id)json;
1818
+ (Profile *)profile:(id)json;
19-
+ (LauncherConfig *)launcherConfig:(id)json;
19+
+ (ChannelButtonOption *)channelButtonOption:(id)json;
2020
@end
2121

22+
// LanguageOption
23+
static NSString * const LANGUAGE_OPTION_KO = @"ko";
24+
static NSString * const LANGUAGE_OPTION_EN = @"en";
25+
static NSString * const LANGUAGE_OPTION_JA = @"ja";
26+
static NSString * const LANGUAGE_OPTION_DEVICE = @"device";
27+
28+
// BootStatus
29+
static NSString * const BOOT_STATUS_SUCCESS = @"SUCCESS";
30+
static NSString * const BOOT_STATUS_NOT_INITIALIZED = @"NOT_INITIALIZED";
31+
static NSString * const BOOT_STATUS_NETWORK_TIMEOUT = @"NETWORK_TIMEOUT";
32+
static NSString * const BOOT_STATUS_NOT_AVAILABLE_VERSION = @"NOT_AVAILABLE_VERSION";
33+
static NSString * const BOOT_STATUS_SERVICE_UNDER_CONSTRUCTION = @"SERVICE_UNDER_CONSTRUCTION";
34+
static NSString * const BOOT_STATUS_REQUIRE_PAYMENT = @"REQUIRE_PAYMENT";
35+
static NSString * const BOOT_STATUS_ACCESS_DENIED = @"ACCESS_DENIED";
36+
static NSString * const BOOT_STATUS_UNKNOWN_ERROR = @"UNKNOWN_ERROR";
37+
38+
// ChannelBUttonOption
39+
static NSString * const KEY_CHANNEL_BUTTON_OPTION_POSITION_RIGHT = @"right";
40+
static NSString * const KEY_CHANNEL_BUTTON_OPTION_POSITION_LEFT = @"left";
41+
42+
// ChannelButtonOption
43+
static NSString * const CHANNEL_BUTTON_OPTION_POSITION = @"position";
44+
static NSString * const CHANNEL_BUTTON_OPTION_POSITION_RIGHT = @"right";
45+
static NSString * const CHANNEL_BUTTON_OPTION_POSITION_LEFT = @"left";
46+
static NSString * const CHANNEL_BUTTON_OPTION_X_MARGIN = @"xMargin";
47+
static NSString * const CHANNEL_BUTTON_OPTION_Y_MARGIN = @"yMargin";
48+
49+
static NSString * const KEY_PLUGIN_KEY = @"pluginKey";
50+
static NSString * const KEY_MEMBER_HASH = @"memberHash";
51+
static NSString * const KEY_HIDE_POPUP = @"hidePopup";
52+
static NSString * const KEY_TRACK_DEFAULT_EVENT = @"trackDefaultEvent";
53+
static NSString * const KEY_CHANNEL_BUTTON_OPTION = @"channelButtonOption";
54+
55+
static NSString * const KEY_MEMBER_ID = @"memberId";
56+
static NSString * const KEY_LANGUAGE = @"language";
57+
static NSString * const KEY_PROFILE = @"profile";
58+
59+
// deprecated
60+
static NSString * const KEY_HIDE_DEFAULT_IN_APP_PUSH = @"hideDefaultInAppPush";
61+
static NSString * const KEY_ENABLED_TRACK_DEFAULT_EVENT = @"enabledTrackDefaultEvent";
62+
static NSString * const KEY_LAUNCHER_CONFIG = @"launcherConfig";
63+
64+
static NSString * const KEY_USER_ID = @"userId";
65+
static NSString * const KEY_LOCALE = @"locale";
66+
2267
NS_ASSUME_NONNULL_END

ios/RCTConvert+ChannelIO.m

Lines changed: 73 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -11,79 +11,94 @@
1111
@implementation RCTConvert (ChannelIOEnums)
1212

1313
RCT_ENUM_CONVERTER(
14-
CHLocale,
15-
(@{@"ko": @(CHLocaleKorean),
16-
@"en": @(CHLocaleEnglish),
17-
@"ja": @(CHLocaleJapanese),
18-
@"device": @(CHLocaleDevice)
14+
LanguageOption,
15+
(@{LANGUAGE_OPTION_KO: @(LanguageOptionKorean),
16+
LANGUAGE_OPTION_EN: @(LanguageOptionEnglish),
17+
LANGUAGE_OPTION_JA: @(LanguageOptionJapanese),
18+
LANGUAGE_OPTION_DEVICE: @(LanguageOptionDevice)
1919
}),
20-
CHLocaleDevice,
20+
LanguageOptionDevice,
2121
integerValue
2222
)
2323

2424
RCT_ENUM_CONVERTER(
25-
ChannelPluginCompletionStatus,
26-
(@{@"SUCCESS": @(ChannelPluginCompletionStatusSuccess),
27-
@"UNKNOWN_ERROR": @(ChannelPluginCompletionStatusUnknown),
28-
@"ACCESS_DENIED": @(ChannelPluginCompletionStatusAccessDenied),
29-
@"NETWORK_TIMEOUT": @(ChannelPluginCompletionStatusNetworkTimeout),
30-
@"REQUIRE_PAYMENT": @(ChannelPluginCompletionStatusRequirePayment),
31-
@"NOT_INITIALIZED": @(ChannelPluginCompletionStatusNotInitialized),
32-
@"SERVICE_UNDER_CONSTRUCTION": @(ChannelPluginCompletionStatusServiceUnderConstruction)
25+
BootStatus,
26+
(@{BOOT_STATUS_SUCCESS: @(BootStatusSuccess),
27+
BOOT_STATUS_NOT_INITIALIZED: @(BootStatusNotInitialized),
28+
BOOT_STATUS_NETWORK_TIMEOUT: @(BootStatusNetworkTimeout),
29+
BOOT_STATUS_NOT_AVAILABLE_VERSION: @(BootStatusNotAvailableVersion),
30+
BOOT_STATUS_SERVICE_UNDER_CONSTRUCTION: @(BootStatusServiceUnderConstruction),
31+
BOOT_STATUS_REQUIRE_PAYMENT: @(BootStatusRequirePayment),
32+
BOOT_STATUS_ACCESS_DENIED: @(BootStatusAccessDenied),
33+
BOOT_STATUS_UNKNOWN_ERROR: @(BootStatusUnknown)
3334
}),
34-
ChannelPluginCompletionStatusNotInitialized,
35+
BootStatusNotInitialized,
3536
integerValue
3637
)
3738

3839
RCT_ENUM_CONVERTER(
39-
LauncherPosition,
40-
(@{@"right": @(LauncherPositionRight),
41-
@"left": @(LauncherPositionLeft)
40+
ChannelButtonPosition,
41+
(@{CHANNEL_BUTTON_OPTION_POSITION_RIGHT: @(ChannelButtonPositionRight),
42+
CHANNEL_BUTTON_OPTION_POSITION_LEFT: @(ChannelButtonPositionLeft)
4243
}),
43-
LauncherPositionRight,
44+
ChannelButtonPositionRight,
4445
integerValue
4546
)
4647

4748
@end
4849

4950
@implementation RCTConvert (ChannelIO)
5051

51-
+ (ChannelPluginSettings *)settings:(id)json {
52-
ChannelPluginSettings *settings = [[ChannelPluginSettings alloc] init];
53-
settings.pluginKey = [RCTConvert NSString:json[@"pluginKey"]];
54-
settings.debugMode = [RCTConvert BOOL:json[@"debugMode"]];
55-
settings.hideDefaultInAppPush = [RCTConvert BOOL:json[@"hideDefaultInAppPush"]];
56-
settings.launcherConfig = [RCTConvert launcherConfig:json[@"launcherConfig"]];
57-
if ([json[@"memberId"] length] == 0 && [json[@"userId"] length] != 0) {
58-
settings.memberId = [RCTConvert NSString:json[@"userId"]];
59-
} else {
60-
settings.memberId = [RCTConvert NSString:json[@"memberId"]];
52+
+ (BootConfig *)bootConfig:(id)json {
53+
BootConfig *config = [[BootConfig alloc] init];
54+
config.pluginKey = [RCTConvert NSString:json[KEY_PLUGIN_KEY]];
55+
config.memberHash = [RCTConvert NSString:json[KEY_MEMBER_HASH]];
56+
config.hidePopup = json[KEY_HIDE_POPUP] != nil
57+
? [RCTConvert BOOL:json[KEY_HIDE_POPUP]] : [RCTConvert BOOL:json[KEY_HIDE_DEFAULT_IN_APP_PUSH]];
58+
config.trackDefaultEvent = json[KEY_TRACK_DEFAULT_EVENT] != nil
59+
? [RCTConvert BOOL:json[KEY_TRACK_DEFAULT_EVENT]] : [RCTConvert BOOL:json[KEY_ENABLED_TRACK_DEFAULT_EVENT]];
60+
61+
if (json[KEY_LAUNCHER_CONFIG] == nil && json[KEY_CHANNEL_BUTTON_OPTION] != nil) {
62+
config.channelButtonOption = [RCTConvert channelButtonOption:json[KEY_CHANNEL_BUTTON_OPTION]];
63+
} else if (json[KEY_LAUNCHER_CONFIG] != nil && json[KEY_CHANNEL_BUTTON_OPTION] == nil) {
64+
config.channelButtonOption = [RCTConvert channelButtonOption:json[KEY_LAUNCHER_CONFIG]];
65+
}
66+
67+
if (json[KEY_MEMBER_ID] != nil && json[KEY_USER_ID] == nil) {
68+
config.memberId = [RCTConvert NSString:json[KEY_MEMBER_ID]];
69+
} else if (json[KEY_MEMBER_ID] == nil && json[KEY_USER_ID] != nil) {
70+
config.memberId = [RCTConvert NSString:json[KEY_USER_ID]];
6171
}
6272

63-
NSString *language = [RCTConvert NSString:json[@"language"]];
64-
NSString *locale = [RCTConvert NSString:json[@"locale"]];
65-
if (json[@"locale"] != 0) {
66-
if ([locale isEqualToString:@"ko"]) {
67-
settings.language = CHLocaleKorean;
68-
} else if ([locale isEqualToString:@"ja"]) {
69-
settings.language = CHLocaleJapanese;
70-
} else if ([locale isEqualToString:@"en"]) {
71-
settings.language = CHLocaleEnglish;
73+
NSString *language = [RCTConvert NSString:json[KEY_LANGUAGE]];
74+
NSString *locale = [RCTConvert NSString:json[KEY_LOCALE]];
75+
if (json[KEY_LOCALE] != nil) {
76+
if ([locale isEqualToString:LANGUAGE_OPTION_KO]) {
77+
config.language = LanguageOptionKorean;
78+
} else if ([locale isEqualToString:LANGUAGE_OPTION_JA]) {
79+
config.language = LanguageOptionJapanese;
80+
} else if ([locale isEqualToString:LANGUAGE_OPTION_EN]) {
81+
config.language = LanguageOptionEnglish;
7282
} else {
73-
settings.language = CHLocaleDevice;
83+
config.language = LanguageOptionDevice;
7484
}
7585
} else {
76-
if ([language isEqualToString:@"ko"]) {
77-
settings.language = CHLocaleKorean;
78-
} else if ([language isEqualToString:@"ja"]) {
79-
settings.language = CHLocaleJapanese;
80-
} else if ([language isEqualToString:@"en"]) {
81-
settings.language = CHLocaleEnglish;
86+
if ([language isEqualToString:LANGUAGE_OPTION_KO]) {
87+
config.language = LanguageOptionKorean;
88+
} else if ([language isEqualToString:LANGUAGE_OPTION_JA]) {
89+
config.language = LanguageOptionJapanese;
90+
} else if ([language isEqualToString:LANGUAGE_OPTION_EN]) {
91+
config.language = LanguageOptionEnglish;
8292
} else {
83-
settings.language = CHLocaleDevice;
93+
config.language = LanguageOptionDevice;
8494
}
8595
}
86-
return settings;
96+
97+
if (json[KEY_PROFILE] != nil) {
98+
config.profile = [RCTConvert profile:json[KEY_PROFILE]];
99+
}
100+
101+
return config;
87102
}
88103

89104
+ (Profile *)profile:(NSDictionary *)json {
@@ -92,40 +107,29 @@ + (Profile *)profile:(NSDictionary *)json {
92107
}
93108

94109
Profile *profile = [[Profile alloc] init];
95-
[profile setWithName:[RCTConvert NSString:json[@"name"]]];
96-
[profile setWithEmail:[RCTConvert NSString:json[@"email"]]];
97-
[profile setWithAvatarUrl:[RCTConvert NSString:json[@"avatarUrl"]]];
98-
[profile setWithMobileNumber:[RCTConvert NSString:json[@"mobileNumber"]]];
99-
100-
[json enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
101-
if (![key isEqual:@"name"] &&
102-
![key isEqual:@"email"] &&
103-
![key isEqual:@"avatarUrl"] &&
104-
![key isEqual:@"mobileNumber"]) {
105-
[profile setWithPropertyKey:key value:obj];
106-
}
110+
[json enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id obj, BOOL * _Nonnull stop) {
111+
[profile setWithPropertyKey:key value:obj];
107112
}];
108113

109114
return profile;
110115
}
111116

112-
+ (LauncherConfig *)launcherConfig:(id)json {
117+
+ (ChannelButtonOption *)channelButtonOption:(id)json {
113118
if (json == nil) {
114119
return nil;
115120
}
116121

117-
LauncherConfig *config = [[LauncherConfig alloc] init];
122+
ChannelButtonOption *option = [[ChannelButtonOption alloc] init];
118123

119-
config.xMargin = [RCTConvert float:json[@"xMargin"]];
120-
config.yMargin = [RCTConvert float:json[@"yMargin"]];
121-
NSString *position = [RCTConvert NSString:@"position"];
122-
if ([position isEqualToString:@"left"]) {
123-
config.position = LauncherPositionLeft;
124+
option.xMargin = [RCTConvert float:json[CHANNEL_BUTTON_OPTION_X_MARGIN]];
125+
option.yMargin = [RCTConvert float:json[CHANNEL_BUTTON_OPTION_Y_MARGIN]];
126+
NSString *position = [RCTConvert NSString:json[CHANNEL_BUTTON_OPTION_POSITION]];
127+
if ([position isEqualToString:CHANNEL_BUTTON_OPTION_POSITION_LEFT]) {
128+
option.position = ChannelButtonPositionLeft;
124129
} else {
125-
config.position = LauncherPositionRight;
130+
option.position = ChannelButtonPositionRight;
126131
}
127-
return config;
132+
return option;
128133
}
129134

130135
@end
131-

ios/RNChannelIO.h

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,68 @@ NS_ASSUME_NONNULL_BEGIN
1717
@interface RNChannelIO : RCTEventEmitter <RCTBridgeModule, ChannelPluginDelegate>
1818
@end
1919

20-
static NSString * const ON_CHANGE_BADGE = @"ChannelIO:Event:OnChangeBadge";
21-
static NSString * const ON_RECEIVE_PUSH = @"ChannelIO:Event:OnReceivePush";
22-
static NSString * const WILL_SHOW_MESSENGER = @"ChannelIO:Event:WillShowMessenger";
23-
static NSString * const WILL_HIDE_MESSENGER = @"ChannelIO:Event:WillHideMessenger";
24-
static NSString * const ON_CLICK_CHAT_LINK = @"ChannelIO:Event:OnClickChatLink";
25-
static NSString * const ON_CHANGE_PROFILE = @"ChannelIO:Event:OnChangeProfile";
20+
// event key
21+
static NSString * const EVENT = @"Event";
2622

27-
NS_ASSUME_NONNULL_END
23+
static NSString * const KEY_EVENT_ON_BADGE_CHANGED = @"ON_BADGE_CHANGED";
24+
static NSString * const KEY_EVENT_ON_PROFILE_CHANGED = @"ON_PROFILE_CHANGED";
25+
static NSString * const KEY_EVENT_ON_POPUP_DATA_RECEIVED = @"ON_POPUP_DATA_RECEIVED";
26+
static NSString * const KEY_EVENT_ON_SHOW_MESSENGER = @"ON_SHOW_MESSENGER";
27+
static NSString * const KEY_EVENT_ON_HIDE_MESSENGER = @"ON_HIDE_MESSENGER";
28+
static NSString * const KEY_EVENT_ON_CHAT_CREATED = @"ON_CHAT_CREATED";
29+
static NSString * const KEY_EVENT_ON_PRE_URL_CLICKED = @"ON_PRE_URL_CLICKED";
30+
static NSString * const KEY_EVENT_ON_URL_CLICKED = @"ON_URL_CLICKED";
31+
32+
static NSString * const EVENT_ON_BADGE_CHANGED = @"ChannelIO:Event:OnBadgeChanged";
33+
static NSString * const EVENT_ON_PROFILE_CHANGED = @"ChannelIO:Event:OnProfileChanged";
34+
static NSString * const EVENT_ON_POPUP_DATA_RECEIVED = @"ChannelIO:Event:OnPopupDataReceive";
35+
static NSString * const EVENT_ON_SHOW_MESSENGER = @"ChannelIO:Event:OnShowMessenger";
36+
static NSString * const EVENT_ON_HIDE_MESSENGER = @"ChannelIO:Event:OnHideMessenger";
37+
static NSString * const EVENT_ON_CHAT_CREATED = @"ChannelIO:Event:OnChatCreated";
38+
static NSString * const EVENT_ON_PRE_URL_CLICKED = @"ChannelIO:Event:OnPreUrlClicked";
39+
static NSString * const EVENT_ON_URL_CLICKED = @"ChannelIO:Event:OnUrlClicked";
40+
41+
// BootStatus
42+
static NSString * const BOOT_STATUS = @"BootStatus";
43+
44+
static NSString * const KEY_BOOT_STATUS_SUCCESS = @"success";
45+
static NSString * const KEY_BOOT_STATUS_NOT_INITIALIZED = @"notInitialized";
46+
static NSString * const KEY_BOOT_STATUS_NETWORK_TIMEOUT = @"networkTimeout";
47+
static NSString * const KEY_BOOT_STATUS_NOT_AVAILABLE_VERSION = @"notAvailableVersion";
48+
static NSString * const KEY_BOOT_STATUS_SERVICE_UNDER_CONSTRUCTION = @"serviceUnderConstruction";
49+
static NSString * const KEY_BOOT_STATUS_REQUIRE_PAYMENT = @"requirePayment";
50+
static NSString * const KEY_BOOT_STATUS_ACCESS_DENIED = @"accessDenied";
51+
static NSString * const KEY_BOOT_STATUS_UNKNOWN_ERROR = @"unknownError";
52+
53+
// language
54+
static NSString * const LANGUAGE = @"language";
55+
56+
static NSString * const KEY_LANGUAGE_KOREAN = @"korean";
57+
static NSString * const KEY_LANGUAGE_ENGLISH = @"english";
58+
static NSString * const KEY_LANGUAGE_JAPANESE = @"japanese";
59+
static NSString * const KEY_LANGUAGE_DEVICE = @"device";
2860

61+
// error
62+
static NSString * const ERROR_UNKNOWN = @"UNKNOWN_ERROR";
63+
64+
// ChannelButtonPosition
65+
static NSString * const CHANNEL_BUTTON_POSITION = @"ChannelButtonPosition";
66+
67+
static NSString * const KEY_STATUS = @"status";
68+
static NSString * const KEY_CHAT_ID = @"chatId";
69+
static NSString * const KEY_COUNT = @"count";
70+
static NSString * const KEY_URL = @"url";
71+
static NSString * const KEY_POPUP = @"popup";
72+
static NSString * const KEY_PROFILE_ONCE = @"profileOnce";
73+
static NSString * const KEY_PROFILE_KEY = @"key";
74+
static NSString * const KEY_PROFILE_VALUE = @"value";
75+
static NSString * const KEY_USER = @"user";
76+
static NSString * const KEY_ERROR = @"error";
77+
static NSString * const KEY_TAGS = @"tags";
78+
79+
// deprecated
80+
81+
static NSString * const CHANNEL_PLUGIN_COMPLETION_STATUS = @"ChannelPluginCompletionStatus";
82+
static NSString * const LAUNCHER_POSITION = @"LauncherPosition";
83+
84+
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)