@react-native-kakao/share 3.1.0-next.0 → 3.1.0-next.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/CHANGELOG.md +26 -0
- package/RNCKakaoShare.podspec +0 -1
- package/android/build.gradle +1 -2
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareModule.kt +323 -11
- package/android/src/main/java/net/mjstudio/rnkakao/share/RNCKakaoShareTemplates.kt +5 -2
- package/ios/RNCKakaoShare.mm +64 -5
- package/ios/RNCKakaoShareManager.swift +315 -36
- package/lib/commonjs/index.js +137 -29
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +199 -21
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/spec/NativeKakaoShare.ts +76 -3
- package/lib/commonjs/validateSharePickerSettings.js +33 -0
- package/lib/commonjs/validateSharePickerSettings.js.map +1 -0
- package/lib/module/index.js +128 -29
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +190 -21
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/spec/NativeKakaoShare.ts +76 -3
- package/lib/module/validateSharePickerSettings.js +29 -0
- package/lib/module/validateSharePickerSettings.js.map +1 -0
- package/lib/typescript/src/index.d.ts +83 -23
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts +72 -1
- package/lib/typescript/src/spec/NativeKakaoShare.d.ts.map +1 -1
- package/lib/typescript/src/validateSharePickerSettings.d.ts +6 -0
- package/lib/typescript/src/validateSharePickerSettings.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +258 -15
- package/src/index.web.ts +232 -36
- package/src/spec/NativeKakaoShare.ts +76 -3
- package/src/validateSharePickerSettings.ts +38 -0
|
@@ -6,10 +6,192 @@ import KakaoSDKTemplate
|
|
|
6
6
|
import React
|
|
7
7
|
import RNCKakaoCore
|
|
8
8
|
import SafariServices
|
|
9
|
+
import UIKit
|
|
10
|
+
|
|
11
|
+
private let noCustomTemplateId: Int64 = -1
|
|
9
12
|
|
|
10
13
|
@objc public class RNCKakaoShareManager: NSObject {
|
|
11
14
|
@objc public static let shared = RNCKakaoShareManager()
|
|
12
15
|
|
|
16
|
+
@objc public func makeTemplateUrl(
|
|
17
|
+
_ templateType: String,
|
|
18
|
+
templateId: Int64,
|
|
19
|
+
templateJson: [String: Any],
|
|
20
|
+
templateArgs: [String: String]?,
|
|
21
|
+
serverCallbackArgs: [String: String]?,
|
|
22
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
23
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
24
|
+
) {
|
|
25
|
+
onMain {
|
|
26
|
+
do {
|
|
27
|
+
let url: URL?
|
|
28
|
+
if templateType == "custom" {
|
|
29
|
+
url = ShareApi.shared.makeCustomUrl(
|
|
30
|
+
templateId: templateId, templateArgs: templateArgs,
|
|
31
|
+
serverCallbackArgs: serverCallbackArgs
|
|
32
|
+
)
|
|
33
|
+
} else if templateType == "scrap" {
|
|
34
|
+
guard let requestUrl = templateJson["requestUrl"] as? String else {
|
|
35
|
+
throw RNCKakaoError.unknown("requestUrl is required")
|
|
36
|
+
}
|
|
37
|
+
url = ShareApi.shared.makeScrapUrl(
|
|
38
|
+
requestUrl: requestUrl,
|
|
39
|
+
templateId: templateId == noCustomTemplateId ? nil : templateId,
|
|
40
|
+
templateArgs: templateArgs,
|
|
41
|
+
serverCallbackArgs: serverCallbackArgs
|
|
42
|
+
)
|
|
43
|
+
} else {
|
|
44
|
+
var template: [String: Any?] = templateJson
|
|
45
|
+
let templatable = try self.generateTemplatable(templateType, &template)
|
|
46
|
+
url = ShareApi.shared.makeDefaultUrl(
|
|
47
|
+
templatable: templatable, serverCallbackArgs: serverCallbackArgs
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
guard let url else {
|
|
51
|
+
throw RNCKakaoError.unknown("Failed to create sharing URL")
|
|
52
|
+
}
|
|
53
|
+
resolve(url.absoluteString)
|
|
54
|
+
} catch {
|
|
55
|
+
RNCKakaoUtil.reject(reject, error)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@objc public func isKakaoTalkSharingAvailable(_ resolve: @escaping RCTPromiseResolveBlock) {
|
|
61
|
+
onMain {
|
|
62
|
+
resolve(ShareApi.isKakaoTalkSharingAvailable())
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@objc public func getTemplateDiagnostics(
|
|
67
|
+
_ templateType: String,
|
|
68
|
+
templateId: Int64,
|
|
69
|
+
templateJson: [String: Any],
|
|
70
|
+
templateArgs: [String: String]?,
|
|
71
|
+
serverCallbackArgs: [String: String]?,
|
|
72
|
+
pickerSettings: [String: Any]?,
|
|
73
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
74
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
75
|
+
) {
|
|
76
|
+
onMain {
|
|
77
|
+
let requestUrl = templateType == "scrap" ? templateJson["requestUrl"] as? String : nil
|
|
78
|
+
guard templateType != "scrap" || requestUrl != nil else {
|
|
79
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.unknown("requestUrl is required"))
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
let customTemplateId: Int64? =
|
|
83
|
+
templateType == "custom" || templateId != noCustomTemplateId ? templateId : nil
|
|
84
|
+
self.runShare(
|
|
85
|
+
templateType: templateType,
|
|
86
|
+
templateId: customTemplateId,
|
|
87
|
+
defaultTemplate: templateJson,
|
|
88
|
+
useWebBrowserIfKakaoTalkNotAvailable: false,
|
|
89
|
+
templateArgs: templateArgs,
|
|
90
|
+
serverCallbackArgs: serverCallbackArgs,
|
|
91
|
+
pickerSettings: pickerSettings,
|
|
92
|
+
requestUrl: requestUrl,
|
|
93
|
+
resolve: resolve,
|
|
94
|
+
reject: reject,
|
|
95
|
+
diagnosticsOnly: true
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@objc public func uploadImage(
|
|
101
|
+
_ imageUri: String,
|
|
102
|
+
secureResource: Bool,
|
|
103
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
104
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
105
|
+
) {
|
|
106
|
+
DispatchQueue.global(qos: .userInitiated).async {
|
|
107
|
+
do {
|
|
108
|
+
let maxImageBytes = 5 * 1024 * 1024
|
|
109
|
+
let imageSizeError = "Image must be no larger than 5 MB"
|
|
110
|
+
let data: Data
|
|
111
|
+
if imageUri.hasPrefix("data:image/") {
|
|
112
|
+
let parts = imageUri.split(separator: ",", maxSplits: 1, omittingEmptySubsequences: false)
|
|
113
|
+
guard parts.count == 2, parts[0].hasSuffix(";base64") else {
|
|
114
|
+
throw RNCKakaoError.unknown("Expected a base64 image data URI")
|
|
115
|
+
}
|
|
116
|
+
guard parts[1].utf8.count <= ((maxImageBytes + 2) / 3) * 4 else {
|
|
117
|
+
throw RNCKakaoError.unknown(imageSizeError)
|
|
118
|
+
}
|
|
119
|
+
guard let decoded = Data(base64Encoded: String(parts[1])) else {
|
|
120
|
+
throw RNCKakaoError.unknown("Expected a base64 image data URI")
|
|
121
|
+
}
|
|
122
|
+
data = decoded
|
|
123
|
+
} else {
|
|
124
|
+
let url = imageUri.hasPrefix("/") ? URL(fileURLWithPath: imageUri) : URL(string: imageUri)
|
|
125
|
+
guard let url, url.isFileURL else {
|
|
126
|
+
throw RNCKakaoError.unknown("Expected a local file or base64 image data URI")
|
|
127
|
+
}
|
|
128
|
+
let file = try FileHandle(forReadingFrom: url)
|
|
129
|
+
defer { try? file.close() }
|
|
130
|
+
data = try file.read(upToCount: maxImageBytes + 1) ?? Data()
|
|
131
|
+
}
|
|
132
|
+
guard data.count <= maxImageBytes else {
|
|
133
|
+
throw RNCKakaoError.unknown(imageSizeError)
|
|
134
|
+
}
|
|
135
|
+
guard let image = UIImage(data: data) else {
|
|
136
|
+
throw RNCKakaoError.unknown("Image file cannot be decoded")
|
|
137
|
+
}
|
|
138
|
+
onMain {
|
|
139
|
+
ShareApi.shared
|
|
140
|
+
.imageUpload(image: image, secureResource: secureResource) { result, error in
|
|
141
|
+
if let error {
|
|
142
|
+
RNCKakaoUtil.reject(reject, error)
|
|
143
|
+
} else if let result {
|
|
144
|
+
let original = result.infos.original
|
|
145
|
+
resolve([
|
|
146
|
+
"infos": [
|
|
147
|
+
"original": [
|
|
148
|
+
"url": original.url.absoluteString,
|
|
149
|
+
"contentType": original.contentType,
|
|
150
|
+
"length": original.length,
|
|
151
|
+
"width": original.width,
|
|
152
|
+
"height": original.height
|
|
153
|
+
]
|
|
154
|
+
]
|
|
155
|
+
])
|
|
156
|
+
} else {
|
|
157
|
+
RNCKakaoUtil.reject(
|
|
158
|
+
reject,
|
|
159
|
+
RNCKakaoError.responseNotFound(name: "imageUploadResult")
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
} catch {
|
|
165
|
+
RNCKakaoUtil.reject(reject, error)
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@objc public func shareScrapTemplate(
|
|
171
|
+
_ requestUrl: String,
|
|
172
|
+
useWebBrowserIfKakaoTalkNotAvailable: Bool,
|
|
173
|
+
templateId: NSNumber?,
|
|
174
|
+
templateArgs: [String: String]?,
|
|
175
|
+
serverCallbackArgs: [String: String]?,
|
|
176
|
+
pickerSettings: [String: Any]?,
|
|
177
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
178
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
179
|
+
) {
|
|
180
|
+
onMain {
|
|
181
|
+
self.runShare(
|
|
182
|
+
templateType: "scrap",
|
|
183
|
+
templateId: templateId?.int64Value,
|
|
184
|
+
useWebBrowserIfKakaoTalkNotAvailable: useWebBrowserIfKakaoTalkNotAvailable,
|
|
185
|
+
templateArgs: templateArgs,
|
|
186
|
+
serverCallbackArgs: serverCallbackArgs,
|
|
187
|
+
pickerSettings: pickerSettings,
|
|
188
|
+
requestUrl: requestUrl,
|
|
189
|
+
resolve: resolve,
|
|
190
|
+
reject: reject
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
13
195
|
@objc public func scrapImage(
|
|
14
196
|
_ imageUrl: String,
|
|
15
197
|
secureResource: Bool,
|
|
@@ -53,6 +235,7 @@ import SafariServices
|
|
|
53
235
|
useWebBrowserIfKakaoTalkNotAvailable: Bool,
|
|
54
236
|
templateArgs: [String: String]?,
|
|
55
237
|
serverCallbackArgs: [String: String]?,
|
|
238
|
+
pickerSettings: [String: Any]?,
|
|
56
239
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
57
240
|
reject: @escaping RCTPromiseRejectBlock
|
|
58
241
|
) {
|
|
@@ -66,9 +249,44 @@ import SafariServices
|
|
|
66
249
|
useWebBrowserIfKakaoTalkNotAvailable: useWebBrowserIfKakaoTalkNotAvailable,
|
|
67
250
|
templateArgs: templateArgs,
|
|
68
251
|
serverCallbackArgs: serverCallbackArgs,
|
|
252
|
+
pickerSettings: pickerSettings,
|
|
69
253
|
resolve: resolve,
|
|
70
254
|
reject: reject
|
|
71
255
|
)
|
|
256
|
+
} else if templateType == "scrap" {
|
|
257
|
+
guard let requestUrl = templateJson["requestUrl"] as? String else {
|
|
258
|
+
RNCKakaoUtil.reject(
|
|
259
|
+
reject,
|
|
260
|
+
RNCKakaoError.unknown("requestUrl is required for scrap messages")
|
|
261
|
+
)
|
|
262
|
+
return
|
|
263
|
+
}
|
|
264
|
+
let customTemplateId: Int64? = templateId == noCustomTemplateId ? nil : templateId
|
|
265
|
+
if sendType == "send-me" {
|
|
266
|
+
self.runSendMe(
|
|
267
|
+
templateType: templateType,
|
|
268
|
+
templateId: customTemplateId,
|
|
269
|
+
templateArgs: templateArgs,
|
|
270
|
+
resolve: resolve,
|
|
271
|
+
reject: reject,
|
|
272
|
+
requestUrl: requestUrl
|
|
273
|
+
)
|
|
274
|
+
} else if sendType == "send-friend" {
|
|
275
|
+
self.runSendFriend(
|
|
276
|
+
templateType: templateType,
|
|
277
|
+
templateId: customTemplateId,
|
|
278
|
+
receiverUuids: receiverUuids,
|
|
279
|
+
templateArgs: templateArgs,
|
|
280
|
+
resolve: resolve,
|
|
281
|
+
reject: reject,
|
|
282
|
+
requestUrl: requestUrl
|
|
283
|
+
)
|
|
284
|
+
} else {
|
|
285
|
+
RNCKakaoUtil.reject(
|
|
286
|
+
reject,
|
|
287
|
+
RNCKakaoError.unknown("Unknown sendType for scrap messages: \(sendType)")
|
|
288
|
+
)
|
|
289
|
+
}
|
|
72
290
|
} else {
|
|
73
291
|
self.shareOrSendDefaultTemplate(
|
|
74
292
|
sendType: sendType,
|
|
@@ -77,6 +295,7 @@ import SafariServices
|
|
|
77
295
|
receiverUuids: receiverUuids,
|
|
78
296
|
useWebBrowserIfKakaoTalkNotAvailable: useWebBrowserIfKakaoTalkNotAvailable,
|
|
79
297
|
serverCallbackArgs: serverCallbackArgs,
|
|
298
|
+
pickerSettings: pickerSettings,
|
|
80
299
|
resolve: resolve,
|
|
81
300
|
reject: reject
|
|
82
301
|
)
|
|
@@ -92,6 +311,7 @@ import SafariServices
|
|
|
92
311
|
useWebBrowserIfKakaoTalkNotAvailable: Bool,
|
|
93
312
|
templateArgs: [String: String]?,
|
|
94
313
|
serverCallbackArgs: [String: String]?,
|
|
314
|
+
pickerSettings: [String: Any]?,
|
|
95
315
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
96
316
|
reject: @escaping RCTPromiseRejectBlock
|
|
97
317
|
) {
|
|
@@ -102,6 +322,7 @@ import SafariServices
|
|
|
102
322
|
useWebBrowserIfKakaoTalkNotAvailable: useWebBrowserIfKakaoTalkNotAvailable,
|
|
103
323
|
templateArgs: templateArgs,
|
|
104
324
|
serverCallbackArgs: serverCallbackArgs,
|
|
325
|
+
pickerSettings: pickerSettings,
|
|
105
326
|
resolve: resolve,
|
|
106
327
|
reject: reject
|
|
107
328
|
)
|
|
@@ -134,6 +355,7 @@ import SafariServices
|
|
|
134
355
|
receiverUuids: [String],
|
|
135
356
|
useWebBrowserIfKakaoTalkNotAvailable: Bool,
|
|
136
357
|
serverCallbackArgs: [String: String]?,
|
|
358
|
+
pickerSettings: [String: Any]?,
|
|
137
359
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
138
360
|
reject: @escaping RCTPromiseRejectBlock
|
|
139
361
|
) {
|
|
@@ -144,6 +366,7 @@ import SafariServices
|
|
|
144
366
|
useWebBrowserIfKakaoTalkNotAvailable: useWebBrowserIfKakaoTalkNotAvailable,
|
|
145
367
|
templateArgs: serverCallbackArgs,
|
|
146
368
|
serverCallbackArgs: serverCallbackArgs,
|
|
369
|
+
pickerSettings: pickerSettings,
|
|
147
370
|
resolve: resolve,
|
|
148
371
|
reject: reject
|
|
149
372
|
)
|
|
@@ -168,7 +391,8 @@ import SafariServices
|
|
|
168
391
|
defaultTemplate: [String: Any?]? = nil,
|
|
169
392
|
templateArgs: [String: String]? = nil,
|
|
170
393
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
171
|
-
reject: @escaping RCTPromiseRejectBlock
|
|
394
|
+
reject: @escaping RCTPromiseRejectBlock,
|
|
395
|
+
requestUrl: String? = nil
|
|
172
396
|
) {
|
|
173
397
|
let sendCompletion = { (error: Error?) in
|
|
174
398
|
if let error {
|
|
@@ -178,7 +402,14 @@ import SafariServices
|
|
|
178
402
|
}
|
|
179
403
|
}
|
|
180
404
|
|
|
181
|
-
if let
|
|
405
|
+
if let requestUrl {
|
|
406
|
+
TalkApi.shared.sendScrapMemo(
|
|
407
|
+
requestUrl: requestUrl,
|
|
408
|
+
templateId: templateId,
|
|
409
|
+
templateArgs: templateArgs,
|
|
410
|
+
completion: sendCompletion
|
|
411
|
+
)
|
|
412
|
+
} else if let templateId {
|
|
182
413
|
TalkApi.shared.sendCustomMemo(
|
|
183
414
|
templateId: templateId,
|
|
184
415
|
templateArgs: templateArgs,
|
|
@@ -206,19 +437,37 @@ import SafariServices
|
|
|
206
437
|
receiverUuids: [String],
|
|
207
438
|
templateArgs: [String: String]? = nil,
|
|
208
439
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
209
|
-
reject: @escaping RCTPromiseRejectBlock
|
|
440
|
+
reject: @escaping RCTPromiseRejectBlock,
|
|
441
|
+
requestUrl: String? = nil
|
|
210
442
|
) {
|
|
211
443
|
let sendCompletion = { (messageSendResult: MessageSendResult?, error: Error?) in
|
|
212
444
|
if let error {
|
|
213
445
|
RNCKakaoUtil.reject(reject, error)
|
|
214
446
|
} else if let messageSendResult {
|
|
215
|
-
resolve(
|
|
447
|
+
resolve([
|
|
448
|
+
"successfulReceiverUuids": messageSendResult.successfulReceiverUuids ?? [],
|
|
449
|
+
"failureInfos": messageSendResult.failureInfos?.map { failure in
|
|
450
|
+
[
|
|
451
|
+
"code": failure.code,
|
|
452
|
+
"msg": failure.msg,
|
|
453
|
+
"receiverUuids": failure.receiverUuids
|
|
454
|
+
]
|
|
455
|
+
} ?? []
|
|
456
|
+
])
|
|
216
457
|
} else {
|
|
217
458
|
RNCKakaoUtil.reject(reject, RNCKakaoError.unknown("messageSendResult"))
|
|
218
459
|
}
|
|
219
460
|
}
|
|
220
461
|
|
|
221
|
-
if let
|
|
462
|
+
if let requestUrl {
|
|
463
|
+
TalkApi.shared.sendScrapMessage(
|
|
464
|
+
requestUrl: requestUrl,
|
|
465
|
+
templateId: templateId,
|
|
466
|
+
templateArgs: templateArgs,
|
|
467
|
+
receiverUuids: receiverUuids,
|
|
468
|
+
completion: sendCompletion
|
|
469
|
+
)
|
|
470
|
+
} else if let templateId {
|
|
222
471
|
TalkApi.shared.sendCustomMessage(
|
|
223
472
|
templateId: templateId,
|
|
224
473
|
templateArgs: templateArgs,
|
|
@@ -251,16 +500,27 @@ import SafariServices
|
|
|
251
500
|
useWebBrowserIfKakaoTalkNotAvailable: Bool,
|
|
252
501
|
templateArgs: [String: String]? = nil,
|
|
253
502
|
serverCallbackArgs: [String: String]?,
|
|
503
|
+
pickerSettings: [String: Any]?,
|
|
504
|
+
requestUrl: String? = nil,
|
|
254
505
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
255
|
-
reject: @escaping RCTPromiseRejectBlock
|
|
506
|
+
reject: @escaping RCTPromiseRejectBlock,
|
|
507
|
+
diagnosticsOnly: Bool = false
|
|
256
508
|
) {
|
|
509
|
+
let result: Any? = requestUrl == nil ? 42 : nil
|
|
257
510
|
let shareCompletion = { (sharingResult: SharingResult?, error: Error?) in
|
|
258
511
|
if let error {
|
|
259
512
|
RNCKakaoUtil.reject(reject, error)
|
|
260
513
|
} else if let sharingResult {
|
|
514
|
+
if diagnosticsOnly {
|
|
515
|
+
resolve([
|
|
516
|
+
"warningMsg": sharingResult.warningMsg ?? [:],
|
|
517
|
+
"argumentMsg": sharingResult.argumentMsg ?? [:]
|
|
518
|
+
])
|
|
519
|
+
return
|
|
520
|
+
}
|
|
261
521
|
UIApplication.shared.open(sharingResult.url, options: [:]) { success in
|
|
262
522
|
if success {
|
|
263
|
-
resolve(
|
|
523
|
+
resolve(result)
|
|
264
524
|
} else {
|
|
265
525
|
RNCKakaoUtil.reject(
|
|
266
526
|
reject,
|
|
@@ -273,10 +533,24 @@ import SafariServices
|
|
|
273
533
|
}
|
|
274
534
|
}
|
|
275
535
|
|
|
276
|
-
if ShareApi.isKakaoTalkSharingAvailable() {
|
|
277
|
-
|
|
536
|
+
if diagnosticsOnly || ShareApi.isKakaoTalkSharingAvailable() {
|
|
537
|
+
let shareType = (pickerSettings?["type"] as? String).flatMap(ShareType.init(rawValue:))
|
|
538
|
+
let limit = (pickerSettings?["limit"] as? NSNumber)?.intValue
|
|
539
|
+
if let requestUrl {
|
|
540
|
+
ShareApi.shared.shareScrap(
|
|
541
|
+
requestUrl: requestUrl,
|
|
542
|
+
templateId: templateId,
|
|
543
|
+
templateArgs: templateArgs,
|
|
544
|
+
shareType: shareType,
|
|
545
|
+
limit: limit,
|
|
546
|
+
serverCallbackArgs: serverCallbackArgs,
|
|
547
|
+
completion: shareCompletion
|
|
548
|
+
)
|
|
549
|
+
} else if let templateId {
|
|
278
550
|
ShareApi.shared.shareCustom(
|
|
279
551
|
templateId: templateId,
|
|
552
|
+
shareType: shareType,
|
|
553
|
+
limit: limit,
|
|
280
554
|
templateArgs: templateArgs,
|
|
281
555
|
serverCallbackArgs: serverCallbackArgs,
|
|
282
556
|
completion: shareCompletion
|
|
@@ -286,6 +560,8 @@ import SafariServices
|
|
|
286
560
|
let templatable = try generateTemplatable(templateType, &defaultTemplate)
|
|
287
561
|
ShareApi.shared.shareDefault(
|
|
288
562
|
templatable: templatable,
|
|
563
|
+
shareType: shareType,
|
|
564
|
+
limit: limit,
|
|
289
565
|
serverCallbackArgs: serverCallbackArgs,
|
|
290
566
|
completion: shareCompletion
|
|
291
567
|
)
|
|
@@ -299,25 +575,24 @@ import SafariServices
|
|
|
299
575
|
)
|
|
300
576
|
}
|
|
301
577
|
} else if useWebBrowserIfKakaoTalkNotAvailable {
|
|
302
|
-
if let
|
|
578
|
+
if let requestUrl {
|
|
579
|
+
if let url = ShareApi.shared.makeScrapUrl(
|
|
580
|
+
requestUrl: requestUrl,
|
|
581
|
+
templateId: templateId,
|
|
582
|
+
templateArgs: templateArgs,
|
|
583
|
+
serverCallbackArgs: serverCallbackArgs
|
|
584
|
+
) {
|
|
585
|
+
presentShareUrl(url)
|
|
586
|
+
} else {
|
|
587
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.unknown("makeScrapUrl failed"))
|
|
588
|
+
}
|
|
589
|
+
} else if let templateId {
|
|
303
590
|
if let url = ShareApi.shared.makeCustomUrl(
|
|
304
591
|
templateId: templateId,
|
|
305
592
|
templateArgs: templateArgs,
|
|
306
593
|
serverCallbackArgs: serverCallbackArgs
|
|
307
594
|
) {
|
|
308
|
-
|
|
309
|
-
safariViewController.modalTransitionStyle = .crossDissolve
|
|
310
|
-
safariViewController.modalPresentationStyle = .overCurrentContext
|
|
311
|
-
RNCKakaoUtil.presentViewController(safariViewController) { success in
|
|
312
|
-
if success {
|
|
313
|
-
resolve(42)
|
|
314
|
-
} else {
|
|
315
|
-
RNCKakaoUtil.reject(
|
|
316
|
-
reject,
|
|
317
|
-
RNCKakaoError.unknown("SFSafariViewController open failed")
|
|
318
|
-
)
|
|
319
|
-
}
|
|
320
|
-
}
|
|
595
|
+
presentShareUrl(url)
|
|
321
596
|
} else {
|
|
322
597
|
RNCKakaoUtil.reject(reject, RNCKakaoError.unknown("makeCustomUrl failed"))
|
|
323
598
|
}
|
|
@@ -329,19 +604,7 @@ import SafariServices
|
|
|
329
604
|
templatable: templatable,
|
|
330
605
|
serverCallbackArgs: serverCallbackArgs
|
|
331
606
|
) {
|
|
332
|
-
|
|
333
|
-
safariViewController.modalTransitionStyle = .crossDissolve
|
|
334
|
-
safariViewController.modalPresentationStyle = .overCurrentContext
|
|
335
|
-
RNCKakaoUtil.presentViewController(safariViewController) { success in
|
|
336
|
-
if success {
|
|
337
|
-
resolve(42)
|
|
338
|
-
} else {
|
|
339
|
-
RNCKakaoUtil.reject(
|
|
340
|
-
reject,
|
|
341
|
-
RNCKakaoError.unknown("SFSafariViewController open failed")
|
|
342
|
-
)
|
|
343
|
-
}
|
|
344
|
-
}
|
|
607
|
+
presentShareUrl(url)
|
|
345
608
|
} else {
|
|
346
609
|
RNCKakaoUtil.reject(reject, RNCKakaoError.unknown("makeDefaultUrl failed"))
|
|
347
610
|
}
|
|
@@ -357,6 +620,22 @@ import SafariServices
|
|
|
357
620
|
} else {
|
|
358
621
|
RNCKakaoUtil.reject(reject, RNCKakaoError.kakaoAppNotAvailable(app: .talk))
|
|
359
622
|
}
|
|
623
|
+
|
|
624
|
+
func presentShareUrl(_ url: URL) {
|
|
625
|
+
let safariViewController = SFSafariViewController(url: url)
|
|
626
|
+
safariViewController.modalTransitionStyle = .crossDissolve
|
|
627
|
+
safariViewController.modalPresentationStyle = .overCurrentContext
|
|
628
|
+
RNCKakaoUtil.presentViewController(safariViewController) { success in
|
|
629
|
+
if success {
|
|
630
|
+
resolve(result)
|
|
631
|
+
} else {
|
|
632
|
+
RNCKakaoUtil.reject(
|
|
633
|
+
reject,
|
|
634
|
+
RNCKakaoError.unknown("SFSafariViewController open failed")
|
|
635
|
+
)
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
360
639
|
}
|
|
361
640
|
|
|
362
641
|
private func generateTemplatable(
|