@react-native-kakao/share 1.5.2 → 1.6.1
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/RNCKakaoShare.podspec +1 -0
- package/android/build.gradle +3 -8
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareModule.kt +192 -124
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareTemplates.kt +22 -6
- package/android/src/oldarch/KakaoShareSpec.kt +8 -45
- package/ios/RNCKakaoShare.mm +23 -30
- package/ios/RNCKakaoShareManager.swift +179 -19
- package/lib/commonjs/index.js +116 -9
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/spec/NativeKakaoShare.js.map +1 -1
- package/lib/module/index.js +101 -8
- package/lib/module/index.js.map +1 -1
- package/lib/module/spec/NativeKakaoShare.js.map +1 -1
- package/lib/typescript/src/index.d.ts +59 -8
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts +2 -20
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/index.tsx +285 -8
- package/src/spec/NativeKakaoShare.ts +11 -38
package/RNCKakaoShare.podspec
CHANGED
package/android/build.gradle
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
apply from: file('./../../core/android/package-json.gradle')
|
|
2
2
|
def Versions = project.ext.RNCKakaoSdkVersions
|
|
3
|
-
|
|
4
|
-
|
|
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,15 +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.
|
|
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.
|
|
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
|
|
13
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
|
|
14
21
|
import net.mjstudio.rnkakao.core.util.onMain
|
|
22
|
+
import net.mjstudio.rnkakao.core.util.pushStringList
|
|
15
23
|
import net.mjstudio.rnkakao.core.util.rejectWith
|
|
16
24
|
import net.mjstudio.rnkakao.core.util.toStringMap
|
|
17
25
|
|
|
@@ -21,116 +29,168 @@ class RNCKakaoShareModule internal constructor(context: ReactApplicationContext)
|
|
|
21
29
|
return NAME
|
|
22
30
|
}
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
override fun shareOrSendMeOrSendFriendOrWhatever(
|
|
33
|
+
sendType: String,
|
|
34
|
+
templateType: String,
|
|
26
35
|
templateId: Double,
|
|
36
|
+
templateJson: ReadableMap,
|
|
37
|
+
receiverUuids: ReadableArray,
|
|
27
38
|
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
28
|
-
templateArgs: ReadableMap
|
|
29
|
-
serverCallbackArgs: ReadableMap
|
|
30
|
-
promise: Promise,
|
|
31
|
-
) = onMain {
|
|
32
|
-
runShare(
|
|
33
|
-
templateId = templateId,
|
|
34
|
-
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
35
|
-
templateArgs = templateArgs,
|
|
36
|
-
serverCallbackArgs = serverCallbackArgs,
|
|
37
|
-
promise = promise,
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@ReactMethod
|
|
42
|
-
override fun shareFeedTemplate(
|
|
43
|
-
value: ReadableMap,
|
|
44
|
-
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
45
|
-
serverCallbackArgs: ReadableMap?,
|
|
46
|
-
promise: Promise,
|
|
47
|
-
) = onMain {
|
|
48
|
-
runShare(
|
|
49
|
-
defaultTemplate = RNCKakaoShareTemplates.createFeedTemplate(value),
|
|
50
|
-
useWebBrowserIfKakaoTalkNotAvailable = useWebBrowserIfKakaoTalkNotAvailable,
|
|
51
|
-
serverCallbackArgs = serverCallbackArgs,
|
|
52
|
-
promise = promise,
|
|
53
|
-
)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
@ReactMethod
|
|
57
|
-
override fun shareListTemplate(
|
|
58
|
-
value: ReadableMap,
|
|
59
|
-
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
60
|
-
serverCallbackArgs: ReadableMap?,
|
|
39
|
+
templateArgs: ReadableMap,
|
|
40
|
+
serverCallbackArgs: ReadableMap,
|
|
61
41
|
promise: Promise,
|
|
62
42
|
) = onMain {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
+
}
|
|
69
65
|
}
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
private fun shareOrSendCustom(
|
|
68
|
+
sendType: String,
|
|
69
|
+
templateType: String,
|
|
70
|
+
templateId: Double,
|
|
71
|
+
receiverUuids: List<String>,
|
|
74
72
|
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
73
|
+
templateArgs: ReadableMap?,
|
|
75
74
|
serverCallbackArgs: ReadableMap?,
|
|
76
75
|
promise: Promise,
|
|
77
|
-
) =
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
+
}
|
|
84
97
|
}
|
|
85
98
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
99
|
+
private fun shareOrSendDefaultTemplate(
|
|
100
|
+
sendType: String,
|
|
101
|
+
templateType: String,
|
|
102
|
+
template: ReadableMap,
|
|
103
|
+
receiverUuids: List<String>,
|
|
89
104
|
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
90
105
|
serverCallbackArgs: ReadableMap?,
|
|
91
106
|
promise: Promise,
|
|
92
|
-
) =
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
+
}
|
|
99
128
|
}
|
|
100
129
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
130
|
+
private fun runSendToMe(
|
|
131
|
+
templateType: String,
|
|
132
|
+
templateId: Double? = null,
|
|
133
|
+
defaultTemplate: ReadableMap? = null,
|
|
134
|
+
templateArgs: ReadableMap? = null,
|
|
106
135
|
promise: Promise,
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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
|
+
}
|
|
114
156
|
}
|
|
115
157
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
158
|
+
private fun runSendToFriends(
|
|
159
|
+
templateType: String,
|
|
160
|
+
receiverUuids: List<String>,
|
|
161
|
+
templateId: Double? = null,
|
|
162
|
+
defaultTemplate: ReadableMap? = null,
|
|
163
|
+
templateArgs: ReadableMap? = null,
|
|
121
164
|
promise: Promise,
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
+
}
|
|
129
188
|
}
|
|
130
189
|
|
|
131
190
|
private fun runShare(
|
|
191
|
+
templateType: String,
|
|
132
192
|
templateId: Double? = null,
|
|
133
|
-
defaultTemplate:
|
|
193
|
+
defaultTemplate: ReadableMap? = null,
|
|
134
194
|
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
135
195
|
templateArgs: ReadableMap? = null,
|
|
136
196
|
serverCallbackArgs: ReadableMap? = null,
|
|
@@ -163,48 +223,56 @@ class RNCKakaoShareModule internal constructor(context: ReactApplicationContext)
|
|
|
163
223
|
callback = callback,
|
|
164
224
|
)
|
|
165
225
|
} else if (defaultTemplate != null) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
callback = callback,
|
|
171
|
-
)
|
|
172
|
-
}
|
|
173
|
-
} else if (useWebBrowserIfKakaoTalkNotAvailable) {
|
|
174
|
-
val sharerUrl =
|
|
175
|
-
if (templateId != null) {
|
|
176
|
-
WebSharerClient.instance.makeCustomUrl(
|
|
177
|
-
templateId.toLong(),
|
|
178
|
-
templateArgs = templateArgs?.toStringMap(),
|
|
179
|
-
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
180
|
-
)
|
|
181
|
-
} else if (defaultTemplate != null) {
|
|
182
|
-
WebSharerClient.instance.makeDefaultUrl(
|
|
183
|
-
defaultTemplate,
|
|
226
|
+
runCatching {
|
|
227
|
+
ShareClient.instance.shareDefault(
|
|
228
|
+
context,
|
|
229
|
+
RNCKakaoShareTemplates.createDefaultTemplate(defaultTemplate, templateType),
|
|
184
230
|
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
231
|
+
callback = callback,
|
|
185
232
|
)
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
promise.rejectWith(RNCKakaoUnknownException("one of templateId or template shouldn't be null"))
|
|
189
|
-
return
|
|
190
|
-
}
|
|
233
|
+
}.onFailure {
|
|
234
|
+
promise.rejectWith(it)
|
|
191
235
|
}
|
|
192
|
-
try {
|
|
193
|
-
KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
|
|
194
|
-
promise.resolve(42)
|
|
195
|
-
return
|
|
196
|
-
} catch (_: UnsupportedOperationException) {
|
|
197
|
-
}
|
|
198
|
-
try {
|
|
199
|
-
KakaoCustomTabsClient.open(context, sharerUrl)
|
|
200
|
-
promise.resolve(42)
|
|
201
|
-
return
|
|
202
|
-
} catch (_: ActivityNotFoundException) {
|
|
203
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
|
+
}
|
|
204
269
|
|
|
205
|
-
|
|
270
|
+
promise.rejectWith(RNCKakaoUnknownException("web url open failed $sharerUrl"))
|
|
271
|
+
}.onFailure {
|
|
272
|
+
promise.rejectWith(it)
|
|
273
|
+
}
|
|
206
274
|
} else {
|
|
207
|
-
promise.rejectWith(
|
|
275
|
+
promise.rejectWith(RNCKakaoAppNotAvailableException(TALK))
|
|
208
276
|
}
|
|
209
277
|
}
|
|
210
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
|
|
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
|
}
|
package/ios/RNCKakaoShare.mm
CHANGED
|
@@ -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
|
-
|
|
28
|
-
|
|
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]
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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:
|