Skip to content

Commit b87a008

Browse files
authored
Merge pull request #36 from mym0404/fix/share/ios-link-execution-params
fix(share): ios: swap mobile execution params values into string from object
2 parents 71a136e + 1d7a4c9 commit b87a008

File tree

5 files changed

+96
-35
lines changed

5 files changed

+96
-35
lines changed

example/src/app/share.tsx

+14-12
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ import { Txt } from '../component/Txt';
4040
const link: KakaoTemplateLink = {
4141
webUrl: 'https://mjstudio.net',
4242
mobileWebUrl: 'https://mjstudio.net',
43+
iosExecutionParams: {},
44+
androidExecutionParams: {},
4345
};
4446

4547
const social: KakaoTemplateSocial = {
@@ -197,15 +199,15 @@ export default function Page() {
197199
shareFeedTemplate({
198200
template: feed,
199201
serverCallbackArgs: {},
200-
});
202+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
201203
}}
202204
/>
203205
<Btn
204206
title={'Send Feed Template To Me'}
205207
onPress={() => {
206208
sendFeedTemplateToMe({
207209
template: feed,
208-
});
210+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
209211
}}
210212
/>
211213
<Btn
@@ -225,15 +227,15 @@ export default function Page() {
225227
shareListTemplate({
226228
template: list,
227229
serverCallbackArgs: {},
228-
});
230+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
229231
}}
230232
/>
231233
<Btn
232234
title={'Send List Template To Me'}
233235
onPress={() => {
234236
sendListTemplateToMe({
235237
template: list,
236-
});
238+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
237239
}}
238240
/>
239241
<Btn
@@ -253,15 +255,15 @@ export default function Page() {
253255
shareLocationTemplate({
254256
template: location,
255257
serverCallbackArgs: {},
256-
});
258+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
257259
}}
258260
/>
259261
<Btn
260262
title={'Send Location Template To Me'}
261263
onPress={() => {
262264
sendLocationTemplateToMe({
263265
template: location,
264-
});
266+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
265267
}}
266268
/>
267269
<Btn
@@ -281,15 +283,15 @@ export default function Page() {
281283
shareCommerceTemplate({
282284
template: commerce,
283285
serverCallbackArgs: {},
284-
});
286+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
285287
}}
286288
/>
287289
<Btn
288290
title={'Send Commerce Template To Me'}
289291
onPress={() => {
290292
sendCommerceTemplateToMe({
291293
template: commerce,
292-
});
294+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
293295
}}
294296
/>
295297
<Btn
@@ -309,15 +311,15 @@ export default function Page() {
309311
shareTextTemplate({
310312
template: text,
311313
serverCallbackArgs: {},
312-
});
314+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
313315
}}
314316
/>
315317
<Btn
316318
title={'Send Text Template To Me'}
317319
onPress={() => {
318320
sendTextTemplateToMe({
319321
template: text,
320-
});
322+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
321323
}}
322324
/>
323325
<Btn
@@ -337,15 +339,15 @@ export default function Page() {
337339
shareCalendarTemplate({
338340
template: calendar,
339341
serverCallbackArgs: {},
340-
});
342+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
341343
}}
342344
/>
343345
<Btn
344346
title={'Send Calendar Template To Me'}
345347
onPress={() => {
346348
sendCalendarTemplateToMe({
347349
template: calendar,
348-
});
350+
}).catch((e) => showMessage({ type: 'warning', message: e.message }));
349351
}}
350352
/>
351353
<Btn

packages/share/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,6 @@
110110
},
111111
"gitHead": "5ca9177f7ac369140ffb58d3c1285c2e5c96057d",
112112
"dependencies": {
113-
"@mj-studio/js-util": "1.1.3"
113+
"@mj-studio/js-util": "1.1.14"
114114
}
115115
}

packages/share/src/index.ts

+50-21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NativeModules, Platform } from 'react-native';
2+
import type { Double, UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
23

34
import type {
45
KakaoCalendarTemplate,
@@ -16,6 +17,7 @@ import type {
1617
KakaoTextTemplate,
1718
Spec,
1819
} from './spec/NativeKakaoShare';
20+
import { swapMobileExecutionParamsFieldValueIntoStringInIOS } from './util/swapMobileExecutionParamsFieldValueIntoStringInIOS';
1921

2022
export type {
2123
KakaoTemplateSocial,
@@ -55,6 +57,33 @@ const Native: Spec = Module
5557
},
5658
);
5759

60+
function shareOrSendMeOrSendFriendOrWhatever(
61+
/* share, send-me, send-friend */
62+
sendType: string,
63+
/* custom, feed, list, location, commerce, text, calendar */
64+
templateType: string,
65+
/* only for custom */
66+
templateId: Double,
67+
/* only for default templates */
68+
templateJson: UnsafeObject,
69+
/* only for pass friend uuid directly */
70+
receiverUuids: ReadonlyArray<string>,
71+
useWebBrowserIfKakaoTalkNotAvailable: boolean,
72+
templateArgs: Readonly<{ [key: string]: string }>,
73+
serverCallbackArgs: Readonly<{ [key: string]: string }>,
74+
): Promise<any> {
75+
return Native.shareOrSendMeOrSendFriendOrWhatever(
76+
sendType,
77+
templateType,
78+
templateId,
79+
swapMobileExecutionParamsFieldValueIntoStringInIOS(templateJson),
80+
receiverUuids,
81+
useWebBrowserIfKakaoTalkNotAvailable,
82+
templateArgs,
83+
serverCallbackArgs,
84+
);
85+
}
86+
5887
const SendTypes = { share: 'share', sendMe: 'send-me', sendFriend: 'send-friend' };
5988
const TemplateTypes = {
6089
custom: 'custom',
@@ -77,7 +106,7 @@ export function shareCustomTemplate({
77106
templateArgs?: Record<string, string>;
78107
serverCallbackArgs?: Record<string, string>;
79108
}) {
80-
return Native.shareOrSendMeOrSendFriendOrWhatever(
109+
return shareOrSendMeOrSendFriendOrWhatever(
81110
SendTypes.share,
82111
TemplateTypes.custom,
83112
templateId,
@@ -96,7 +125,7 @@ export function sendCustomTemplateToMe({
96125
templateId: number;
97126
templateArgs?: Record<string, string>;
98127
}) {
99-
return Native.shareOrSendMeOrSendFriendOrWhatever(
128+
return shareOrSendMeOrSendFriendOrWhatever(
100129
SendTypes.sendMe,
101130
TemplateTypes.custom,
102131
templateId,
@@ -117,7 +146,7 @@ export function sendCustomTemplateToFriends({
117146
templateArgs?: Record<string, string>;
118147
receiverUuids: string[];
119148
}): Promise<string[]> {
120-
return Native.shareOrSendMeOrSendFriendOrWhatever(
149+
return shareOrSendMeOrSendFriendOrWhatever(
121150
SendTypes.sendFriend,
122151
TemplateTypes.custom,
123152
templateId,
@@ -138,7 +167,7 @@ export function shareFeedTemplate({
138167
useWebBrowserIfKakaoTalkNotAvailable?: boolean;
139168
serverCallbackArgs?: Record<string, string>;
140169
}) {
141-
return Native.shareOrSendMeOrSendFriendOrWhatever(
170+
return shareOrSendMeOrSendFriendOrWhatever(
142171
SendTypes.share,
143172
TemplateTypes.feed,
144173
-1,
@@ -151,7 +180,7 @@ export function shareFeedTemplate({
151180
}
152181

153182
export function sendFeedTemplateToMe({ template }: { template: KakaoFeedTemplate }) {
154-
return Native.shareOrSendMeOrSendFriendOrWhatever(
183+
return shareOrSendMeOrSendFriendOrWhatever(
155184
SendTypes.sendMe,
156185
TemplateTypes.feed,
157186
-1,
@@ -170,7 +199,7 @@ export function sendFeedTemplateToFriends({
170199
template: KakaoFeedTemplate;
171200
receiverUuids: string[];
172201
}): Promise<string[]> {
173-
return Native.shareOrSendMeOrSendFriendOrWhatever(
202+
return shareOrSendMeOrSendFriendOrWhatever(
174203
SendTypes.sendFriend,
175204
TemplateTypes.feed,
176205
-1,
@@ -191,7 +220,7 @@ export function shareListTemplate({
191220
useWebBrowserIfKakaoTalkNotAvailable?: boolean;
192221
serverCallbackArgs?: Record<string, string>;
193222
}) {
194-
return Native.shareOrSendMeOrSendFriendOrWhatever(
223+
return shareOrSendMeOrSendFriendOrWhatever(
195224
SendTypes.share,
196225
TemplateTypes.list,
197226
-1,
@@ -204,7 +233,7 @@ export function shareListTemplate({
204233
}
205234

206235
export function sendListTemplateToMe({ template }: { template: KakaoListTemplate }) {
207-
return Native.shareOrSendMeOrSendFriendOrWhatever(
236+
return shareOrSendMeOrSendFriendOrWhatever(
208237
SendTypes.sendMe,
209238
TemplateTypes.list,
210239
-1,
@@ -223,7 +252,7 @@ export function sendListTemplateToFriends({
223252
template: KakaoListTemplate;
224253
receiverUuids: string[];
225254
}): Promise<string[]> {
226-
return Native.shareOrSendMeOrSendFriendOrWhatever(
255+
return shareOrSendMeOrSendFriendOrWhatever(
227256
SendTypes.sendFriend,
228257
TemplateTypes.list,
229258
-1,
@@ -244,7 +273,7 @@ export function shareLocationTemplate({
244273
useWebBrowserIfKakaoTalkNotAvailable?: boolean;
245274
serverCallbackArgs?: Record<string, string>;
246275
}) {
247-
return Native.shareOrSendMeOrSendFriendOrWhatever(
276+
return shareOrSendMeOrSendFriendOrWhatever(
248277
SendTypes.share,
249278
TemplateTypes.location,
250279
-1,
@@ -257,7 +286,7 @@ export function shareLocationTemplate({
257286
}
258287

259288
export function sendLocationTemplateToMe({ template }: { template: KakaoLocationTemplate }) {
260-
return Native.shareOrSendMeOrSendFriendOrWhatever(
289+
return shareOrSendMeOrSendFriendOrWhatever(
261290
SendTypes.sendMe,
262291
TemplateTypes.location,
263292
-1,
@@ -276,7 +305,7 @@ export function sendLocationTemplateToFriends({
276305
template: KakaoLocationTemplate;
277306
receiverUuids: string[];
278307
}): Promise<string[]> {
279-
return Native.shareOrSendMeOrSendFriendOrWhatever(
308+
return shareOrSendMeOrSendFriendOrWhatever(
280309
SendTypes.sendFriend,
281310
TemplateTypes.location,
282311
-1,
@@ -297,7 +326,7 @@ export function shareCommerceTemplate({
297326
useWebBrowserIfKakaoTalkNotAvailable?: boolean;
298327
serverCallbackArgs?: Record<string, string>;
299328
}) {
300-
return Native.shareOrSendMeOrSendFriendOrWhatever(
329+
return shareOrSendMeOrSendFriendOrWhatever(
301330
SendTypes.share,
302331
TemplateTypes.commerce,
303332
-1,
@@ -310,7 +339,7 @@ export function shareCommerceTemplate({
310339
}
311340

312341
export function sendCommerceTemplateToMe({ template }: { template: KakaoCommerceTemplate }) {
313-
return Native.shareOrSendMeOrSendFriendOrWhatever(
342+
return shareOrSendMeOrSendFriendOrWhatever(
314343
SendTypes.sendMe,
315344
TemplateTypes.commerce,
316345
-1,
@@ -329,7 +358,7 @@ export function sendCommerceTemplateToFriends({
329358
template: KakaoCommerceTemplate;
330359
receiverUuids: string[];
331360
}): Promise<string[]> {
332-
return Native.shareOrSendMeOrSendFriendOrWhatever(
361+
return shareOrSendMeOrSendFriendOrWhatever(
333362
SendTypes.sendFriend,
334363
TemplateTypes.commerce,
335364
-1,
@@ -350,7 +379,7 @@ export function shareTextTemplate({
350379
useWebBrowserIfKakaoTalkNotAvailable?: boolean;
351380
serverCallbackArgs?: Record<string, string>;
352381
}) {
353-
return Native.shareOrSendMeOrSendFriendOrWhatever(
382+
return shareOrSendMeOrSendFriendOrWhatever(
354383
SendTypes.share,
355384
TemplateTypes.text,
356385
-1,
@@ -363,7 +392,7 @@ export function shareTextTemplate({
363392
}
364393

365394
export function sendTextTemplateToMe({ template }: { template: KakaoTextTemplate }) {
366-
return Native.shareOrSendMeOrSendFriendOrWhatever(
395+
return shareOrSendMeOrSendFriendOrWhatever(
367396
SendTypes.sendMe,
368397
TemplateTypes.text,
369398
-1,
@@ -382,7 +411,7 @@ export function sendTextTemplateToFriends({
382411
template: KakaoTextTemplate;
383412
receiverUuids: string[];
384413
}): Promise<string[]> {
385-
return Native.shareOrSendMeOrSendFriendOrWhatever(
414+
return shareOrSendMeOrSendFriendOrWhatever(
386415
SendTypes.sendFriend,
387416
TemplateTypes.text,
388417
-1,
@@ -403,7 +432,7 @@ export function shareCalendarTemplate({
403432
useWebBrowserIfKakaoTalkNotAvailable?: boolean;
404433
serverCallbackArgs?: Record<string, string>;
405434
}) {
406-
return Native.shareOrSendMeOrSendFriendOrWhatever(
435+
return shareOrSendMeOrSendFriendOrWhatever(
407436
SendTypes.share,
408437
TemplateTypes.calendar,
409438
-1,
@@ -416,7 +445,7 @@ export function shareCalendarTemplate({
416445
}
417446

418447
export function sendCalendarTemplateToMe({ template }: { template: KakaoCalendarTemplate }) {
419-
return Native.shareOrSendMeOrSendFriendOrWhatever(
448+
return shareOrSendMeOrSendFriendOrWhatever(
420449
SendTypes.sendMe,
421450
TemplateTypes.calendar,
422451
-1,
@@ -435,7 +464,7 @@ export function sendCalendarTemplateToFriends({
435464
template: KakaoCalendarTemplate;
436465
receiverUuids: string[];
437466
}): Promise<string[]> {
438-
return Native.shareOrSendMeOrSendFriendOrWhatever(
467+
return shareOrSendMeOrSendFriendOrWhatever(
439468
SendTypes.sendFriend,
440469
TemplateTypes.calendar,
441470
-1,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Platform } from 'react-native';
2+
import { replaceJsonValuesRecursively } from '@mj-studio/js-util';
3+
4+
export function swapMobileExecutionParamsFieldValueIntoStringInIOS<T extends object>(
5+
template: T,
6+
): T {
7+
if (Platform.OS !== 'ios') {
8+
return template;
9+
}
10+
11+
return replaceJsonValuesRecursively(template, {
12+
replacer: {
13+
androidExecutionParams: (value: Record<string, string>) =>
14+
Object.entries(value)
15+
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
16+
.join('&'),
17+
iosExecutionParams: (value: Record<string, string>) =>
18+
Object.entries(value)
19+
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
20+
.join('&'),
21+
},
22+
});
23+
}

0 commit comments

Comments
 (0)