Skip to content

Commit ba6978b

Browse files
committed
feat: iOS - backward compatible TurboModule
1 parent d0dc70d commit ba6978b

File tree

5 files changed

+107
-38
lines changed

5 files changed

+107
-38
lines changed

example/ios/Podfile.lock

Lines changed: 56 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,28 @@ PODS:
55
- fmt (9.1.0)
66
- glog (0.3.5)
77
- Intercom (18.7.3)
8-
- intercom-react-native (8.5.0):
8+
- intercom-react-native (8.7.0):
9+
- DoubleConversion
10+
- glog
911
- Intercom (~> 18.7.3)
12+
- RCT-Folly (= 2024.01.01.00)
13+
- RCTRequired
14+
- RCTTypeSafety
15+
- React-Codegen
1016
- React-Core
17+
- React-debug
18+
- React-Fabric
19+
- React-featureflags
20+
- React-graphics
21+
- React-ImageManager
22+
- React-jsi
23+
- React-NativeModulesApple
24+
- React-RCTFabric
25+
- React-rendererdebug
26+
- React-utils
27+
- ReactCommon/turbomodule/bridging
28+
- ReactCommon/turbomodule/core
29+
- Yoga
1130
- RCT-Folly (2024.01.01.00):
1231
- boost
1332
- DoubleConversion
@@ -1314,55 +1333,55 @@ SPEC CHECKSUMS:
13141333
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
13151334
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
13161335
Intercom: 93c6f5d9815b34bf2a7e5f03bcf7b6e08c1a4788
1317-
intercom-react-native: 985eb561fd1eb0765f86a3332a89a4f31ce3dfaa
1318-
RCT-Folly: 045d6ecaa59d826c5736dfba0b2f4083ff8d79df
1336+
intercom-react-native: d2b3c5cd9d8de856ab622145caa60cad77c3ac6d
1337+
RCT-Folly: 5f972de9f7d384c7d0e7380dd7da506228e568f5
13191338
RCTDeprecation: 3ca8b6c36bfb302e1895b72cfe7db0de0c92cd47
13201339
RCTRequired: 9fc183af555fd0c89a366c34c1ae70b7e03b1dc5
13211340
RCTTypeSafety: db1dd5ad1081a5e160d30bb29ef922693d5ac4b1
13221341
React: 8650d592d90b99097504b8dcfebab883972aed71
13231342
React-callinvoker: 6bb8b399ab8cec59e52458c3a592aa1fca130b68
1324-
React-Codegen: 0c5fb82424bc21119c79da38b93ab8a62bcf5f9f
1325-
React-Core: 6dc6cccf86dd6eb53e5f689211ceb2037d65d3a6
1326-
React-CoreModules: 087c24b785afc79d29d23bffe7b02f79bb00cf76
1327-
React-cxxreact: 8b5a860f8c673ba4f98a3e30b41d4a2ae20f3a31
1343+
React-Codegen: fbad87d0dc7c5bc1536b25bc5cf2f19a1449e438
1344+
React-Core: ab1b60c382b7b79c374b68918f856826ec7f02a9
1345+
React-CoreModules: c5791800e490979b15b819e13ceaee42aa4a2672
1346+
React-cxxreact: 7a5de9c31527a3a36b02caa3540ab55080a6448a
13281347
React-debug: 41175f3e30dfa8af6eab2631261e1eac26307f9f
1329-
React-Fabric: 109d6c97fb4856f3edd848d5d896b71dedeaa361
1330-
React-FabricImage: de46a64a0ca4b0409a0acfb2f5ccdf1195f2d8e2
1348+
React-Fabric: c96fe05717ffb9ab37f7533e9697e68932a621d4
1349+
React-FabricImage: 837a4d681f01084888c7ed55df848eb3611c5691
13311350
React-featureflags: 5e7e78c607661fe7f72bc38c6f03736e0876753a
1332-
React-graphics: 354adf8693bf849e696bf5096abc8cdc22c78ab4
1333-
React-ImageManager: 74e0898e24b12c45c40019b8558a1310d0b2a47c
1351+
React-graphics: ea6e3c3f77683565552986548ba6a2938cb83251
1352+
React-ImageManager: 49a461cd14ed15749fe7371afb1924e8a72aecc1
13341353
React-jsc: 8c066d00deacb809aba74cbe3fc94b76d5ae6b7e
1335-
React-jserrorhandler: 33cb327f5c6e1571b362f1a9c762ff839a5adb15
1336-
React-jsi: 9ab5aa12ce6d9238a150e81f43c99b97e53a48a7
1337-
React-jsiexecutor: c30f9dda4147c7339cffc64d6ad596c6faddddb9
1338-
React-jsinspector: 50cfdab96549beab8d6554e39f3d36ed2ba23078
1339-
React-jsitracing: 36a2bbc272300313653d980de5ab700ec86c534a
1340-
React-logger: 03f2f7b955cfe24593a2b8c9705c23e142d1ad24
1341-
React-Mapbuffer: 5e05d78fe6505f4a054b86f415733d4ad02dd314
1342-
react-native-config: 3367df9c1f25bb96197007ec531c7087ed4554c3
1354+
React-jserrorhandler: bccc0691bf5195f4da1292a4d2fbaa13fa895f89
1355+
React-jsi: 20c796a75f92a22b083ebe78005b50fecfe025bd
1356+
React-jsiexecutor: 2ac1b518e12547c6389d6b314f4d17b283feab7a
1357+
React-jsinspector: 1cdd1dbae4aa9c455da2fec9ecda2381dda54695
1358+
React-jsitracing: d30048b056e8c9673dfbe67813bdb874c03558a5
1359+
React-logger: 5ae0978955199c132e71e8cf7797f619a6d17164
1360+
React-Mapbuffer: 3b85b3778e447cd1f06d353b8e967af50f272829
1361+
react-native-config: 644074ab88db883fcfaa584f03520ec29589d7df
13431362
React-nativeconfig: 951ec32f632e81cbd7d40aebb3211313251c092e
1344-
React-NativeModulesApple: add06f130d91f3ca13b92d35861fdd6fdb9157e6
1363+
React-NativeModulesApple: 612f931b1e79736f2d59353979042a424fb314c8
13451364
React-perflogger: 271f1111779fef70f9502d1d38da5132e5585230
13461365
React-RCTActionSheet: 5d6fb9adb11ab1bfbce6695a2b785767e4658c53
1347-
React-RCTAnimation: 86ace32c56e69b3822e7e5184ea83a79d47fc7b9
1348-
React-RCTAppDelegate: 6379a11a49fd0be615dc2e23da0c8a84c52ec65c
1349-
React-RCTBlob: 558daf7c11715ef24d97a0be5ccc3b209753682c
1350-
React-RCTFabric: eb4b1fc3718040717f17114b7782a519987bd7c4
1351-
React-RCTImage: b482f07cfdbe8e413edbf9d85953cecdb569472c
1352-
React-RCTLinking: fbd73a66cab34df69b2389c17f200e4722890fd9
1353-
React-RCTNetwork: fbdd716fbd6e53feb6d8e00eeb85e8184ad42ac8
1354-
React-RCTSettings: 11c3051b965593988298a3f5fb39e23bf6f7df9f
1355-
React-RCTText: f240b4d39c36c295204d29e7634a2fac450b6d29
1356-
React-RCTVibration: 1750f80b39e1ad9b4f509f4fdf19a803f7ab0d38
1357-
React-rendererdebug: a89ffa25c7670de8f22e0b322dfdd8333bc0d126
1366+
React-RCTAnimation: 0d11291f869c8a15cff4fd21dca031a83f9e8527
1367+
React-RCTAppDelegate: 77a7b9a27f10aa55da5a44132be281a15cc0848c
1368+
React-RCTBlob: 72759b7acf86de079c87a1562a440612c57da1b0
1369+
React-RCTFabric: a0345a090221724893e0ea20ffab73324f4b6520
1370+
React-RCTImage: 80ba9b23ecf87536b14c5eb38bd76f9d2b842c8a
1371+
React-RCTLinking: afd22b0854eba28eb277baad45c37ada5ef77bc3
1372+
React-RCTNetwork: ffe5a1021f5a0bcbdf7944665dc44856493ab5bd
1373+
React-RCTSettings: f8472ee7998de8d186c198e820c40fcaf9ce4571
1374+
React-RCTText: f556484bf1ba49a7c9b1ce1138608657d80e0bcb
1375+
React-RCTVibration: 236755b4231073ebac6cabc3864edb4cd6308d89
1376+
React-rendererdebug: c1dac9f04b12f05929b6113a50aec5fcd5132b94
13581377
React-rncore: a3ab9e7271a5c692918e2a483beb900ff0a51169
1359-
React-RuntimeApple: dbaeec3eb503510c93e91d49e92fc39c0ccf7e3a
1360-
React-RuntimeCore: 67e737df40b8815f65671fbaf8f75440e7fba96e
1378+
React-RuntimeApple: 7fae2c2c7aa890e78830465f5ca7bd13b91939ed
1379+
React-RuntimeCore: 38f46aedbab24c4887cf763b8d0c676a059f95e6
13611380
React-runtimeexecutor: 4471221991b6e518466a0422fbeb2158c07c36e1
1362-
React-runtimescheduler: 203e25504974651c4472ad00e035658d32002305
1363-
React-utils: 67c666fd04996cdb6bba26590586753d3e8ff7ed
1364-
ReactCommon: 53dbd9a55e29188ded016078708d1da8de2db19d
1365-
RNCAsyncStorage: ec53e44dc3e75b44aa2a9f37618a49c3bc080a7a
1381+
React-runtimescheduler: 1b7a5ce47ba798252278727248a3f50e991e2631
1382+
React-utils: 5eded69fc2a3be3f1823a64c6aa7b202e8e5dd94
1383+
ReactCommon: 649ff2cbfc22342f119b43af78ee85bad61e8919
1384+
RNCAsyncStorage: b6410dead2732b5c72a7fdb1ecb5651bbcf4674b
13661385
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
13671386
Yoga: 56f906bf6c11c931588191dde1229fd3e4e3d557
13681387

intercom-react-native.podspec

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ require "json"
33

44
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
55

6+
# This is required to make install_modules_dependencies available
7+
require_relative 'node_modules/react-native/scripts/react_native_pods'
8+
69
Pod::Spec.new do |s|
710
s.name = "intercom-react-native"
811
s.version = package["version"]
@@ -19,6 +22,6 @@ Pod::Spec.new do |s|
1922

2023
s.pod_target_xcconfig = { "DEFINES_MODULE" => "YES" }
2124

22-
s.dependency "React-Core"
25+
install_modules_dependencies(s)
2326
s.dependency "Intercom", '~> 18.7.3'
2427
end

ios/IntercomModule.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
#import <React/RCTBridgeModule.h>
22

3+
#ifdef RCT_NEW_ARCH_ENABLED
4+
#import "intercom_react_native.h"
5+
#endif
6+
7+
#ifdef RCT_NEW_ARCH_ENABLED
8+
@interface IntercomModule : NSObject <NativeIntercomSpec>
9+
#else
310
@interface IntercomModule : NSObject <RCTBridgeModule>
11+
#endif
12+
413
+ (void)initialize:(nonnull NSString *)apiKey withAppId:(nonnull NSString *)appId;
514
+ (void)setDeviceToken:(nonnull NSData *)deviceToken;
615
+ (BOOL)isIntercomPushNotification:(nonnull NSDictionary *)userInfo;

package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,5 +168,13 @@
168168
},
169169
"dependencies": {
170170
"node-fetch": "^2.6.1"
171+
},
172+
"codegenConfig": {
173+
"name": "intercom-react-native",
174+
"type": "modules",
175+
"jsSrcsDir": "src",
176+
"android": {
177+
"javaPackageName": "com.intercom.reactnative"
178+
}
171179
}
172180
}

src/NativeIntercom.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { TurboModuleRegistry, type TurboModule } from 'react-native';
2+
3+
export interface Spec extends TurboModule {
4+
sendTokenToIntercom(token: string): Promise<boolean>;
5+
loginUnidentifiedUser(): Promise<boolean>;
6+
loginUserWithUserAttributes(userAttributes: Object): Promise<boolean>;
7+
logout(): Promise<boolean>;
8+
updateUser(userAttributes: Object): Promise<boolean>;
9+
isUserLoggedIn(): Promise<boolean>;
10+
fetchLoggedInUserAttributes(): Promise<Object>;
11+
setUserHash(userHash: string): Promise<boolean>;
12+
logEvent(eventName: string, metaData?: Object): Promise<boolean>;
13+
presentIntercom(): Promise<boolean>;
14+
presentMessageComposer(initialMessage: string): Promise<boolean>;
15+
presentIntercomSpace(space: string): Promise<boolean>;
16+
presentContent(content: Object): Promise<boolean>;
17+
fetchHelpCenterCollections(): Promise<Array<Object>>;
18+
fetchHelpCenterCollection(collectionId: string): Promise<Object>;
19+
searchHelpCenter(searchTerm: string): Promise<Array<Object>>;
20+
hideIntercom(): Promise<boolean>;
21+
setBottomPadding(bottomPadding: number): Promise<boolean>;
22+
setLauncherVisibility(visibility: string): Promise<boolean>;
23+
setUserJwt(jwt: string): Promise<boolean>;
24+
setInAppMessageVisibility(visibility: string): Promise<boolean>;
25+
getUnreadConversationCount(): Promise<number>;
26+
setLogLevel(level: string): Promise<boolean>;
27+
setNeedsStatusBarAppearanceUpdate(): Promise<boolean>;
28+
}
29+
30+
export default TurboModuleRegistry.get<Spec>('IntercomModule');

0 commit comments

Comments
 (0)