diff --git a/App.tsx b/App.tsx index 985f3be..00c04b8 100644 --- a/App.tsx +++ b/App.tsx @@ -14,6 +14,7 @@ import PlayerProvider from './app/components/videoComponent/context/PlayerProvid import useNotificationsPermission from './app/util/useNotificationsPermission'; import useGoogleAnalyticsSetup from './app/util/useGoogleAnalyticsSetup'; import ThemeProvider from './app/theme/ThemeProvider'; +import useAppCheckSetup from './app/util/useAppCheckSetup'; const ReduxProvider: React.FC> = ({children}) => { return ( @@ -26,6 +27,7 @@ const ReduxProvider: React.FC> = ({children}) => { }; const App: React.FC = () => { + useAppCheckSetup(); useNotificationsPermission(); useAppTrackingPermission(); useGoogleAnalyticsSetup(); diff --git a/app/util/useAppCheckSetup.ts b/app/util/useAppCheckSetup.ts new file mode 100644 index 0000000..88f4f8a --- /dev/null +++ b/app/util/useAppCheckSetup.ts @@ -0,0 +1,38 @@ +import {firebase} from '@react-native-firebase/app-check'; +import {useEffect} from 'react'; + +const rnfbProvider = firebase.appCheck().newReactNativeFirebaseAppCheckProvider(); +rnfbProvider.configure({ + android: { + provider: __DEV__ ? 'debug' : 'playIntegrity', + debugToken: '62BDDD90-4D52-41F2-9F2C-6DC6F3B398C9', + }, + apple: { + provider: __DEV__ ? 'debug' : 'appAttestWithDeviceCheckFallback', + debugToken: '36DD3397-3EFC-4FB1-BD2B-8AF1151D7B85', + }, +}); + +const setup = async () => { + await firebase.appCheck().initializeAppCheck({provider: rnfbProvider, isTokenAutoRefreshEnabled: true}); +}; + +const verify = async () => { + try { + const {token} = await firebase.appCheck().getToken(true); + + if (token.length > 0) { + console.log('AppCheck verification passed'); + } + } catch (error) { + console.warn('AppCheck verification failed'); + } +}; + +const useAppCheckSetup = () => { + useEffect(() => { + setup().then(verify).catch(console.error); + }, []); +}; + +export default useAppCheckSetup; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 394c6af..b0ca796 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -946,6 +946,10 @@ PODS: - abseil/meta/type_traits - abseil/xcprivacy - abseil/xcprivacy (1.20240116.2) + - AppCheckCore (10.19.2): + - GoogleUtilities/Environment (~> 7.13) + - GoogleUtilities/UserDefaults (~> 7.13) + - PromisesObjC (~> 2.3) - boost (1.83.0) - BoringSSL-GRPC (0.0.32): - BoringSSL-GRPC/Implementation (= 0.0.32) @@ -967,6 +971,9 @@ PODS: - ReactCommon/turbomodule/core (= 0.73.8) - Firebase/Analytics (10.24.0): - Firebase/Core + - Firebase/AppCheck (10.24.0): + - Firebase/CoreOnly + - FirebaseAppCheck (~> 10.24.0) - Firebase/Core (10.24.0): - Firebase/CoreOnly - FirebaseAnalytics (~> 10.24.0) @@ -999,6 +1006,12 @@ PODS: - GoogleUtilities/Network (~> 7.11) - "GoogleUtilities/NSData+zlib (~> 7.11)" - nanopb (< 2.30911.0, >= 2.30908.0) + - FirebaseAppCheck (10.24.0): + - AppCheckCore (~> 10.18) + - FirebaseAppCheckInterop (~> 10.17) + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - PromisesObjC (~> 2.1) - FirebaseAppCheckInterop (10.29.0) - FirebaseCore (10.24.0): - FirebaseCoreInternal (~> 10.0) @@ -2330,6 +2343,10 @@ PODS: - RNFBApp (19.3.0): - Firebase/CoreOnly (= 10.24.0) - React-Core + - RNFBAppCheck (19.3.0): + - Firebase/AppCheck (= 10.24.0) + - React-Core + - RNFBApp - RNFBCrashlytics (19.3.0): - Firebase/Crashlytics (= 10.24.0) - FirebaseCoreExtension @@ -2464,6 +2481,7 @@ DEPENDENCIES: - RNFastImage (from `../node_modules/react-native-fast-image`) - "RNFBAnalytics (from `../node_modules/@react-native-firebase/analytics`)" - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" + - "RNFBAppCheck (from `../node_modules/@react-native-firebase/app-check`)" - "RNFBCrashlytics (from `../node_modules/@react-native-firebase/crashlytics`)" - "RNFBFirestore (from `../node_modules/@react-native-firebase/firestore`)" - "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)" @@ -2480,10 +2498,12 @@ DEPENDENCIES: SPEC REPOS: trunk: - abseil + - AppCheckCore - BoringSSL-GRPC - DSFRegex - Firebase - FirebaseAnalytics + - FirebaseAppCheck - FirebaseAppCheckInterop - FirebaseCore - FirebaseCoreExtension @@ -2649,6 +2669,8 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-firebase/analytics" RNFBApp: :path: "../node_modules/@react-native-firebase/app" + RNFBAppCheck: + :path: "../node_modules/@react-native-firebase/app-check" RNFBCrashlytics: :path: "../node_modules/@react-native-firebase/crashlytics" RNFBFirestore: @@ -2681,6 +2703,7 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: abseil: d121da9ef7e2ff4cab7666e76c5a3e0915ae08c3 + AppCheckCore: 9feb4300caa596a36416cde10674dc5bec1e022e boost: d3f49c53809116a5d38da093a8aa78bf551aed09 BoringSSL-GRPC: 1e2348957acdbcad360b80a264a90799984b2ba6 BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3 @@ -2690,6 +2713,7 @@ SPEC CHECKSUMS: FBReactNativeSpec: bbe8b686178e5ce03d1d8a356789f211f91f31b8 Firebase: 91fefd38712feb9186ea8996af6cbdef41473442 FirebaseAnalytics: b5efc493eb0f40ec560b04a472e3e1a15d39ca13 + FirebaseAppCheck: afb42367002c12bbb5f58c4a954ecd2f0a171182 FirebaseAppCheckInterop: 6a1757cfd4067d8e00fccd14fcc1b8fd78cfac07 FirebaseCore: 11dc8a16dfb7c5e3c3f45ba0e191a33ac4f50894 FirebaseCoreExtension: 705ca5b14bf71d2564a0ddc677df1fc86ffa600f @@ -2773,6 +2797,7 @@ SPEC CHECKSUMS: RNFastImage: 5c9c9fed9c076e521b3f509fe79e790418a544e8 RNFBAnalytics: bb0047a8843d13fc7ecc9fb834fc80e969c1851f RNFBApp: de81f7eb68c1e6107574f2b102b0dee92a9862fa + RNFBAppCheck: 0b9aa7105e2db741ebd93989662e3a0f5e8d3839 RNFBCrashlytics: 06ccc1939384332a99a9c5f86e76f90154f2caa5 RNFBFirestore: ed29ba9f6fda6341b660d78fd333d39af5641d91 RNFBMessaging: bcceb47d52080700672f4a46aa9096d9754a988f @@ -2796,6 +2821,6 @@ SPEC CHECKSUMS: TinyCSV: fd6228edbcf1c07466ac34b76dac5e052143eaba Yoga: 428500217b7b2dba1074041bd3ccf0cad3555925 -PODFILE CHECKSUM: 7e339a0caa0f5779792bcde7c7a641a4aa47323b +PODFILE CHECKSUM: f6f7c7b9fc5a13b9133fd501db82da96af32da20 COCOAPODS: 1.15.2 diff --git a/ios/lrtApp/AppDelegate.swift b/ios/lrtApp/AppDelegate.swift index 575a5cc..0390c22 100644 --- a/ios/lrtApp/AppDelegate.swift +++ b/ios/lrtApp/AppDelegate.swift @@ -2,6 +2,7 @@ import CarPlay import Firebase import GoogleCast import React +import RNFBAppCheck import React_RCTAppDelegate import UIKit @@ -23,7 +24,9 @@ class AppDelegate: RCTAppDelegate, GCKLoggerDelegate { _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { + RNFBAppCheckModule.sharedInstance() FirebaseApp.configure() + let kReceiverAppID = kGCKDefaultMediaReceiverApplicationID let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID) let options = GCKCastOptions(discoveryCriteria: criteria) diff --git a/package.json b/package.json index 75dfb4d..a990ba0 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@react-native-community/slider": "^4.5.0", "@react-native-firebase/analytics": "^19.3.0", "@react-native-firebase/app": "^19.3.0", + "@react-native-firebase/app-check": "^19.3.0", "@react-native-firebase/crashlytics": "^19.3.0", "@react-native-firebase/firestore": "^19.3.0", "@react-native-firebase/messaging": "^19.3.0",