@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 +1 -1
- package/RNCKakaoShare.podspec +1 -0
- package/android/build.gradle +3 -8
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareModule.kt +193 -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 +200 -25
- 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 +8 -5
- package/src/index.tsx +285 -8
- package/src/spec/NativeKakaoShare.ts +11 -38
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2024
|
|
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
|
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,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.
|
|
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
|
|
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
|
-
|
|
24
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
) =
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
) =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
130
|
+
private fun runSendToMe(
|
|
131
|
+
templateType: String,
|
|
132
|
+
templateId: Double? = null,
|
|
133
|
+
defaultTemplate: ReadableMap? = null,
|
|
134
|
+
templateArgs: ReadableMap? = null,
|
|
105
135
|
promise: Promise,
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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:
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
}
|
|
186
|
-
|
|
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
|
-
|
|
270
|
+
promise.rejectWith(RNCKakaoUnknownException("web url open failed $sharerUrl"))
|
|
271
|
+
}.onFailure {
|
|
272
|
+
promise.rejectWith(it)
|
|
273
|
+
}
|
|
205
274
|
} else {
|
|
206
|
-
promise.rejectWith(
|
|
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
|
|
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:
|