@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
- ShareClient.instance.shareCustom(context, templateId.toLong()) { sharingResult, error ->
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
- // 1. CustomTabsServiceConnection 지원 브라우저 열기
48
- // ex) Chrome, 삼성 인터넷, FireFox, 웨일 등
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 (e: UnsupportedOperationException) { // CustomTabsServiceConnection 지원 브라우저가 없을 때 예외처리
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 (e: ActivityNotFoundException) { // 디바이스에 설치된 인터넷 브라우저가 없을 때 예외처리
114
+ } catch (_: ActivityNotFoundException) {
63
115
  }
64
116
 
65
117
  promise.rejectWith("web url open failed $sharerUrl")
@@ -0,0 +1,11 @@
1
+ package net.mjstudio.rnkakao.share
2
+
3
+ object RNCKakaoShareTemplates { // fun createFeed() {
4
+ // return FeedTemplate(
5
+ // content = Content(),
6
+ // itemContent = ItemContent(),
7
+ // social = Social(),
8
+ //
9
+ // )
10
+ // }
11
+ }
@@ -10,7 +10,7 @@
10
10
  RCT_EXPORT_MODULE()
11
11
 
12
12
  RCT_EXPORT_METHOD(shareCustom
13
- : (double)templateId useWebBrwoserIfKakaoTalkNotAvailable
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
- if ShareApi.isKakaoTalkSharingAvailable() {
20
- // 카카오톡으로 카카오톡 공유 가능
21
- ShareApi.shared.shareCustom(
22
- templateId: templateId,
23
- templateArgs: templateArgs,
24
- serverCallbackArgs: serverCallbackArgs
25
- ) { sharingResult, error in
26
- if let error {
27
- RNCKakaoUtil.reject(reject, error)
28
- } else if let sharingResult {
29
- UIApplication.shared.open(sharingResult.url, options: [:]) { success in
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, "sharingResult url open failed \(sharingResult.url)")
54
+ RNCKakaoUtil.reject(reject, "SFSafariViewController open failed")
34
55
  }
35
56
  }
36
57
  } else {
37
- RNCKakaoUtil.reject(reject, "sharingResult url not found")
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, "makeCustomUrl failed")
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.2",
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.2",
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.2",
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": "ba5da3fc09a61f4797c0c35cb8b290839f0bfbca"
108
+ "gitHead": "e50a806a701e689981bde39e4429a17a923490da"
109
109
  }