@react-native-kakao/share 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 mym0404
3
+ Copyright (c) 2024 MJ Studio
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
6
6
  in the Software without restriction, including without limitation the rights
@@ -49,6 +49,7 @@ Pod::Spec.new do |s|
49
49
  end
50
50
 
51
51
  s.dependency 'RNCKakaoCore'
52
+ s.dependency 'RNCKakaoSocial'
52
53
 
53
54
  # Kakao dependencies
54
55
  s.dependency 'KakaoSDKShare', sdk_version
@@ -1,13 +1,7 @@
1
1
  apply from: file('./../../core/android/package-json.gradle')
2
2
  def Versions = project.ext.RNCKakaoSdkVersions
3
- def coreProject
4
- if (findProject(':@react-native-kakao_core')) {
5
- coreProject = project(':@react-native-kakao_core')
6
- } else if (findProject(':react-native-kakao_core')) {
7
- coreProject = project(':react-native-kakao_core')
8
- } else {
9
- throw new GradleException('Could not find the react-native-kakao/core package, have you installed it?')
10
- }
3
+ Project coreProject = project.ext.getWorkspaceProject("core")
4
+ Project socialProject = project.ext.getWorkspaceProject("social")
11
5
 
12
6
  buildscript {
13
7
  // Buildscript is evaluated before everything else so we can't use getExtOrDefault
@@ -112,6 +106,7 @@ dependencies {
112
106
  implementation "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}"
113
107
 
114
108
  api coreProject
109
+ api socialProject
115
110
  implementation "com.kakao.sdk:v2-share:${Versions.share}"
116
111
  }
117
112
 
@@ -3,14 +3,23 @@ package net.mjstudio.rnkakao.share
3
3
  import android.content.ActivityNotFoundException
4
4
  import com.facebook.react.bridge.Promise
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
- import com.facebook.react.bridge.ReactMethod
6
+ import com.facebook.react.bridge.ReadableArray
7
7
  import com.facebook.react.bridge.ReadableMap
8
8
  import com.kakao.sdk.common.util.KakaoCustomTabsClient
9
9
  import com.kakao.sdk.share.ShareClient
10
10
  import com.kakao.sdk.share.WebSharerClient
11
11
  import com.kakao.sdk.share.model.SharingResult
12
- import com.kakao.sdk.template.model.DefaultTemplate
12
+ import com.kakao.sdk.talk.TalkApiClient
13
+ import com.kakao.sdk.talk.model.MessageSendResult
14
+ import net.mjstudio.rnkakao.core.util.KakaoApp.TALK
15
+ import net.mjstudio.rnkakao.core.util.RNCKakaoAppNotAvailableException
16
+ import net.mjstudio.rnkakao.core.util.RNCKakaoResponseNotFoundException
17
+ import net.mjstudio.rnkakao.core.util.RNCKakaoUnknownException
18
+ import net.mjstudio.rnkakao.core.util.argArr
19
+ import net.mjstudio.rnkakao.core.util.argMap
20
+ import net.mjstudio.rnkakao.core.util.filterIsInstance
13
21
  import net.mjstudio.rnkakao.core.util.onMain
22
+ import net.mjstudio.rnkakao.core.util.pushStringList
14
23
  import net.mjstudio.rnkakao.core.util.rejectWith
15
24
  import net.mjstudio.rnkakao.core.util.toStringMap
16
25
 
@@ -20,116 +29,168 @@ class RNCKakaoShareModule internal constructor(context: ReactApplicationContext)
20
29
  return NAME
21
30
  }
22
31
 
23
- @ReactMethod
24
- override fun shareCustom(
32
+ override fun shareOrSendMeOrSendFriendOrWhatever(
33
+ sendType: String,
34
+ templateType: String,
25
35
  templateId: Double,
36
+ templateJson: ReadableMap,
37
+ receiverUuids: ReadableArray,
26
38
  useWebBrowserIfKakaoTalkNotAvailable: Boolean,
27
- templateArgs: ReadableMap?,
28
- serverCallbackArgs: ReadableMap?,
29
- promise: Promise,
30
- ) = onMain {
31
- runShare(
32
- templateId = templateId,
33
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
34
- templateArgs = templateArgs,
35
- serverCallbackArgs = serverCallbackArgs,
36
- promise = promise,
37
- )
38
- }
39
-
40
- @ReactMethod
41
- override fun shareFeedTemplate(
42
- value: ReadableMap,
43
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
44
- serverCallbackArgs: ReadableMap?,
45
- promise: Promise,
46
- ) = onMain {
47
- runShare(
48
- defaultTemplate = RNCKakaoShareTemplates.createFeedTemplate(value),
49
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
50
- serverCallbackArgs = serverCallbackArgs,
51
- promise = promise,
52
- )
53
- }
54
-
55
- @ReactMethod
56
- override fun shareListTemplate(
57
- value: ReadableMap,
58
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
59
- serverCallbackArgs: ReadableMap?,
39
+ templateArgs: ReadableMap,
40
+ serverCallbackArgs: ReadableMap,
60
41
  promise: Promise,
61
42
  ) = onMain {
62
- runShare(
63
- defaultTemplate = RNCKakaoShareTemplates.createListTemplate(value),
64
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
65
- serverCallbackArgs = serverCallbackArgs,
66
- promise = promise,
67
- )
43
+ if (templateType == "custom") {
44
+ shareOrSendCustom(
45
+ sendType,
46
+ templateType,
47
+ templateId,
48
+ receiverUuids = receiverUuids.filterIsInstance<String>(),
49
+ useWebBrowserIfKakaoTalkNotAvailable,
50
+ templateArgs,
51
+ serverCallbackArgs,
52
+ promise,
53
+ )
54
+ } else {
55
+ shareOrSendDefaultTemplate(
56
+ sendType,
57
+ templateType,
58
+ templateJson,
59
+ receiverUuids = receiverUuids.filterIsInstance<String>(),
60
+ useWebBrowserIfKakaoTalkNotAvailable,
61
+ serverCallbackArgs,
62
+ promise,
63
+ )
64
+ }
68
65
  }
69
66
 
70
- @ReactMethod
71
- override fun shareLocationTemplate(
72
- value: ReadableMap,
67
+ private fun shareOrSendCustom(
68
+ sendType: String,
69
+ templateType: String,
70
+ templateId: Double,
71
+ receiverUuids: List<String>,
73
72
  useWebBrowserIfKakaoTalkNotAvailable: Boolean,
73
+ templateArgs: ReadableMap?,
74
74
  serverCallbackArgs: ReadableMap?,
75
75
  promise: Promise,
76
- ) = onMain {
77
- runShare(
78
- defaultTemplate = RNCKakaoShareTemplates.createLocationTemplate(value),
79
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
80
- serverCallbackArgs = serverCallbackArgs,
81
- promise = promise,
82
- )
76
+ ) = when (sendType) {
77
+ "share" -> {
78
+ runShare(
79
+ templateType,
80
+ templateId,
81
+ null,
82
+ useWebBrowserIfKakaoTalkNotAvailable,
83
+ templateArgs,
84
+ serverCallbackArgs,
85
+ promise,
86
+ )
87
+ }
88
+ "send-me" -> {
89
+ runSendToMe(templateType, templateId, null, templateArgs, promise)
90
+ }
91
+ "send-friend" -> {
92
+ runSendToFriends(templateType, receiverUuids, templateId, null, templateArgs, promise)
93
+ }
94
+ else -> {
95
+ promise.rejectWith(RNCKakaoUnknownException("Unknown sendType: $sendType"))
96
+ }
83
97
  }
84
98
 
85
- @ReactMethod
86
- override fun shareCommerceTemplate(
87
- value: ReadableMap,
99
+ private fun shareOrSendDefaultTemplate(
100
+ sendType: String,
101
+ templateType: String,
102
+ template: ReadableMap,
103
+ receiverUuids: List<String>,
88
104
  useWebBrowserIfKakaoTalkNotAvailable: Boolean,
89
105
  serverCallbackArgs: ReadableMap?,
90
106
  promise: Promise,
91
- ) = onMain {
92
- runShare(
93
- defaultTemplate = RNCKakaoShareTemplates.createCommerceTemplate(value),
94
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
95
- serverCallbackArgs = serverCallbackArgs,
96
- promise = promise,
97
- )
107
+ ) = when (sendType) {
108
+ "share" -> {
109
+ runShare(
110
+ templateType,
111
+ null,
112
+ template,
113
+ useWebBrowserIfKakaoTalkNotAvailable,
114
+ argMap(),
115
+ serverCallbackArgs,
116
+ promise,
117
+ )
118
+ }
119
+ "send-me" -> {
120
+ runSendToMe(templateType, null, template, null, promise)
121
+ }
122
+ "send-friend" -> {
123
+ runSendToFriends(templateType, receiverUuids, null, template, null, promise)
124
+ }
125
+ else -> {
126
+ promise.rejectWith(RNCKakaoUnknownException("Unknown sendType: $sendType"))
127
+ }
98
128
  }
99
129
 
100
- @ReactMethod
101
- override fun shareTextTemplate(
102
- value: ReadableMap,
103
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
104
- serverCallbackArgs: ReadableMap?,
130
+ private fun runSendToMe(
131
+ templateType: String,
132
+ templateId: Double? = null,
133
+ defaultTemplate: ReadableMap? = null,
134
+ templateArgs: ReadableMap? = null,
105
135
  promise: Promise,
106
- ) = onMain {
107
- runShare(
108
- defaultTemplate = RNCKakaoShareTemplates.createTextTemplate(value),
109
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
110
- serverCallbackArgs = serverCallbackArgs,
111
- promise = promise,
112
- )
136
+ ) {
137
+ val callback = { e: Throwable? ->
138
+ if (e != null) {
139
+ promise.rejectWith(e)
140
+ } else {
141
+ promise.resolve(42)
142
+ }
143
+ }
144
+ if (templateId != null) {
145
+ TalkApiClient.instance.sendCustomMemo(templateId.toLong(), templateArgs?.toStringMap(), callback)
146
+ } else if (defaultTemplate != null) {
147
+ runCatching {
148
+ TalkApiClient.instance.sendDefaultMemo(
149
+ RNCKakaoShareTemplates.createDefaultTemplate(defaultTemplate, templateType),
150
+ callback,
151
+ )
152
+ }.onFailure { promise.rejectWith(it) }
153
+ } else {
154
+ promise.rejectWith(RNCKakaoUnknownException("one of templateId or defaultTemplate should exist"))
155
+ }
113
156
  }
114
157
 
115
- @ReactMethod
116
- override fun shareCalendarTemplate(
117
- value: ReadableMap,
118
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
119
- serverCallbackArgs: ReadableMap?,
158
+ private fun runSendToFriends(
159
+ templateType: String,
160
+ receiverUuids: List<String>,
161
+ templateId: Double? = null,
162
+ defaultTemplate: ReadableMap? = null,
163
+ templateArgs: ReadableMap? = null,
120
164
  promise: Promise,
121
- ) = onMain {
122
- runShare(
123
- defaultTemplate = RNCKakaoShareTemplates.createCalendarTemplate(value),
124
- useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
125
- serverCallbackArgs = serverCallbackArgs,
126
- promise = promise,
127
- )
165
+ ) {
166
+ val callback = { messageSendResult: MessageSendResult?, e: Throwable? ->
167
+ if (e != null) {
168
+ promise.rejectWith(e)
169
+ } else if (messageSendResult == null) {
170
+ promise.rejectWith(RNCKakaoResponseNotFoundException("messageSendResult"))
171
+ } else {
172
+ promise.resolve(argArr().pushStringList(messageSendResult.successfulReceiverUuids ?: listOf()))
173
+ }
174
+ }
175
+ if (templateId != null) {
176
+ TalkApiClient.instance.sendCustomMessage(receiverUuids, templateId.toLong(), templateArgs?.toStringMap(), callback)
177
+ } else if (defaultTemplate != null) {
178
+ runCatching {
179
+ TalkApiClient.instance.sendDefaultMessage(
180
+ receiverUuids,
181
+ RNCKakaoShareTemplates.createDefaultTemplate(defaultTemplate, templateType),
182
+ callback,
183
+ )
184
+ }.onFailure { promise.rejectWith(it) }
185
+ } else {
186
+ promise.rejectWith(RNCKakaoUnknownException("one of templateId or defaultTemplate should exist"))
187
+ }
128
188
  }
129
189
 
130
190
  private fun runShare(
191
+ templateType: String,
131
192
  templateId: Double? = null,
132
- defaultTemplate: DefaultTemplate? = null,
193
+ defaultTemplate: ReadableMap? = null,
133
194
  useWebBrowserIfKakaoTalkNotAvailable: Boolean,
134
195
  templateArgs: ReadableMap? = null,
135
196
  serverCallbackArgs: ReadableMap? = null,
@@ -162,48 +223,56 @@ class RNCKakaoShareModule internal constructor(context: ReactApplicationContext)
162
223
  callback = callback,
163
224
  )
164
225
  } else if (defaultTemplate != null) {
165
- ShareClient.instance.shareDefault(
166
- context,
167
- defaultTemplate,
168
- serverCallbackArgs = serverCallbackArgs?.toStringMap(),
169
- callback = callback,
170
- )
171
- }
172
- } else if (useWebBrowserIfKakaoTalkNotAvailable) {
173
- val sharerUrl =
174
- if (templateId != null) {
175
- WebSharerClient.instance.makeCustomUrl(
176
- templateId.toLong(),
177
- templateArgs = templateArgs?.toStringMap(),
178
- serverCallbackArgs = serverCallbackArgs?.toStringMap(),
179
- )
180
- } else if (defaultTemplate != null) {
181
- WebSharerClient.instance.makeDefaultUrl(
182
- defaultTemplate,
226
+ runCatching {
227
+ ShareClient.instance.shareDefault(
228
+ context,
229
+ RNCKakaoShareTemplates.createDefaultTemplate(defaultTemplate, templateType),
183
230
  serverCallbackArgs = serverCallbackArgs?.toStringMap(),
231
+ callback = callback,
184
232
  )
185
- } else {
186
- run {
187
- promise.rejectWith("one of templateId or template shouldn't be null")
188
- return
189
- }
233
+ }.onFailure {
234
+ promise.rejectWith(it)
190
235
  }
191
- try {
192
- KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
193
- promise.resolve(42)
194
- return
195
- } catch (_: UnsupportedOperationException) {
196
- }
197
- try {
198
- KakaoCustomTabsClient.open(context, sharerUrl)
199
- promise.resolve(42)
200
- return
201
- } catch (_: ActivityNotFoundException) {
202
236
  }
237
+ } else if (useWebBrowserIfKakaoTalkNotAvailable) {
238
+ runCatching {
239
+ val sharerUrl =
240
+ if (templateId != null) {
241
+ WebSharerClient.instance.makeCustomUrl(
242
+ templateId.toLong(),
243
+ templateArgs = templateArgs?.toStringMap(),
244
+ serverCallbackArgs = serverCallbackArgs?.toStringMap(),
245
+ )
246
+ } else if (defaultTemplate != null) {
247
+ WebSharerClient.instance.makeDefaultUrl(
248
+ RNCKakaoShareTemplates.createDefaultTemplate(defaultTemplate, templateType),
249
+ serverCallbackArgs = serverCallbackArgs?.toStringMap(),
250
+ )
251
+ } else {
252
+ run {
253
+ promise.rejectWith(RNCKakaoUnknownException("one of templateId or template shouldn't be null"))
254
+ return
255
+ }
256
+ }
257
+ try {
258
+ KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
259
+ promise.resolve(42)
260
+ return
261
+ } catch (_: UnsupportedOperationException) {
262
+ }
263
+ try {
264
+ KakaoCustomTabsClient.open(context, sharerUrl)
265
+ promise.resolve(42)
266
+ return
267
+ } catch (_: ActivityNotFoundException) {
268
+ }
203
269
 
204
- promise.rejectWith("web url open failed $sharerUrl")
270
+ promise.rejectWith(RNCKakaoUnknownException("web url open failed $sharerUrl"))
271
+ }.onFailure {
272
+ promise.rejectWith(it)
273
+ }
205
274
  } else {
206
- promise.rejectWith("kakaotalk not available")
275
+ promise.rejectWith(RNCKakaoAppNotAvailableException(TALK))
207
276
  }
208
277
  }
209
278
 
@@ -6,6 +6,7 @@ import com.kakao.sdk.template.model.CalendarTemplate
6
6
  import com.kakao.sdk.template.model.Commerce
7
7
  import com.kakao.sdk.template.model.CommerceTemplate
8
8
  import com.kakao.sdk.template.model.Content
9
+ import com.kakao.sdk.template.model.DefaultTemplate
9
10
  import com.kakao.sdk.template.model.FeedTemplate
10
11
  import com.kakao.sdk.template.model.IdType.CALENDAR
11
12
  import com.kakao.sdk.template.model.IdType.EVENT
@@ -16,11 +17,26 @@ import com.kakao.sdk.template.model.ListTemplate
16
17
  import com.kakao.sdk.template.model.LocationTemplate
17
18
  import com.kakao.sdk.template.model.Social
18
19
  import com.kakao.sdk.template.model.TextTemplate
20
+ import net.mjstudio.rnkakao.core.util.RNCKakaoUnknownException
19
21
  import net.mjstudio.rnkakao.core.util.filterIsReadableMap
20
22
  import net.mjstudio.rnkakao.core.util.getIntElseNull
21
23
  import net.mjstudio.rnkakao.core.util.toStringMap
22
24
 
23
25
  object RNCKakaoShareTemplates {
26
+ fun createDefaultTemplate(
27
+ template: ReadableMap,
28
+ templateType: String,
29
+ ): DefaultTemplate =
30
+ when (templateType) {
31
+ "feed" -> createFeedTemplate(template)
32
+ "list" -> createListTemplate(template)
33
+ "location" -> createLocationTemplate(template)
34
+ "commerce" -> createCommerceTemplate(template)
35
+ "text" -> createTextTemplate(template)
36
+ "calendar" -> createCalendarTemplate(template)
37
+ else -> throw RNCKakaoUnknownException("Unknown templateType: $templateType")
38
+ }
39
+
24
40
  private fun ReadableMap.toLink() =
25
41
  Link(
26
42
  webUrl = getString("webUrl"),
@@ -83,7 +99,7 @@ object RNCKakaoShareTemplates {
83
99
  currencyUnitPosition = getIntElseNull("currencyUnitPosition"),
84
100
  )
85
101
 
86
- fun createFeedTemplate(map: ReadableMap) =
102
+ private fun createFeedTemplate(map: ReadableMap) =
87
103
  FeedTemplate(
88
104
  content = map.getMap("content")!!.toContent(),
89
105
  itemContent = map.getMap("itemContent")?.toItemContent(),
@@ -92,7 +108,7 @@ object RNCKakaoShareTemplates {
92
108
  buttonTitle = map.getString("buttonTitle"),
93
109
  )
94
110
 
95
- fun createListTemplate(map: ReadableMap): ListTemplate {
111
+ private fun createListTemplate(map: ReadableMap): ListTemplate {
96
112
  return ListTemplate(
97
113
  headerTitle = map.getString("headerTitle") ?: "",
98
114
  headerLink = map.getMap("headerLink")?.toLink() ?: Link(),
@@ -104,7 +120,7 @@ object RNCKakaoShareTemplates {
104
120
  )
105
121
  }
106
122
 
107
- fun createLocationTemplate(map: ReadableMap) =
123
+ private fun createLocationTemplate(map: ReadableMap) =
108
124
  LocationTemplate(
109
125
  address = map.getString("address") ?: "",
110
126
  content = map.getMap("content")!!.toContent(),
@@ -114,7 +130,7 @@ object RNCKakaoShareTemplates {
114
130
  buttonTitle = map.getString("buttonTitle"),
115
131
  )
116
132
 
117
- fun createCommerceTemplate(map: ReadableMap) =
133
+ private fun createCommerceTemplate(map: ReadableMap) =
118
134
  CommerceTemplate(
119
135
  content = map.getMap("content")!!.toContent(),
120
136
  commerce = map.getMap("commerce")!!.toCommerce(),
@@ -122,7 +138,7 @@ object RNCKakaoShareTemplates {
122
138
  buttonTitle = map.getString("buttonTitle"),
123
139
  )
124
140
 
125
- fun createTextTemplate(map: ReadableMap) =
141
+ private fun createTextTemplate(map: ReadableMap) =
126
142
  TextTemplate(
127
143
  text = map.getString("text") ?: "",
128
144
  link = map.getMap("link")?.toLink() ?: Link(),
@@ -130,7 +146,7 @@ object RNCKakaoShareTemplates {
130
146
  buttonTitle = map.getString("buttonTitle"),
131
147
  )
132
148
 
133
- fun createCalendarTemplate(map: ReadableMap) =
149
+ private fun createCalendarTemplate(map: ReadableMap) =
134
150
  CalendarTemplate(
135
151
  id = map.getString("id")!!,
136
152
  idType = if (map.getString("id") == "event") EVENT else CALENDAR,
@@ -3,57 +3,20 @@ package net.mjstudio.rnkakao.share
3
3
  import com.facebook.react.bridge.Promise
4
4
  import com.facebook.react.bridge.ReactApplicationContext
5
5
  import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReadableArray
6
7
  import com.facebook.react.bridge.ReadableMap
7
8
 
8
9
  abstract class KakaoShareSpec internal constructor(context: ReactApplicationContext) :
9
10
  ReactContextBaseJavaModule(context) {
10
- abstract fun shareCustom(
11
+ abstract fun shareOrSendMeOrSendFriendOrWhatever(
12
+ sendType: String,
13
+ templateType: String,
11
14
  templateId: Double,
15
+ templateJson: ReadableMap,
16
+ receiverUuids: ReadableArray,
12
17
  useWebBrowserIfKakaoTalkNotAvailable: Boolean,
13
- templateArgs: ReadableMap?,
14
- serverCallbackArgs: ReadableMap?,
15
- promise: Promise,
16
- )
17
-
18
- abstract fun shareFeedTemplate(
19
- value: ReadableMap,
20
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
21
- serverCallbackArgs: ReadableMap?,
22
- promise: Promise,
23
- )
24
-
25
- abstract fun shareListTemplate(
26
- value: ReadableMap,
27
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
28
- serverCallbackArgs: ReadableMap?,
29
- promise: Promise,
30
- )
31
-
32
- abstract fun shareLocationTemplate(
33
- value: ReadableMap,
34
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
35
- serverCallbackArgs: ReadableMap?,
36
- promise: Promise,
37
- )
38
-
39
- abstract fun shareCommerceTemplate(
40
- value: ReadableMap,
41
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
42
- serverCallbackArgs: ReadableMap?,
43
- promise: Promise,
44
- )
45
-
46
- abstract fun shareTextTemplate(
47
- value: ReadableMap,
48
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
49
- serverCallbackArgs: ReadableMap?,
50
- promise: Promise,
51
- )
52
-
53
- abstract fun shareCalendarTemplate(
54
- value: ReadableMap,
55
- useWebBrowserIfKakaoTalkNotAvailable: Boolean,
56
- serverCallbackArgs: ReadableMap?,
18
+ templateArgs: ReadableMap,
19
+ serverCallbackArgs: ReadableMap,
57
20
  promise: Promise,
58
21
  )
59
22
  }
@@ -1,21 +1,6 @@
1
1
  #import "RNCKakaoShare.h"
2
2
  #import "RNCKakaoShare-Swift.h"
3
3
 
4
- #define RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(name, type_name) \
5
- RCT_EXPORT_METHOD(name \
6
- : (NSDictionary*)value useWebBrowserIfKakaoTalkNotAvailable \
7
- : (BOOL)useWebBrowserIfKakaoTalkNotAvailable serverCallbackArgs \
8
- : (NSDictionary*)serverCallbackArgs resolve \
9
- : (RCTPromiseResolveBlock)resolve reject \
10
- : (RCTPromiseRejectBlock)reject) { \
11
- [[self manager] shareDefaultTemplate:value \
12
- type:@ #type_name \
13
- useWebBrowserIfKakaoTalkNotAvailable:useWebBrowserIfKakaoTalkNotAvailable \
14
- serverCallbackArgs:serverCallbackArgs \
15
- resolve:resolve \
16
- reject:reject]; \
17
- }
18
-
19
4
  @implementation RNCKakaoShare
20
5
 
21
6
  - (RNCKakaoShareManager*)manager {
@@ -24,28 +9,36 @@
24
9
 
25
10
  RCT_EXPORT_MODULE()
26
11
 
27
- RCT_EXPORT_METHOD(shareCustom
28
- : (double)templateId useWebBrowserIfKakaoTalkNotAvailable
12
+ // RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareFeedTemplate, feed)
13
+ // RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareListTemplate, list)
14
+ // RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareLocationTemplate, location)
15
+ // RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareCommerceTemplate, commerce)
16
+ // RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareTextTemplate, text)
17
+ // RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareCalendarTemplate, calendar)
18
+
19
+ RCT_EXPORT_METHOD(shareOrSendMeOrSendFriendOrWhatever
20
+ : (NSString*)sendType templateType
21
+ : (NSString*)templateType templateId
22
+ : (double)templateId templateJson
23
+ : (NSDictionary*)templateJson receiverUuids
24
+ : (NSArray*)receiverUuids useWebBrowserIfKakaoTalkNotAvailable
29
25
  : (BOOL)useWebBrowserIfKakaoTalkNotAvailable templateArgs
30
26
  : (NSDictionary*)templateArgs serverCallbackArgs
31
27
  : (NSDictionary*)serverCallbackArgs resolve
32
28
  : (RCTPromiseResolveBlock)resolve reject
33
29
  : (RCTPromiseRejectBlock)reject) {
34
- [[self manager] shareCustom:(NSInteger)templateId
35
- useWebBrowserIfKakaoTalkNotAvailable:useWebBrowserIfKakaoTalkNotAvailable
36
- templateArgs:templateArgs
37
- serverCallbackArgs:serverCallbackArgs
38
- resolve:resolve
39
- reject:reject];
30
+ [[self manager] shareOrSendMeOrSendFriendOrWhatever:sendType
31
+ templateType:templateType
32
+ templateId:templateId
33
+ templateJson:templateJson
34
+ receiverUuids:receiverUuids
35
+ useWebBrowserIfKakaoTalkNotAvailable:useWebBrowserIfKakaoTalkNotAvailable
36
+ templateArgs:templateArgs
37
+ serverCallbackArgs:serverCallbackArgs
38
+ resolve:resolve
39
+ reject:reject];
40
40
  }
41
41
 
42
- RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareFeedTemplate, feed)
43
- RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareListTemplate, list)
44
- RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareLocationTemplate, location)
45
- RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareCommerceTemplate, commerce)
46
- RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareTextTemplate, text)
47
- RNC_KAKAO_SHARE_EXPORT_DEFAULT_TEMPLATE(shareCalendarTemplate, calendar)
48
-
49
42
  // Don't compile this code when we build for the old architecture.
50
43
  #ifdef RCT_NEW_ARCH_ENABLED
51
44
  - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule: