Skip to content

Commit e579386

Browse files
authored
Merge pull request #728 from Iterable/jwt/MOB-11032-task-4-ios-bridge-retrypolicy-and-authfailure
[MOB-11032] configure JWT for iOS
2 parents 5fa3361 + db24c40 commit e579386

File tree

8 files changed

+177
-67
lines changed

8 files changed

+177
-67
lines changed

Iterable-React-Native-SDK.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
1717
s.private_header_files = "ios/**/*.h"
1818

1919
# Load Iterables iOS SDK as a dependency
20-
s.dependency "Iterable-iOS-SDK", "6.5.4.1"
20+
s.dependency "Iterable-iOS-SDK", "6.6.1"
2121

2222
# Basic Swift support
2323
s.pod_target_xcconfig = {

example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj

Lines changed: 29 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
00E356F31AD99517003FC87E /* ReactNativeSdkExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeSdkExampleTests.m */; };
1111
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
1212
779227342DFA3FB500D69EC0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779227332DFA3FB500D69EC0 /* AppDelegate.swift */; };
13-
77F63EC390061314C0718D51 /* libPods-ReactNativeSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F395BEFC7809290D1773C84F /* libPods-ReactNativeSdkExample.a */; };
1413
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
14+
81F6A9EA0E1CCC1AD730C5D9 /* libPods-ReactNativeSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 56080B9DEED42A97AD1B3D5C /* libPods-ReactNativeSdkExample.a */; };
1515
A3A40C20801B8F02005FA4C0 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1FC6B09E65A7BD9F6864C5D8 /* PrivacyInfo.xcprivacy */; };
1616
/* End PBXBuildFile section */
1717

@@ -34,14 +34,14 @@
3434
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeSdkExample/Info.plist; sourceTree = "<group>"; };
3535
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = ReactNativeSdkExample/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
3636
1FC6B09E65A7BD9F6864C5D8 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = ReactNativeSdkExample/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
37-
627A5082522E8122626A42E9 /* Pods-ReactNativeSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.debug.xcconfig"; sourceTree = "<group>"; };
37+
3A95ED4563D4389808EDEA8F /* Pods-ReactNativeSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.debug.xcconfig"; sourceTree = "<group>"; };
38+
56080B9DEED42A97AD1B3D5C /* libPods-ReactNativeSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
3839
779227312DFA3FB500D69EC0 /* ReactNativeSdkExample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactNativeSdkExample-Bridging-Header.h"; sourceTree = "<group>"; };
3940
779227322DFA3FB500D69EC0 /* ReactNativeSdkExampleTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactNativeSdkExampleTests-Bridging-Header.h"; sourceTree = "<group>"; };
4041
779227332DFA3FB500D69EC0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = ReactNativeSdkExample/AppDelegate.swift; sourceTree = "<group>"; };
4142
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeSdkExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
42-
C37A515B34C484F156F48110 /* Pods-ReactNativeSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.release.xcconfig"; sourceTree = "<group>"; };
43+
EA19B65827A1D757CC5AAC97 /* Pods-ReactNativeSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.release.xcconfig"; sourceTree = "<group>"; };
4344
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
44-
F395BEFC7809290D1773C84F /* libPods-ReactNativeSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
4545
/* End PBXFileReference section */
4646

4747
/* Begin PBXFrameworksBuildPhase section */
@@ -56,7 +56,7 @@
5656
isa = PBXFrameworksBuildPhase;
5757
buildActionMask = 2147483647;
5858
files = (
59-
77F63EC390061314C0718D51 /* libPods-ReactNativeSdkExample.a in Frameworks */,
59+
81F6A9EA0E1CCC1AD730C5D9 /* libPods-ReactNativeSdkExample.a in Frameworks */,
6060
);
6161
runOnlyForDeploymentPostprocessing = 0;
6262
};
@@ -99,7 +99,7 @@
9999
isa = PBXGroup;
100100
children = (
101101
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
102-
F395BEFC7809290D1773C84F /* libPods-ReactNativeSdkExample.a */,
102+
56080B9DEED42A97AD1B3D5C /* libPods-ReactNativeSdkExample.a */,
103103
);
104104
name = Frameworks;
105105
sourceTree = "<group>";
@@ -138,8 +138,8 @@
138138
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
139139
isa = PBXGroup;
140140
children = (
141-
627A5082522E8122626A42E9 /* Pods-ReactNativeSdkExample.debug.xcconfig */,
142-
C37A515B34C484F156F48110 /* Pods-ReactNativeSdkExample.release.xcconfig */,
141+
3A95ED4563D4389808EDEA8F /* Pods-ReactNativeSdkExample.debug.xcconfig */,
142+
EA19B65827A1D757CC5AAC97 /* Pods-ReactNativeSdkExample.release.xcconfig */,
143143
);
144144
path = Pods;
145145
sourceTree = "<group>";
@@ -169,13 +169,13 @@
169169
isa = PBXNativeTarget;
170170
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeSdkExample" */;
171171
buildPhases = (
172-
00A09C8D745F4A4962CFCB16 /* [CP] Check Pods Manifest.lock */,
172+
B07642200E1BCDE7A80934E9 /* [CP] Check Pods Manifest.lock */,
173173
13B07F871A680F5B00A75B9A /* Sources */,
174174
13B07F8C1A680F5B00A75B9A /* Frameworks */,
175175
13B07F8E1A680F5B00A75B9A /* Resources */,
176176
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
177-
70E3A2A47E764F7A78602595 /* [CP] Embed Pods Frameworks */,
178-
EDF40E5EF2B0A60C77B1B71B /* [CP] Copy Pods Resources */,
177+
756F1571292F7FB66FB0F625 /* [CP] Embed Pods Frameworks */,
178+
C5D9D662E100C568A4F9922D /* [CP] Copy Pods Resources */,
179179
);
180180
buildRules = (
181181
);
@@ -244,28 +244,6 @@
244244
/* End PBXResourcesBuildPhase section */
245245

246246
/* Begin PBXShellScriptBuildPhase section */
247-
00A09C8D745F4A4962CFCB16 /* [CP] Check Pods Manifest.lock */ = {
248-
isa = PBXShellScriptBuildPhase;
249-
buildActionMask = 2147483647;
250-
files = (
251-
);
252-
inputFileListPaths = (
253-
);
254-
inputPaths = (
255-
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
256-
"${PODS_ROOT}/Manifest.lock",
257-
);
258-
name = "[CP] Check Pods Manifest.lock";
259-
outputFileListPaths = (
260-
);
261-
outputPaths = (
262-
"$(DERIVED_FILE_DIR)/Pods-ReactNativeSdkExample-checkManifestLockResult.txt",
263-
);
264-
runOnlyForDeploymentPostprocessing = 0;
265-
shellPath = /bin/sh;
266-
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
267-
showEnvVarsInLog = 0;
268-
};
269247
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
270248
isa = PBXShellScriptBuildPhase;
271249
buildActionMask = 2147483647;
@@ -282,41 +260,46 @@
282260
shellPath = /bin/sh;
283261
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
284262
};
285-
24A6D3DBDA584D8F55796A6D /* [CP] Copy Pods Resources */ = {
263+
756F1571292F7FB66FB0F625 /* [CP] Embed Pods Frameworks */ = {
286264
isa = PBXShellScriptBuildPhase;
287265
buildActionMask = 2147483647;
288266
files = (
289267
);
290268
inputFileListPaths = (
291-
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources-${CONFIGURATION}-input-files.xcfilelist",
269+
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-input-files.xcfilelist",
292270
);
293-
name = "[CP] Copy Pods Resources";
271+
name = "[CP] Embed Pods Frameworks";
294272
outputFileListPaths = (
295-
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources-${CONFIGURATION}-output-files.xcfilelist",
273+
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-output-files.xcfilelist",
296274
);
297275
runOnlyForDeploymentPostprocessing = 0;
298276
shellPath = /bin/sh;
299-
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources.sh\"\n";
277+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks.sh\"\n";
300278
showEnvVarsInLog = 0;
301279
};
302-
89B6BEF2485B9536DDD45973 /* [CP] Embed Pods Frameworks */ = {
280+
B07642200E1BCDE7A80934E9 /* [CP] Check Pods Manifest.lock */ = {
303281
isa = PBXShellScriptBuildPhase;
304282
buildActionMask = 2147483647;
305283
files = (
306284
);
307285
inputFileListPaths = (
308-
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-input-files.xcfilelist",
309286
);
310-
name = "[CP] Embed Pods Frameworks";
287+
inputPaths = (
288+
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
289+
"${PODS_ROOT}/Manifest.lock",
290+
);
291+
name = "[CP] Check Pods Manifest.lock";
311292
outputFileListPaths = (
312-
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-output-files.xcfilelist",
293+
);
294+
outputPaths = (
295+
"$(DERIVED_FILE_DIR)/Pods-ReactNativeSdkExample-checkManifestLockResult.txt",
313296
);
314297
runOnlyForDeploymentPostprocessing = 0;
315298
shellPath = /bin/sh;
316-
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks.sh\"\n";
299+
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
317300
showEnvVarsInLog = 0;
318301
};
319-
EDF40E5EF2B0A60C77B1B71B /* [CP] Copy Pods Resources */ = {
302+
C5D9D662E100C568A4F9922D /* [CP] Copy Pods Resources */ = {
320303
isa = PBXShellScriptBuildPhase;
321304
buildActionMask = 2147483647;
322305
files = (
@@ -423,7 +406,7 @@
423406
};
424407
13B07F941A680F5B00A75B9A /* Debug */ = {
425408
isa = XCBuildConfiguration;
426-
baseConfigurationReference = 627A5082522E8122626A42E9 /* Pods-ReactNativeSdkExample.debug.xcconfig */;
409+
baseConfigurationReference = 3A95ED4563D4389808EDEA8F /* Pods-ReactNativeSdkExample.debug.xcconfig */;
427410
buildSettings = {
428411
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
429412
CLANG_ENABLE_MODULES = YES;
@@ -453,7 +436,7 @@
453436
};
454437
13B07F951A680F5B00A75B9A /* Release */ = {
455438
isa = XCBuildConfiguration;
456-
baseConfigurationReference = C37A515B34C484F156F48110 /* Pods-ReactNativeSdkExample.release.xcconfig */;
439+
baseConfigurationReference = EA19B65827A1D757CC5AAC97 /* Pods-ReactNativeSdkExample.release.xcconfig */;
457440
buildSettings = {
458441
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
459442
CLANG_ENABLE_MODULES = YES;

example/ios/ReactNativeSdkExample/AppDelegate.swift

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
// Created by Loren Posen on 6/11/25.
66
//
77

8+
import UIKit
89
import React
9-
import ReactAppDependencyProvider
1010
import React_RCTAppDelegate
11-
import UIKit
11+
import ReactAppDependencyProvider
12+
import UserNotifications
13+
14+
import IterableSDK
1215

1316
@main
1417
class AppDelegate: UIResponder, UIApplicationDelegate {
@@ -21,6 +24,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
2124
_ application: UIApplication,
2225
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
2326
) -> Bool {
27+
ITBInfo()
28+
2429
let delegate = ReactNativeDelegate()
2530
let factory = RCTReactNativeFactory(delegate: delegate)
2631
delegate.dependencyProvider = RCTAppDependencyProvider()
@@ -36,8 +41,65 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
3641
launchOptions: launchOptions
3742
)
3843

44+
setupUserNotificationCenter()
45+
3946
return true
4047
}
48+
49+
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
50+
ITBInfo()
51+
IterableAPI.register(token: deviceToken)
52+
}
53+
54+
func application(_ application: UIApplication,
55+
didFailToRegisterForRemoteNotificationsWithError
56+
error: Error) {
57+
ITBInfo("error: \(error)")
58+
}
59+
60+
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
61+
ITBInfo()
62+
IterableAppIntegration.application(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler)
63+
}
64+
65+
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
66+
ITBInfo()
67+
guard let url = userActivity.webpageURL else {
68+
return false
69+
}
70+
71+
return IterableAPI.handle(universalLink: url)
72+
}
73+
74+
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
75+
ITBInfo()
76+
return RCTLinkingManager.application(app, open: url, options: options)
77+
}
78+
79+
private func setupUserNotificationCenter() {
80+
UNUserNotificationCenter.current().delegate = self
81+
UNUserNotificationCenter.current().getNotificationSettings { settings in
82+
if settings.authorizationStatus != .authorized {
83+
ITBInfo("Not authorized")
84+
// not authorized, ask for permission
85+
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, _ in
86+
ITBInfo("auth: \(success)")
87+
if success {
88+
DispatchQueue.main.async {
89+
UIApplication.shared.registerForRemoteNotifications()
90+
}
91+
}
92+
// TODO: Handle error etc.
93+
}
94+
} else {
95+
// already authorized
96+
ITBInfo("Already authorized")
97+
DispatchQueue.main.async {
98+
UIApplication.shared.registerForRemoteNotifications()
99+
}
100+
}
101+
}
102+
}
41103
}
42104

43105
class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
@@ -46,10 +108,22 @@ class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
46108
}
47109

48110
override func bundleURL() -> URL? {
49-
#if DEBUG
50-
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
51-
#else
52-
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
53-
#endif
111+
#if DEBUG
112+
RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
113+
#else
114+
Bundle.main.url(forResource: "main", withExtension: "jsbundle")
115+
#endif
116+
}
117+
}
118+
119+
extension AppDelegate: UNUserNotificationCenterDelegate {
120+
// App is running in the foreground
121+
public func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
122+
completionHandler([.alert, .badge, .sound])
123+
}
124+
125+
// The method will be called on the delegate when the user responded to the notification by opening the application, dismissing the notification or choosing a UNNotificationAction. The delegate must be set before the application returns from applicationDidFinishLaunching:.
126+
public func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
127+
IterableAppIntegration.userNotificationCenter(center, didReceive: response, withCompletionHandler: completionHandler)
54128
}
55129
}

example/src/hooks/useIterableApp.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
IterableInAppShowResponse,
1616
IterableLogLevel,
1717
IterableRetryBackoff,
18+
IterableAuthFailureReason,
1819
} from '@iterable/react-native-sdk';
1920

2021
import { Route } from '../constants/routes';
@@ -134,9 +135,15 @@ export const IterableAppProvider: FunctionComponent<
134135
};
135136

136137
config.onJWTError = (authFailure) => {
137-
console.error('Error fetching JWT:', authFailure);
138+
console.log('onJWTError', authFailure);
139+
140+
const failureReason =
141+
typeof authFailure.failureReason === 'string'
142+
? authFailure.failureReason
143+
: IterableAuthFailureReason[authFailure.failureReason];
144+
138145
Alert.alert(
139-
`Error fetching JWT: ${authFailure.failureReason}`,
146+
`Error fetching JWT: ${failureReason}`,
140147
`Token: ${authFailure.failedAuthToken}`
141148
);
142149
};

ios/RNIterableAPI/RNIterableAPI.mm

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,10 @@ - (void)passAlongAuthToken:(NSString *_Nullable)authToken {
273273
[_swiftAPI passAlongAuthToken:authToken];
274274
}
275275

276+
- (void)pauseAuthRetries:(BOOL)pauseRetry {
277+
[_swiftAPI pauseAuthRetries:pauseRetry];
278+
}
279+
276280
- (void)wakeApp {
277281
// Placeholder function -- this method is only used in Android
278282
}
@@ -499,6 +503,10 @@ - (void)wakeApp {
499503
[_swiftAPI passAlongAuthToken:authToken];
500504
}
501505

506+
RCT_EXPORT_METHOD(pauseAuthRetries : (BOOL)pauseRetry) {
507+
[_swiftAPI pauseAuthRetries:pauseRetry];
508+
}
509+
502510
RCT_EXPORT_METHOD(wakeApp) {
503511
// Placeholder function -- this method is only used in Android
504512
}

0 commit comments

Comments
 (0)