@react-native-kakao/share 1.0.2 → 1.0.4
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.
|
@@ -8,7 +8,11 @@ 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
|
+
import com.kakao.sdk.share.model.SharingResult
|
|
12
|
+
import com.kakao.sdk.template.model.DefaultTemplate
|
|
13
|
+
import net.mjstudio.rnkakao.core.util.onMain
|
|
11
14
|
import net.mjstudio.rnkakao.core.util.rejectWith
|
|
15
|
+
import net.mjstudio.rnkakao.core.util.toStringMap
|
|
12
16
|
|
|
13
17
|
class RNCKakaoShareModule internal constructor(context: ReactApplicationContext) :
|
|
14
18
|
KakaoShareSpec(context) {
|
|
@@ -24,14 +28,44 @@ class RNCKakaoShareModule internal constructor(context: ReactApplicationContext)
|
|
|
24
28
|
templateArgs: ReadableMap?,
|
|
25
29
|
serverCallbackArgs: ReadableMap?,
|
|
26
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
|
+
// fun shareFeed(serverCallbackArgs: ReadableMap?, promise: Promise) {
|
|
43
|
+
// val context = currentActivity
|
|
44
|
+
// if (context == null) {
|
|
45
|
+
// promise.rejectWith(ActivityNotFoundException())
|
|
46
|
+
// return
|
|
47
|
+
// }
|
|
48
|
+
// ShareClient.instance.shareDefault(context, serverCallbackArgs = serverCallbackArgs) {
|
|
49
|
+
//
|
|
50
|
+
// }
|
|
51
|
+
// }
|
|
52
|
+
|
|
53
|
+
private fun runShare(
|
|
54
|
+
templateId: Double? = null,
|
|
55
|
+
defaultTemplate: DefaultTemplate? = null,
|
|
56
|
+
useWebBrowserIfKakaoTalkNotAvailable: Boolean,
|
|
57
|
+
templateArgs: ReadableMap?,
|
|
58
|
+
serverCallbackArgs: ReadableMap?,
|
|
59
|
+
promise: Promise,
|
|
27
60
|
) {
|
|
28
61
|
val context = currentActivity
|
|
29
62
|
if (context == null) {
|
|
30
63
|
promise.rejectWith(ActivityNotFoundException())
|
|
31
64
|
return
|
|
32
65
|
}
|
|
66
|
+
|
|
33
67
|
if (ShareClient.instance.isKakaoTalkSharingAvailable(context)) {
|
|
34
|
-
|
|
68
|
+
val callback = { sharingResult: SharingResult?, error: Throwable? ->
|
|
35
69
|
if (error != null) {
|
|
36
70
|
promise.rejectWith(error)
|
|
37
71
|
} else if (sharingResult != null) {
|
|
@@ -39,27 +73,45 @@ class RNCKakaoShareModule internal constructor(context: ReactApplicationContext)
|
|
|
39
73
|
promise.resolve(42)
|
|
40
74
|
}
|
|
41
75
|
}
|
|
42
|
-
} else if (useWebBrowserIfKakaoTalkNotAvailable) {
|
|
43
|
-
val sharerUrl = WebSharerClient.instance.makeCustomUrl(templateId.toLong())
|
|
44
|
-
|
|
45
|
-
// CustomTabs으로 웹 브라우저 열기
|
|
46
76
|
|
|
47
|
-
|
|
48
|
-
|
|
77
|
+
if (templateId != null) {
|
|
78
|
+
ShareClient.instance.shareCustom(
|
|
79
|
+
context,
|
|
80
|
+
templateId.toLong(),
|
|
81
|
+
templateArgs = templateArgs?.toStringMap(),
|
|
82
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
83
|
+
callback = callback,
|
|
84
|
+
)
|
|
85
|
+
} else if (defaultTemplate != null) {
|
|
86
|
+
ShareClient.instance.shareDefault(
|
|
87
|
+
context,
|
|
88
|
+
defaultTemplate,
|
|
89
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap(),
|
|
90
|
+
callback = callback,
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
} else if (useWebBrowserIfKakaoTalkNotAvailable) {
|
|
94
|
+
val sharerUrl = if (templateId != null) WebSharerClient.instance.makeCustomUrl(
|
|
95
|
+
templateId.toLong(),
|
|
96
|
+
templateArgs = templateArgs?.toStringMap(),
|
|
97
|
+
serverCallbackArgs = serverCallbackArgs?.toStringMap()
|
|
98
|
+
) else if (defaultTemplate != null) WebSharerClient.instance.makeDefaultUrl(
|
|
99
|
+
defaultTemplate, serverCallbackArgs = serverCallbackArgs?.toStringMap()
|
|
100
|
+
) else run {
|
|
101
|
+
promise.rejectWith("one of templateId or template shouldn't be null")
|
|
102
|
+
return
|
|
103
|
+
}
|
|
49
104
|
try {
|
|
50
105
|
KakaoCustomTabsClient.openWithDefault(context, sharerUrl)
|
|
51
106
|
promise.resolve(42)
|
|
52
107
|
return
|
|
53
|
-
} catch (
|
|
108
|
+
} catch (_: UnsupportedOperationException) {
|
|
54
109
|
}
|
|
55
|
-
|
|
56
|
-
// 2. CustomTabsServiceConnection 미지원 브라우저 열기
|
|
57
|
-
// ex) 다음, 네이버 등
|
|
58
110
|
try {
|
|
59
111
|
KakaoCustomTabsClient.open(context, sharerUrl)
|
|
60
112
|
promise.resolve(42)
|
|
61
113
|
return
|
|
62
|
-
} catch (
|
|
114
|
+
} catch (_: ActivityNotFoundException) {
|
|
63
115
|
}
|
|
64
116
|
|
|
65
117
|
promise.rejectWith("web url open failed $sharerUrl")
|
package/ios/RNCKakaoShare.mm
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
RCT_EXPORT_MODULE()
|
|
11
11
|
|
|
12
12
|
RCT_EXPORT_METHOD(shareCustom
|
|
13
|
-
: (double)templateId
|
|
13
|
+
: (double)templateId useWebBrowserIfKakaoTalkNotAvailable
|
|
14
14
|
: (BOOL)useWebBrowserIfKakaoTalkNotAvailable templateArgs
|
|
15
15
|
: (NSDictionary*)templateArgs serverCallbackArgs
|
|
16
16
|
: (NSDictionary*)serverCallbackArgs resolve
|
|
@@ -15,45 +15,51 @@ import SafariServices
|
|
|
15
15
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
16
16
|
reject: @escaping RCTPromiseRejectBlock
|
|
17
17
|
) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
onMain {
|
|
19
|
+
// 카카오톡 설치여부 확인
|
|
20
|
+
if ShareApi.isKakaoTalkSharingAvailable() {
|
|
21
|
+
// 카카오톡으로 카카오톡 공유 가능
|
|
22
|
+
ShareApi.shared.shareCustom(
|
|
23
|
+
templateId: templateId,
|
|
24
|
+
templateArgs: templateArgs,
|
|
25
|
+
serverCallbackArgs: serverCallbackArgs
|
|
26
|
+
) { sharingResult, error in
|
|
27
|
+
if let error {
|
|
28
|
+
RNCKakaoUtil.reject(reject, error)
|
|
29
|
+
} else if let sharingResult {
|
|
30
|
+
UIApplication.shared.open(sharingResult.url, options: [:]) { success in
|
|
31
|
+
if success {
|
|
32
|
+
resolve(42)
|
|
33
|
+
} else {
|
|
34
|
+
RNCKakaoUtil.reject(reject, "sharingResult url open failed \(sharingResult.url)")
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
} else {
|
|
38
|
+
RNCKakaoUtil.reject(reject, "sharingResult url not found")
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
} else if useWebBrowserIfKakaoTalkNotAvailable {
|
|
42
|
+
if let url = ShareApi.shared.makeCustomUrl(
|
|
43
|
+
templateId: templateId,
|
|
44
|
+
templateArgs: templateArgs,
|
|
45
|
+
serverCallbackArgs: serverCallbackArgs
|
|
46
|
+
) {
|
|
47
|
+
let safariViewController = SFSafariViewController(url: url)
|
|
48
|
+
safariViewController.modalTransitionStyle = .crossDissolve
|
|
49
|
+
safariViewController.modalPresentationStyle = .overCurrentContext
|
|
50
|
+
RNCKakaoUtil.presentViewController(safariViewController) { success in
|
|
30
51
|
if success {
|
|
31
52
|
resolve(42)
|
|
32
53
|
} else {
|
|
33
|
-
RNCKakaoUtil.reject(reject, "
|
|
54
|
+
RNCKakaoUtil.reject(reject, "SFSafariViewController open failed")
|
|
34
55
|
}
|
|
35
56
|
}
|
|
36
57
|
} else {
|
|
37
|
-
RNCKakaoUtil.reject(reject, "
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
} else if useWebBrowserIfKakaoTalkNotAvailable {
|
|
41
|
-
if let url = ShareApi.shared.makeCustomUrl(
|
|
42
|
-
templateId: templateId,
|
|
43
|
-
templateArgs: templateArgs,
|
|
44
|
-
serverCallbackArgs: serverCallbackArgs
|
|
45
|
-
) {
|
|
46
|
-
let safariViewController = SFSafariViewController(url: url)
|
|
47
|
-
safariViewController.modalTransitionStyle = .crossDissolve
|
|
48
|
-
safariViewController.modalPresentationStyle = .overCurrentContext
|
|
49
|
-
RNCKakaoUtil.presentViewController(safariViewController) {
|
|
50
|
-
resolve(42)
|
|
58
|
+
RNCKakaoUtil.reject(reject, "makeCustomUrl failed")
|
|
51
59
|
}
|
|
52
60
|
} else {
|
|
53
|
-
RNCKakaoUtil.reject(reject, "
|
|
61
|
+
RNCKakaoUtil.reject(reject, "kakaotalk not available")
|
|
54
62
|
}
|
|
55
|
-
} else {
|
|
56
|
-
RNCKakaoUtil.reject(reject, "kakaotalk not available")
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-native-kakao/share",
|
|
3
3
|
"description": "React Native Kakao Share SDK",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.4",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
7
7
|
"types": "lib/typescript/src/index.d.ts",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"access": "public"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@react-native-kakao/core": "^1.0.
|
|
61
|
+
"@react-native-kakao/core": "^1.0.4",
|
|
62
62
|
"@types/jest": "^29.5.5",
|
|
63
63
|
"@types/react": "^18.2.44",
|
|
64
64
|
"del-cli": "^5.1.0",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"typescript": "5.1.6"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
|
-
"@react-native-kakao/core": "^1.0.
|
|
72
|
+
"@react-native-kakao/core": "^1.0.4",
|
|
73
73
|
"react": "*",
|
|
74
74
|
"react-native": "*"
|
|
75
75
|
},
|
|
@@ -105,5 +105,5 @@
|
|
|
105
105
|
"javaPackageName": "net.mjstudio.rnkakao.share"
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
|
-
"gitHead": "
|
|
108
|
+
"gitHead": "e50a806a701e689981bde39e4429a17a923490da"
|
|
109
109
|
}
|