From 5938af2e2a8b5a98ec292aac3701878eb0344db9 Mon Sep 17 00:00:00 2001 From: Thuc Nguyen Duy Date: Sat, 30 Sep 2023 14:52:07 +0700 Subject: [PATCH] [issue-1048] Integrate Onesignal for push notification --- android/app/build.gradle | 30 ++- android/app/google-services.json | 29 +++ android/build.gradle | 1 + .../Info.plist | 13 ++ .../NotificationService.h | 12 + .../NotificationService.m | 40 ++++ ...lNotificationServiceExtension.entitlements | 10 + ios/Podfile | 3 + ios/Podfile.lock | 91 +++++--- ios/SubWalletMobile.xcodeproj/project.pbxproj | 209 ++++++++++++++++++ ios/SubWalletMobile/Info.plist | 12 +- .../SubWalletMobile.entitlements | 6 + package.json | 18 +- src/AppNew.tsx | 11 +- src/screens/Settings/Languages.tsx | 2 + src/utils/pushNotification.ts | 10 + yarn.lock | 126 +++++------ 17 files changed, 490 insertions(+), 133 deletions(-) create mode 100644 android/app/google-services.json create mode 100644 ios/OneSignalNotificationServiceExtension/Info.plist create mode 100644 ios/OneSignalNotificationServiceExtension/NotificationService.h create mode 100644 ios/OneSignalNotificationServiceExtension/NotificationService.m create mode 100644 ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements create mode 100644 src/utils/pushNotification.ts diff --git a/android/app/build.gradle b/android/app/build.gradle index 042200848..7955c597b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: "com.android.application" apply plugin: "com.facebook.react" +apply plugin: "com.google.gms.google-services" apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" /** @@ -115,21 +116,28 @@ android { } dependencies { -// If your app supports Android versions before Ice Cream Sandwich (API level 14) - implementation 'com.facebook.fresco:animated-base-support:1.3.0' + // If your app supports Android versions before Ice Cream Sandwich (API level 14) + implementation 'com.facebook.fresco:animated-base-support:1.3.0' - // For animated GIF support - implementation 'com.facebook.fresco:animated-gif:2.5.0' + // For animated GIF support + implementation 'com.facebook.fresco:animated-gif:2.5.0' - // For WebP support, including animated WebP - implementation 'com.facebook.fresco:animated-webp:2.5.0' - implementation 'com.facebook.fresco:webpsupport:2.5.0' + // For WebP support, including animated WebP + implementation 'com.facebook.fresco:animated-webp:2.5.0' + implementation 'com.facebook.fresco:webpsupport:2.5.0' - // Support new Splash Screen API - implementation "androidx.core:core-splashscreen:1.0.0" + // Support new Splash Screen API + implementation "androidx.core:core-splashscreen:1.0.0" - // Fix duplicate Kotlin JDK 7 & JDK 8 - implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0') + // Add OneSignal push notification + implementation 'com.onesignal:OneSignal:[5.0.0, 5.99.99]' + + // Add Firebase config + implementation platform('com.google.firebase:firebase-bom:32.3.1') + + + // Fix duplicate Kotlin JDK 7 & JDK 8 + implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0') // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 000000000..43f1cd99f --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "569870677705", + "project_id": "subwallet-app", + "storage_bucket": "subwallet-app.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:569870677705:android:cbc031f789e9677e38ff18", + "android_client_info": { + "package_name": "app.subwallet.mobile" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBePKienltD3ss-ifbPEuoHOQA-OSigkVY" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 3356faf6d..6374bdff5 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -19,5 +19,6 @@ buildscript { dependencies { classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") + classpath 'com.google.gms:google-services:4.3.15' } } diff --git a/ios/OneSignalNotificationServiceExtension/Info.plist b/ios/OneSignalNotificationServiceExtension/Info.plist new file mode 100644 index 000000000..7d7e9e5d9 --- /dev/null +++ b/ios/OneSignalNotificationServiceExtension/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + NotificationService + + + diff --git a/ios/OneSignalNotificationServiceExtension/NotificationService.h b/ios/OneSignalNotificationServiceExtension/NotificationService.h new file mode 100644 index 000000000..c11ebb8f4 --- /dev/null +++ b/ios/OneSignalNotificationServiceExtension/NotificationService.h @@ -0,0 +1,12 @@ +// +// NotificationService.h +// OneSignalNotificationServiceExtension +// +// Created by Thức Nguyễn Duy on 29/09/2023. +// + +#import + +@interface NotificationService : UNNotificationServiceExtension + +@end diff --git a/ios/OneSignalNotificationServiceExtension/NotificationService.m b/ios/OneSignalNotificationServiceExtension/NotificationService.m new file mode 100644 index 000000000..e24d645c4 --- /dev/null +++ b/ios/OneSignalNotificationServiceExtension/NotificationService.m @@ -0,0 +1,40 @@ +#import + +#import "NotificationService.h" + +@interface NotificationService () + +@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver); +@property (nonatomic, strong) UNNotificationRequest *receivedRequest; +@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent; + +@end + +@implementation NotificationService + +- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { + self.receivedRequest = request; + self.contentHandler = contentHandler; + self.bestAttemptContent = [request.content mutableCopy]; + + /* DEBUGGING: Uncomment the 2 lines below and comment out the one above to ensure this extension is executing + Note, this extension only runs when mutable-content is set + Setting an attachment or action buttons automatically adds this */ + // NSLog(@"Running NotificationServiceExtension"); + // self.bestAttemptContent.body = [@"[Modified] " stringByAppendingString:self.bestAttemptContent.body]; + + [OneSignalExtension didReceiveNotificationExtensionRequest:self.receivedRequest + withMutableNotificationContent:self.bestAttemptContent + withContentHandler:self.contentHandler]; +} + +- (void)serviceExtensionTimeWillExpire { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + + [OneSignalExtension serviceExtensionTimeWillExpireRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent]; + + self.contentHandler(self.bestAttemptContent); +} + +@end diff --git a/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements b/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements new file mode 100644 index 000000000..effa1fe77 --- /dev/null +++ b/ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.app.subwallet.mobile.onesignal + + + diff --git a/ios/Podfile b/ios/Podfile index 26e0d2894..84572f84e 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -92,3 +92,6 @@ target 'SubWalletMobile' do end end +target 'OneSignalNotificationServiceExtension' do + pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0' +end \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 6f63bcb6b..cb270a9d6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -7,7 +7,7 @@ PODS: - dr-pogodin-react-native-fs (2.21.0-alpha.3): - RCT-Folly (= 2021.07.22.00) - React-Core - - dr-pogodin-react-native-static-server (0.8.3): + - dr-pogodin-react-native-static-server (0.8.4): - RCT-Folly (= 2021.07.22.00) - React-Core - FBLazyVector (0.72.5) @@ -97,6 +97,47 @@ PODS: - MMKV (1.3.1): - MMKVCore (~> 1.3.1) - MMKVCore (1.3.1) + - OneSignalXCFramework (5.0.2): + - OneSignalXCFramework/OneSignalComplete (= 5.0.2) + - OneSignalXCFramework/OneSignal (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalExtension + - OneSignalXCFramework/OneSignalNotifications + - OneSignalXCFramework/OneSignalOSCore + - OneSignalXCFramework/OneSignalOutcomes + - OneSignalXCFramework/OneSignalUser + - OneSignalXCFramework/OneSignalComplete (5.0.2): + - OneSignalXCFramework/OneSignal + - OneSignalXCFramework/OneSignalInAppMessages + - OneSignalXCFramework/OneSignalLocation + - OneSignalXCFramework/OneSignalCore (5.0.2) + - OneSignalXCFramework/OneSignalExtension (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalOutcomes + - OneSignalXCFramework/OneSignalInAppMessages (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalNotifications + - OneSignalXCFramework/OneSignalOSCore + - OneSignalXCFramework/OneSignalOutcomes + - OneSignalXCFramework/OneSignalUser + - OneSignalXCFramework/OneSignalLocation (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalNotifications + - OneSignalXCFramework/OneSignalOSCore + - OneSignalXCFramework/OneSignalUser + - OneSignalXCFramework/OneSignalNotifications (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalExtension + - OneSignalXCFramework/OneSignalOutcomes + - OneSignalXCFramework/OneSignalOSCore (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalOutcomes (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalUser (5.0.2): + - OneSignalXCFramework/OneSignalCore + - OneSignalXCFramework/OneSignalNotifications + - OneSignalXCFramework/OneSignalOSCore + - OneSignalXCFramework/OneSignalOutcomes - OpenSSL-Universal (1.1.1100) - RCT-Folly (2021.07.22.00): - boost @@ -406,7 +447,7 @@ PODS: - React-Core - react-native-camera/RN (4.2.1): - React-Core - - react-native-cameraroll (5.9.0): + - react-native-cameraroll (5.10.0): - React-Core - react-native-config (1.5.1): - react-native-config/App (= 1.5.1) @@ -421,16 +462,15 @@ PODS: - React-Core - react-native-netinfo (9.4.1): - React-Core + - react-native-onesignal (5.0.1): + - OneSignalXCFramework (= 5.0.2) + - React (< 1.0.0, >= 0.13.0) - react-native-pager-view (6.2.1): - React-Core - react-native-safe-area-context (4.7.2): - React-Core - - react-native-segmented-control (2.2.2): - - React-Core - react-native-sensitive-info (6.0.0-alpha.9): - React-Core - - react-native-slider (4.4.3): - - React-Core - react-native-splash-screen (3.3.0): - React-Core - react-native-version-number (0.3.6): @@ -564,8 +604,6 @@ PODS: - React-Core - RNCMaskedView (0.2.9): - React-Core - - RNCPicker (2.5.1): - - React-Core - RNDeviceInfo (10.11.0): - React-Core - RNFastImage (8.6.3): @@ -576,7 +614,7 @@ PODS: - React-Core - RNInAppBrowser (3.7.0): - React-Core - - RNKeychain (8.1.2): + - RNLocalize (3.0.2): - React-Core - RNPermissions (3.9.2): - React-Core @@ -664,6 +702,7 @@ DEPENDENCIES: - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - libevent (~> 2.1.12) + - OneSignalXCFramework (< 6.0, >= 5.0.0) - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) @@ -689,11 +728,10 @@ DEPENDENCIES: - react-native-image-picker (from `../node_modules/react-native-image-picker`) - react-native-mmkv (from `../node_modules/react-native-mmkv`) - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" + - react-native-onesignal (from `../node_modules/react-native-onesignal`) - react-native-pager-view (from `../node_modules/react-native-pager-view`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - "react-native-segmented-control (from `../node_modules/@react-native-community/segmented-control`)" - react-native-sensitive-info (from `../node_modules/react-native-sensitive-info`) - - "react-native-slider (from `../node_modules/@react-native-community/slider`)" - react-native-splash-screen (from `../node_modules/react-native-splash-screen`) - react-native-version-number (from `../node_modules/react-native-version-number`) - react-native-video (from `../node_modules/react-native-video`) @@ -721,12 +759,11 @@ DEPENDENCIES: - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)" - - "RNCPicker (from `../node_modules/@react-native-picker/picker`)" - RNDeviceInfo (from `../node_modules/react-native-device-info`) - RNFastImage (from `../node_modules/react-native-fast-image`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNInAppBrowser (from `../node_modules/react-native-inappbrowser-reborn`) - - RNKeychain (from `../node_modules/react-native-keychain`) + - RNLocalize (from `../node_modules/react-native-localize`) - RNPermissions (from `../node_modules/react-native-permissions`) - RNQrGenerator (from `../node_modules/rn-qr-generator`) - RNReanimated (from `../node_modules/react-native-reanimated`) @@ -751,6 +788,7 @@ SPEC REPOS: - libwebp - MMKV - MMKVCore + - OneSignalXCFramework - OpenSSL-Universal - SDWebImage - SDWebImageWebPCoder @@ -822,16 +860,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-mmkv" react-native-netinfo: :path: "../node_modules/@react-native-community/netinfo" + react-native-onesignal: + :path: "../node_modules/react-native-onesignal" react-native-pager-view: :path: "../node_modules/react-native-pager-view" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" - react-native-segmented-control: - :path: "../node_modules/@react-native-community/segmented-control" react-native-sensitive-info: :path: "../node_modules/react-native-sensitive-info" - react-native-slider: - :path: "../node_modules/@react-native-community/slider" react-native-splash-screen: :path: "../node_modules/react-native-splash-screen" react-native-version-number: @@ -886,8 +922,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-clipboard/clipboard" RNCMaskedView: :path: "../node_modules/@react-native-masked-view/masked-view" - RNCPicker: - :path: "../node_modules/@react-native-picker/picker" RNDeviceInfo: :path: "../node_modules/react-native-device-info" RNFastImage: @@ -896,8 +930,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-gesture-handler" RNInAppBrowser: :path: "../node_modules/react-native-inappbrowser-reborn" - RNKeychain: - :path: "../node_modules/react-native-keychain" + RNLocalize: + :path: "../node_modules/react-native-localize" RNPermissions: :path: "../node_modules/react-native-permissions" RNQrGenerator: @@ -919,7 +953,7 @@ SPEC CHECKSUMS: CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 dr-pogodin-react-native-fs: 6dd213e0cefdbd2ac1f2ad3f69f33260e8be627a - dr-pogodin-react-native-static-server: 7a6d1bdf696cb383bfbb35509730bf546ca5370c + dr-pogodin-react-native-static-server: ffb1cc99a59c4af4aa850c8359df6f13a654e971 FBLazyVector: 71803c074f6325f10b5ec891c443b6bbabef0ca7 FBReactNativeSpec: 448e08a759d29a96e15725ae532445bf4343567c Flipper: 6edb735e6c3e332975d1b17956bcc584eccf5818 @@ -937,6 +971,7 @@ SPEC CHECKSUMS: libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009 MMKV: 5a07930c70c70b86cd87761a42c8f3836fb681d7 MMKVCore: e50135dbd33235b6ab390635991bab437ab873c0 + OneSignalXCFramework: d47a350b15e106a5dc310e3f97867e28dad6589e OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 RCTRequired: df81ab637d35fac9e6eb94611cfd20f0feb05455 @@ -954,17 +989,16 @@ SPEC CHECKSUMS: React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4 react-native-camera: 3eae183c1d111103963f3dd913b65d01aef8110f - react-native-cameraroll: fad943a324a4d893c249cabe6d0608c807e0e58f + react-native-cameraroll: 4701ae7c3dbcd3f5e9e150ca17f250a276154b35 react-native-config: 86038147314e2e6d10ea9972022aa171e6b1d4d8 react-native-document-picker: 69ca2094d8780cfc1e7e613894d15290fdc54bba react-native-image-picker: 3269f75c251cdcd61ab51b911dd30d6fff8c6169 react-native-mmkv: 9ae7ca3977e8ef48dbf7f066974eb844c20b5fd7 react-native-netinfo: fefd4e98d75cbdd6e85fc530f7111a8afdf2b0c5 + react-native-onesignal: 2f88c5f8d353ab553f699e760c7995a511aec5f4 react-native-pager-view: d211379f61895b6349bd7e571b44a26d005c2975 react-native-safe-area-context: 7aa8e6d9d0f3100a820efb1a98af68aa747f9284 - react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097 react-native-sensitive-info: d44e909d065f9c0e15734245e5dd6a24b82e3dcd - react-native-slider: 1cdd6ba29675df21f30544253bf7351d3c2d68c4 react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457 react-native-version-number: b415bbec6a13f2df62bf978e85bc0d699462f37f react-native-video: c26780b224543c62d5e1b2a7244a5cd1b50e8253 @@ -992,12 +1026,11 @@ SPEC CHECKSUMS: RNCAsyncStorage: c913ede1fa163a71cea118ed4670bbaaa4b511bb RNCClipboard: d77213bfa269013bf4b857b7a9ca37ee062d8ef1 RNCMaskedView: 949696f25ec596bfc697fc88e6f95cf0c79669b6 - RNCPicker: 529d564911e93598cc399b56cc0769ce3675f8c8 RNDeviceInfo: bf8a32acbcb875f568217285d1793b0e8588c974 RNFastImage: 5c9c9fed9c076e521b3f509fe79e790418a544e8 RNGestureHandler: 38aa38413896620338948fbb5c90579a7b1c3fde RNInAppBrowser: e36d6935517101ccba0e875bac8ad7b0cb655364 - RNKeychain: a65256b6ca6ba6976132cc4124b238a5b13b3d9c + RNLocalize: dbea38dcb344bf80ff18a1757b1becf11f70cae4 RNPermissions: ce332587a7465d6c883c65c619da9caee0c76606 RNQrGenerator: 90461ba3ca88c1d38ef73da50fade35d9648215d RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87 @@ -1011,6 +1044,6 @@ SPEC CHECKSUMS: YogaKit: f782866e155069a2cca2517aafea43200b01fd5a ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: d2e75413a9d4d28b9ab6ee8ae7baea6ba4324a25 +PODFILE CHECKSUM: e0282247de8b37556c70b3e8fcf742b4034ede72 -COCOAPODS: 1.12.1 +COCOAPODS: 1.13.0 diff --git a/ios/SubWalletMobile.xcodeproj/project.pbxproj b/ios/SubWalletMobile.xcodeproj/project.pbxproj index 6c85a34e2..c855e7aa7 100644 --- a/ios/SubWalletMobile.xcodeproj/project.pbxproj +++ b/ios/SubWalletMobile.xcodeproj/project.pbxproj @@ -15,6 +15,9 @@ 3577831F29CEA0080036830D /* fonts in Resources */ = {isa = PBXBuildFile; fileRef = 3577831E29CEA0080036830D /* fonts */; }; 7699B88040F8A987B510C191 /* libPods-SubWalletMobile-SubWalletMobileTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-SubWalletMobile-SubWalletMobileTests.a */; }; 81AB9BB82411601600AC10FF /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* SplashScreen.storyboard */; }; + 99247C542AC6DE7100EF9E22 /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 99247C532AC6DE7100EF9E22 /* NotificationService.m */; }; + 99247C582AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 99247C502AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + B1F990D19A9034C0A7FB0358 /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72BEE558F65D0CD1394F16DD /* libPods-OneSignalNotificationServiceExtension.a */; }; F1554EF9286D4F5B00301F08 /* Images-2.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F1554EF8286D4F5B00301F08 /* Images-2.xcassets */; }; F1554EFC286D590F00301F08 /* Images-2.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F1554EF8286D4F5B00301F08 /* Images-2.xcassets */; }; F16BB9D9288A5C7B00F9E935 /* Web.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F16BB9D8288A5C7B00F9E935 /* Web.bundle */; }; @@ -29,8 +32,29 @@ remoteGlobalIDString = 13B07F861A680F5B00A75B9A; remoteInfo = SubWalletMobile; }; + 99247C562AC6DE7100EF9E22 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 99247C4F2AC6DE7100EF9E22; + remoteInfo = OneSignalNotificationServiceExtension; + }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 99247C592AC6DE7100EF9E22 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 99247C582AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 00E356EE1AD99517003FC87E /* SubWalletMobileTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SubWalletMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -45,12 +69,20 @@ 355FCA162A72335100B34579 /* RCTMinimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RCTMinimizer.h; path = SubWalletMobile/NativeModules/RCTMinimizer/RCTMinimizer.h; sourceTree = ""; }; 3577831E29CEA0080036830D /* fonts */ = {isa = PBXFileReference; lastKnownFileType = folder; path = fonts; sourceTree = ""; }; 3B4392A12AC88292D35C810B /* Pods-SubWalletMobile.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SubWalletMobile.debug.xcconfig"; path = "Target Support Files/Pods-SubWalletMobile/Pods-SubWalletMobile.debug.xcconfig"; sourceTree = ""; }; + 3D1D4BC80276037D435FADE4 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.release.xcconfig"; sourceTree = ""; }; 5709B34CF0A7D63546082F79 /* Pods-SubWalletMobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SubWalletMobile.release.xcconfig"; path = "Target Support Files/Pods-SubWalletMobile/Pods-SubWalletMobile.release.xcconfig"; sourceTree = ""; }; 5B7EB9410499542E8C5724F5 /* Pods-SubWalletMobile-SubWalletMobileTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SubWalletMobile-SubWalletMobileTests.debug.xcconfig"; path = "Target Support Files/Pods-SubWalletMobile-SubWalletMobileTests/Pods-SubWalletMobile-SubWalletMobileTests.debug.xcconfig"; sourceTree = ""; }; 5DCACB8F33CDC322A6C60F78 /* libPods-SubWalletMobile.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SubWalletMobile.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 72BEE558F65D0CD1394F16DD /* libPods-OneSignalNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OneSignalNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = SubWalletMobile/SplashScreen.storyboard; sourceTree = ""; }; 89C6BE57DB24E9ADA2F236DE /* Pods-SubWalletMobile-SubWalletMobileTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SubWalletMobile-SubWalletMobileTests.release.xcconfig"; path = "Target Support Files/Pods-SubWalletMobile-SubWalletMobileTests/Pods-SubWalletMobile-SubWalletMobileTests.release.xcconfig"; sourceTree = ""; }; + 9180F8026E3F3132EC661654 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; sourceTree = ""; }; 990CC4AB2A33104500AB6D8B /* SubWalletMobile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = SubWalletMobile.entitlements; path = SubWalletMobile/SubWalletMobile.entitlements; sourceTree = ""; }; + 99247C502AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = OneSignalNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 99247C522AC6DE7100EF9E22 /* NotificationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationService.h; sourceTree = ""; }; + 99247C532AC6DE7100EF9E22 /* NotificationService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationService.m; sourceTree = ""; }; + 99247C552AC6DE7100EF9E22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 99247C5D2AC6E0AF00EF9E22 /* OneSignalNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OneSignalNotificationServiceExtension.entitlements; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; F1554EF8286D4F5B00301F08 /* Images-2.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = "Images-2.xcassets"; path = "SubWalletMobile/Images-2.xcassets"; sourceTree = ""; }; F16BB9D8288A5C7B00F9E935 /* Web.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = Web.bundle; path = ../html/Web.bundle; sourceTree = ""; }; @@ -74,6 +106,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 99247C4D2AC6DE7100EF9E22 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B1F990D19A9034C0A7FB0358 /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -115,6 +155,7 @@ ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 5DCACB8F33CDC322A6C60F78 /* libPods-SubWalletMobile.a */, 19F6CBCC0A4E27FBF8BF4A61 /* libPods-SubWalletMobile-SubWalletMobileTests.a */, + 72BEE558F65D0CD1394F16DD /* libPods-OneSignalNotificationServiceExtension.a */, ); name = Frameworks; sourceTree = ""; @@ -152,6 +193,7 @@ 13B07FAE1A68108700A75B9A /* SubWalletMobile */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 00E356EF1AD99517003FC87E /* SubWalletMobileTests */, + 99247C512AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, BBD78D7AC51CEA395F1C20DB /* Pods */, @@ -167,10 +209,22 @@ children = ( 13B07F961A680F5B00A75B9A /* SubWalletMobile.app */, 00E356EE1AD99517003FC87E /* SubWalletMobileTests.xctest */, + 99247C502AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension.appex */, ); name = Products; sourceTree = ""; }; + 99247C512AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension */ = { + isa = PBXGroup; + children = ( + 99247C5D2AC6E0AF00EF9E22 /* OneSignalNotificationServiceExtension.entitlements */, + 99247C522AC6DE7100EF9E22 /* NotificationService.h */, + 99247C532AC6DE7100EF9E22 /* NotificationService.m */, + 99247C552AC6DE7100EF9E22 /* Info.plist */, + ); + path = OneSignalNotificationServiceExtension; + sourceTree = ""; + }; BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( @@ -178,6 +232,8 @@ 5709B34CF0A7D63546082F79 /* Pods-SubWalletMobile.release.xcconfig */, 5B7EB9410499542E8C5724F5 /* Pods-SubWalletMobile-SubWalletMobileTests.debug.xcconfig */, 89C6BE57DB24E9ADA2F236DE /* Pods-SubWalletMobile-SubWalletMobileTests.release.xcconfig */, + 9180F8026E3F3132EC661654 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */, + 3D1D4BC80276037D435FADE4 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -225,16 +281,36 @@ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, + 99247C592AC6DE7100EF9E22 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 99247C572AC6DE7100EF9E22 /* PBXTargetDependency */, ); name = SubWalletMobile; productName = SubWalletMobile; productReference = 13B07F961A680F5B00A75B9A /* SubWalletMobile.app */; productType = "com.apple.product-type.application"; }; + 99247C4F2AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 99247C5C2AC6DE7100EF9E22 /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */; + buildPhases = ( + CEA11466352C54E1B9BFFB21 /* [CP] Check Pods Manifest.lock */, + 99247C4C2AC6DE7100EF9E22 /* Sources */, + 99247C4D2AC6DE7100EF9E22 /* Frameworks */, + 99247C4E2AC6DE7100EF9E22 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OneSignalNotificationServiceExtension; + productName = OneSignalNotificationServiceExtension; + productReference = 99247C502AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -250,6 +326,9 @@ 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1120; }; + 99247C4F2AC6DE7100EF9E22 = { + CreatedOnToolsVersion = 14.3.1; + }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "SubWalletMobile" */; @@ -267,6 +346,7 @@ targets = ( 13B07F861A680F5B00A75B9A /* SubWalletMobile */, 00E356ED1AD99517003FC87E /* SubWalletMobileTests */, + 99247C4F2AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension */, ); }; /* End PBXProject section */ @@ -292,6 +372,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 99247C4E2AC6DE7100EF9E22 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -389,6 +476,28 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SubWalletMobile-SubWalletMobileTests/Pods-SubWalletMobile-SubWalletMobileTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + CEA11466352C54E1B9BFFB21 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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"; + showEnvVarsInLog = 0; + }; E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -463,6 +572,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 99247C4C2AC6DE7100EF9E22 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 99247C542AC6DE7100EF9E22 /* NotificationService.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -471,6 +588,11 @@ target = 13B07F861A680F5B00A75B9A /* SubWalletMobile */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; + 99247C572AC6DE7100EF9E22 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 99247C4F2AC6DE7100EF9E22 /* OneSignalNotificationServiceExtension */; + targetProxy = 99247C562AC6DE7100EF9E22 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -744,6 +866,84 @@ }; name = Release; }; + 99247C5A2AC6DE7100EF9E22 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9180F8026E3F3132EC661654 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = ZUZ7T3GQMT; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = app.subwallet.mobile.OneSignalNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 99247C5B2AC6DE7100EF9E22 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3D1D4BC80276037D435FADE4 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_ENTITLEMENTS = OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = ZUZ7T3GQMT; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = OneSignalNotificationServiceExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = OneSignalNotificationServiceExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = app.subwallet.mobile.OneSignalNotificationServiceExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -774,6 +974,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 99247C5C2AC6DE7100EF9E22 /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 99247C5A2AC6DE7100EF9E22 /* Debug */, + 99247C5B2AC6DE7100EF9E22 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; diff --git a/ios/SubWalletMobile/Info.plist b/ios/SubWalletMobile/Info.plist index e52712207..d6351d9b5 100644 --- a/ios/SubWalletMobile/Info.plist +++ b/ios/SubWalletMobile/Info.plist @@ -70,18 +70,18 @@ + NSAppleMusicUsageDescription + Access Apple Music from library NSCameraUsageDescription Camera is used to capture QR code - NSMicrophoneUsageDescription - Microphone is used to record audio NSFaceIDUsageDescription Enabling Face ID allows you quick and secure access to your account. NSLocationWhenInUseUsageDescription Access location from library + NSMicrophoneUsageDescription + Microphone is used to record audio NSPhotoLibraryUsageDescription Access photos from library - NSAppleMusicUsageDescription - Access Apple Music from library UIAppFonts fonts/PlusJakartaSans-Light.ttf @@ -94,6 +94,10 @@ fonts/FontAwesome5_Regular.ttf fonts/FontAwesome5_Solid.ttf + UIBackgroundModes + + remote-notification + UIFileSharingEnabled UILaunchStoryboardName diff --git a/ios/SubWalletMobile/SubWalletMobile.entitlements b/ios/SubWalletMobile/SubWalletMobile.entitlements index 8de6a49d2..d2c985b4c 100644 --- a/ios/SubWalletMobile/SubWalletMobile.entitlements +++ b/ios/SubWalletMobile/SubWalletMobile.entitlements @@ -2,9 +2,15 @@ + aps-environment + development com.apple.developer.associated-domains applinks:mobile.subwallet.app + com.apple.security.application-groups + + group.app.subwallet.mobile.onesignal + diff --git a/package.json b/package.json index 93a08fab3..d7dc12dc7 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ }, "dependencies": { "@coinbase/cbpay-js": "^1.7.0", - "@dr.pogodin/react-native-fs": ">=2.21.0-alpha.1", - "@dr.pogodin/react-native-static-server": "0.8.3", + "@dr.pogodin/react-native-fs": ">=2.21.0-alpha.3", + "@dr.pogodin/react-native-static-server": "0.8.4", "@fortawesome/fontawesome-svg-core": "^6.2.1", "@fortawesome/free-brands-svg-icons": "^6.2.1", "@fortawesome/free-regular-svg-icons": "^6.2.1", @@ -45,10 +45,7 @@ "@react-native-camera-roll/camera-roll": "^5.2.4", "@react-native-clipboard/clipboard": "^1.11.1", "@react-native-community/netinfo": "^9.3.7", - "@react-native-community/segmented-control": "^2.2.2", - "@react-native-community/slider": "^4.4.2", "@react-native-masked-view/masked-view": "^0.2.9", - "@react-native-picker/picker": "^2.4.8", "@react-navigation/bottom-tabs": "^6.5.3", "@react-navigation/drawer": "^6.6.2", "@react-navigation/material-top-tabs": "^6.6.3", @@ -60,7 +57,6 @@ "@subwallet/keyring": "^0.1.1", "@subwallet/react-ui": "^5.1.2-b72", "@subwallet/ui-keyring": "^0.1.1", - "boring-avatars": "^1.7.0", "deprecated-react-native-prop-types": "^4.0.0", "eslint-plugin-ft-flow": "^2.0.3", "eventemitter3": "^5.0.0", @@ -77,12 +73,10 @@ "react-hook-form": "^7.44.3", "react-i18next": "^12.1.4", "react-native": "^0.72.4", - "react-native-animatable": "^1.3.3", "react-native-bcrypt": "^2.4.0", "react-native-boring-avatars": "^1.0.1", "react-native-camera": "^4.2.1", "react-native-config": "^1.5.1", - "react-native-confirmation-code-field": "^7.3.1", "react-native-device-info": "^10.3.0", "react-native-document-picker": "^8.1.3", "react-native-dynamic-tab-view": "^1.0.7-0", @@ -92,15 +86,15 @@ "react-native-gesture-handler": "^2.9.0", "react-native-image-picker": "^5.0.1", "react-native-inappbrowser-reborn": "^3.7.0", - "react-native-keychain": "^8.1.2", "react-native-linear-gradient": "^2.6.2", "react-native-localization": "^2.3.1", + "react-native-localize": "^3.0.2", "react-native-mmkv": "^2.10.1", "react-native-modal": "^13.0.1", "react-native-navigation-bar-color": "^2.0.2", + "react-native-onesignal": "^5.0.1", "react-native-pager-view": "^6.2.0", "react-native-permissions": "^3.8.0", - "react-native-picker-select": "^8.0.4", "react-native-progress": "^5.0.0", "react-native-qrcode-scanner": "^1.5.5", "react-native-qrcode-styled": "^0.2.1", @@ -139,14 +133,14 @@ "@polkadot/types": "^9.9.4", "@subwallet/chain-list": "^0.2.16-beta.4", "@subwallet/extension-base": "^1.1.15-0", + "@react-native/eslint-config": "^0.72.2", + "@react-native/metro-config": "^0.72.11", "@tsconfig/react-native": "^3.0.0", "@types/jest": "^29.2.3", "@types/react": "^18.0.25", "@types/react-native": "^0.70.6", "@types/react-native-bcrypt": "^2.4.2", "@types/react-native-vector-icons": "^6.4.14", - "@react-native/eslint-config": "^0.72.2", - "@react-native/metro-config": "^0.72.11", "@types/react-native-video": "^5.0.14", "@types/react-redux": "^7.1.24", "@types/react-test-renderer": "^18.0.0", diff --git a/src/AppNew.tsx b/src/AppNew.tsx index c0bfd9b0c..73be5f7bc 100644 --- a/src/AppNew.tsx +++ b/src/AppNew.tsx @@ -30,6 +30,8 @@ import { SafeAreaProvider } from 'react-native-safe-area-context'; import { LockTimeout } from 'stores/types'; import { keyringLock } from './messaging'; import { updateAutoLockTime } from 'stores/MobileSettings'; +import { OneSignal } from 'react-native-onesignal'; +import { createNotificationConfig } from 'utils/pushNotification'; const layerScreenStyle: StyleProp = { top: 0, @@ -51,6 +53,7 @@ const gestureRootStyle: StyleProp = { height: '100%', zIndex: 9999, }; +OneSignal.initialize('b743f89b-7c0d-4ab9-a09c-4aa0ee1eedb7'); const autoLockParams: { hasMasterPassword: boolean; @@ -110,7 +113,8 @@ export const AppNew = () => { StatusBar.setBarStyle(isDarkMode ? 'light-content' : 'dark-content'); const { isUseBiometric, timeAutoLock, isPreventLock } = useSelector((state: RootState) => state.mobileSettings); - const { hasMasterPassword, isLocked } = useSelector((state: RootState) => state.accountState); + const language = useSelector((state: RootState) => state.settings.language); + const { hasMasterPassword, isLocked, accounts } = useSelector((state: RootState) => state.accountState); const { lock, unlockApp } = useAppLock(); const dispatch = useDispatch(); const isCryptoReady = useCryptoReady(); @@ -147,16 +151,21 @@ export const AppNew = () => { } }, [dispatch, timeAutoLock]); + useEffect(() => { + OneSignal.User.addTag('is_have_account', accounts.length + ''); + }, [accounts]); useEffect(() => { setTimeout(() => { SplashScreen.hide(); }, 100); + createNotificationConfig(language); // if (buildNumber === 1) { // Set default value on the first time install // const buildNumberInt = parseInt(getBuildNumber(), 10); // dispatch(setBuildNumber(buildNumberInt)); // } + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const isAppReady = isRequiredStoresReady && isCryptoReady && isI18nReady; diff --git a/src/screens/Settings/Languages.tsx b/src/screens/Settings/Languages.tsx index da743ac97..f0ba5bbc1 100644 --- a/src/screens/Settings/Languages.tsx +++ b/src/screens/Settings/Languages.tsx @@ -12,6 +12,7 @@ import { EmptyList } from 'components/EmptyList'; import { MagnifyingGlass } from 'phosphor-react-native'; import { saveLanguage } from 'messaging/index'; import { LanguageType } from '@subwallet/extension-base/background/KoniTypes'; +import { OneSignal } from 'react-native-onesignal'; const footerAreaStyle: StyleProp = { marginTop: 8, @@ -40,6 +41,7 @@ export const Languages = () => { routes: [{ name: 'Home' }, { name: 'GeneralSettings' }], }); saveLanguage(selectedLang); + OneSignal.User.setLanguage(selectedLang); } }; diff --git a/src/utils/pushNotification.ts b/src/utils/pushNotification.ts new file mode 100644 index 000000000..d0aa6505e --- /dev/null +++ b/src/utils/pushNotification.ts @@ -0,0 +1,10 @@ +import { getTimeZone } from 'react-native-localize'; +import { OneSignal } from 'react-native-onesignal'; + +const timezone = getTimeZone(); + +export function createNotificationConfig(language: string) { + OneSignal.Notifications.requestPermission(true); + OneSignal.User.setLanguage(language); + OneSignal.User.addTag('timezone', timezone); +} diff --git a/yarn.lock b/yarn.lock index ec0ba5b1f..bb0307ebc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1376,17 +1376,17 @@ resolved "https://registry.yarnpkg.com/@dr.pogodin/js-utils/-/js-utils-0.0.6.tgz#60f076dd90b87caa7812ad5aecd98bf960a7ad51" integrity sha512-6DyIS8s+V2d2GKqhW/TOxPugcskKPsKiJt9lFLBEddw012WKGicchPizar9osq+p7ECnNmYMsDUPAC3T+ZkZKw== -"@dr.pogodin/react-native-fs@>=2.21.0-alpha.1": +"@dr.pogodin/react-native-fs@>=2.21.0-alpha.3": version "2.21.0-alpha.3" resolved "https://registry.yarnpkg.com/@dr.pogodin/react-native-fs/-/react-native-fs-2.21.0-alpha.3.tgz#948be09264e57861cf1d5e6b7dd8a15ef3fe5a44" integrity sha512-blM6rbLJVK2KmY4CgcOiP755YFWZGFcp6O332oItUALr4dlfMvF4hWactr6whs4REC89Yrbz86YtvQ6f4HQcvA== dependencies: buffer "^6.0.3" -"@dr.pogodin/react-native-static-server@0.8.3": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@dr.pogodin/react-native-static-server/-/react-native-static-server-0.8.3.tgz#67af02deff1c8332a9aaf26f5a29483deb88c322" - integrity sha512-yNtdJh1TbjZ/3E8bLOQbKsbNhEMWA6DeF/gNXOLkFto05ZI4jzCBOR9Ubo7M5K/xaqbosLiOgVPeI17DwYnfrw== +"@dr.pogodin/react-native-static-server@0.8.4": + version "0.8.4" + resolved "https://registry.yarnpkg.com/@dr.pogodin/react-native-static-server/-/react-native-static-server-0.8.4.tgz#62626ce9ec88a3c0ecae28572e6665a305e6fcb4" + integrity sha512-utWakYrzsxJiegV0jyA/voQANtohqaAO3IJZ3qd1OY1mAQj2ihvUVr2ak+3bVVbZm4z7KBaKYTtdWWp+yZL5/A== dependencies: "@dr.pogodin/js-utils" "^0.0.6" @@ -3481,9 +3481,9 @@ merge-options "^3.0.4" "@react-native-camera-roll/camera-roll@^5.2.4": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@react-native-camera-roll/camera-roll/-/camera-roll-5.9.0.tgz#e638a7693bcebd41199ee32ae644dafab12ffa16" - integrity sha512-6dRB0oklozLCbklaLkINoxncLnyG7TfUPiTlqSy2+dvwGLNQv2fYGL+hZPPk6ANoNYnxuE82NbMFgf1v6L/9TA== + version "5.10.0" + resolved "https://registry.yarnpkg.com/@react-native-camera-roll/camera-roll/-/camera-roll-5.10.0.tgz#98cf5489be6805ac926b1c4d29ac956cf4df45dc" + integrity sha512-NZb/zU4S+k1Hx2Y3BdNufrfn8whNsiRjHNxeiGMak8OwDDJikqP5Ej7HXFv8sJSfTGfi1ddH0wdd541MHV/Nbw== "@react-native-clipboard/clipboard@^1.11.1": version "1.12.1" @@ -3659,31 +3659,11 @@ resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-9.4.1.tgz#7b880758adca65fe47ee866cf7b00416b9dcc192" integrity sha512-dAbY5mfw+6Kas/GJ6QX9AZyY+K+eq9ad4Su6utoph/nxyH3whp5cMSgRNgE2VhGQVRZ/OG0qq3IaD3+wzoqJXw== -"@react-native-community/segmented-control@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@react-native-community/segmented-control/-/segmented-control-2.2.2.tgz#4014256819ab8f40f6bc3a3929ff14a9d149cf04" - integrity sha512-14+4HnGVrg3USqMzcHCPCqPmPmaEj0ogQH4pHRFXjoVvJokzidXBcYyXl5yrwFcKGW6zTXI6Fx9Qgt4ydtS6tw== - -"@react-native-community/slider@^4.4.2": - version "4.4.3" - resolved "https://registry.yarnpkg.com/@react-native-community/slider/-/slider-4.4.3.tgz#9b9dc639b88f5bfda72bd72a9dff55cbf9f777ed" - integrity sha512-WdjvGtqJfqcCiLwtbzie53Z/H6w6dIfRHhlW832D89ySAdE5DxLAsqRhDOG0eacuAxxEB+T9sGCkVMD0fa3aBg== - "@react-native-masked-view/masked-view@^0.2.9": version "0.2.9" resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.2.9.tgz#723a7a076d56b8f5f3fda076eaa5b6b82988e854" integrity sha512-Hs4vKBKj+15VxHZHFtMaFWSBxXoOE5Ea8saoigWhahp8Mepssm0ezU+2pTl7DK9z8Y9s5uOl/aPb4QmBZ3R3Zw== -"@react-native-picker/picker@^1.8.3": - version "1.16.8" - resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-1.16.8.tgz#2126ca54d4a5a3e9ea5e3f39ad1e6643f8e4b3d4" - integrity sha512-pacdQDX6V6EmjF+HoiIh6u++qx4mTK0WnhgUHRc01B+Qt5eoeUwseBqmqfTSXTx/aHDEd6PiIw7UGvKgFoqgFQ== - -"@react-native-picker/picker@^2.4.8": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@react-native-picker/picker/-/picker-2.5.1.tgz#dfa13d5b97bfbedf1f7e7c608181a82f1d58b351" - integrity sha512-/sADUfQsosMRYtrqqL3ZYZSECRygj0fXtpRLqxJfwuMEoqfvfn40756R6B1alzusVvDRZFI0ari0iQid56hA/Q== - "@react-native/assets-registry@^0.72.0": version "0.72.0" resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.72.0.tgz#c82a76a1d86ec0c3907be76f7faf97a32bbed05d" @@ -4001,9 +3981,9 @@ "@open-web3/orml-type-definitions" "1.1.4" "@sora-substrate/type-definitions@^1.17.7": - version "1.22.7" - resolved "https://registry.yarnpkg.com/@sora-substrate/type-definitions/-/type-definitions-1.22.7.tgz#176bf56d372b9cd043c54cae1bae33dcd081a4d9" - integrity sha512-mcobVa9YFBPCUWyZOKDbS/Xwhqn2F4oRpLDMC7T17UZ71CuOofWW7HoUeQPD6jaIVQdXcFjqZ9Y8OqJ6Sxu1cQ== + version "1.22.12" + resolved "https://registry.yarnpkg.com/@sora-substrate/type-definitions/-/type-definitions-1.22.12.tgz#d4256de48fb37b0c7067dbae7fd5ddd7a8d3006c" + integrity sha512-SKZ0W3N92wb5rlk0Cj2M6OwyaAEDmuVepTtnvme+Ng6R+FqOkAixjlLv8bPh1OC4dLLrd4hTPyFMyv28AUUeVQ== dependencies: "@open-web3/orml-type-definitions" "1.1.4" @@ -4787,9 +4767,9 @@ form-data "^4.0.0" "@types/node@*", "@types/node@>=13.7.0": - version "20.7.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.1.tgz#06d732ead0bd5ad978ef0ea9cbdeb24dc8717514" - integrity sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg== + version "20.7.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.2.tgz#0bdc211f8c2438cfadad26dc8c040a874d478aed" + integrity sha512-RcdC3hOBOauLP+r/kRt27NrByYtDjsXyAuSbR87O6xpsvi763WI+5fbSIvYJrXnt9w4RuxhV6eAXfIs7aaf/FQ== "@types/node@18.15.13": version "18.15.13" @@ -4802,9 +4782,9 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^16.11.26": - version "16.18.54" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.54.tgz#4a63bdcea5b714f546aa27406a1c60621236a132" - integrity sha512-oTmGy68gxZZ21FhTJVVvZBYpQHEBZxHKTsGshobMqm9qWpbqdZsA5jvsuPZcHu0KwpmLrOHWPdEfg7XDpNT9UA== + version "16.18.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.55.tgz#3d9ac633ed401238c13ccaeed54297bd653412a3" + integrity sha512-Y1zz/LIuJek01+hlPNzzXQhmq/Z2BCP96j18MSXC0S0jSu/IG4FFxmBs7W4/lI2vPJ7foVfEB0hUVtnOjnCiTg== "@types/pbkdf2@^3.0.0": version "3.1.0" @@ -5036,9 +5016,9 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.25" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.25.tgz#3edd102803c97356fb4c805b2bbaf7dfc9ab6abc" - integrity sha512-gy7iPgwnzNvxgAEi2bXOHWCVOG6f7xsprVJH4MjlAWeBmJ7vh/Y1kwMtUrs64ztf24zVIRCpr3n/z6gm9QIkgg== + version "17.0.26" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.26.tgz#388e5002a8b284ad7b4599ba89920a6d74d8d79a" + integrity sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw== dependencies: "@types/yargs-parser" "*" @@ -6575,12 +6555,12 @@ browserify-unibabel@^3.0.0: integrity sha512-j3MX0k2dC1/DEo9jSUyj7zpv5wLd1+klpFwYlM0E5mr7MX6LblQOWb+jkBEKV2iRszmhJuLHAtNuqranlGnpNQ== browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9: - version "4.22.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.0.tgz#6adc8116589ccea8a99d0df79c5de2436199abdb" - integrity sha512-v+Jcv64L2LbfTC6OnRcaxtqJNJuQAVhZKSJfR/6hn7lhnChUXl4amwVviqN1k411BB+3rRoKMitELRn1CojeRA== + version "4.22.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: - caniuse-lite "^1.0.30001539" - electron-to-chromium "^1.4.530" + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" node-releases "^2.0.13" update-browserslist-db "^1.0.13" @@ -6780,7 +6760,7 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== -caniuse-lite@^1.0.30001346, caniuse-lite@^1.0.30001539: +caniuse-lite@^1.0.30001346, caniuse-lite@^1.0.30001541: version "1.0.30001541" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz#b1aef0fadd87fb72db4dcb55d220eae17b81cdb1" integrity sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw== @@ -8093,10 +8073,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.530: - version "1.4.532" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.532.tgz#44454731e26f2c8c14e88cca0d073f0761784f5e" - integrity sha512-piIR0QFdIGKmOJTSNg5AwxZRNWQSXlRYycqDB9Srstx4lip8KpcmRxVP6zuFWExWziHYZpJ0acX7TxqX95KBpg== +electron-to-chromium@^1.4.535: + version "1.4.537" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.537.tgz#aac4101db53066be1e49baedd000a26bc754adc9" + integrity sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA== electron@^23.1.2: version "23.3.13" @@ -9356,9 +9336,9 @@ flow-enums-runtime@^0.0.5: integrity sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ== flow-parser@0.*: - version "0.217.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.217.0.tgz#0e6bed214151fa3240dc9fd83ac8a9e050e523c5" - integrity sha512-hEa5n0dta1RcaDwJDWbnyelw07PK7+Vx0f9kDht28JOt2hXgKdKGaT3wM45euWV2DxOXtzDSTaUgGSD/FPvC2Q== + version "0.217.2" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.217.2.tgz#3a4aade40ea55a863295120a0b0da8a960967ad6" + integrity sha512-O+nt/FLXa1hTwtW0O9h36iZjbL84G8e1uByx5dDXMC97AJEbZXwJ4ohfaE8BNWrYFyYX0NGfz1o8AtLQvaaD/Q== flow-parser@^0.206.0: version "0.206.0" @@ -10419,7 +10399,7 @@ interpret@^3.1.1: resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== -invariant@*, invariant@2.2.4, invariant@^2.2.4: +invariant@*, invariant@2.2.4, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -13527,9 +13507,9 @@ postcss@^7.0.36: source-map "^0.6.1" postcss@^8.1.7, postcss@^8.4.23, postcss@^8.4.6: - version "8.4.30" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" - integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -14369,7 +14349,7 @@ react-localization@^1.0.17: dependencies: localized-strings "^0.2.0" -react-native-animatable@1.3.3, react-native-animatable@^1.3.3: +react-native-animatable@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a" integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w== @@ -14400,11 +14380,6 @@ react-native-config@^1.5.1: resolved "https://registry.yarnpkg.com/react-native-config/-/react-native-config-1.5.1.tgz#73c94f511493e9b7ff9350cdf351d203a1b05acc" integrity sha512-g1xNgt1tV95FCX+iWz6YJonxXkQX0GdD3fB8xQtR1GUBEqweB9zMROW77gi2TygmYmUkBI7LU4pES+zcTyK4HA== -react-native-confirmation-code-field@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/react-native-confirmation-code-field/-/react-native-confirmation-code-field-7.3.1.tgz#e705ee5b73d7749cac29da287379fa8690904fe6" - integrity sha512-5vI6BclB31e4vTYg0HmV/Vy9zI5MQZfHr1EN3kYzvaZq4GMIsyr6lrSmnQW1TtWR7Z8oURrhCpwo+JsWXxCoug== - react-native-device-info@^10.3.0: version "10.11.0" resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-10.11.0.tgz#2c9f378f1c3c5eb9aafa803d015b84325991a9aa" @@ -14470,11 +14445,6 @@ react-native-inappbrowser-reborn@^3.7.0: invariant "^2.2.4" opencollective-postinstall "^2.0.3" -react-native-keychain@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/react-native-keychain/-/react-native-keychain-8.1.2.tgz#34291ae472878e5124d081211af5ede7d810e64f" - integrity sha512-bhHEui+yMp3Us41NMoRGtnWEJiBE0g8tw5VFpq4mpmXAx6XJYahuM6K3WN5CsUeUl83hYysSL9oFZNKSTPSvYw== - react-native-linear-gradient@^2.6.2: version "2.8.3" resolved "https://registry.yarnpkg.com/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz#9a116649f86d74747304ee13db325e20b21e564f" @@ -14487,6 +14457,11 @@ react-native-localization@^2.3.1: dependencies: react-localization "^1.0.17" +react-native-localize@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-3.0.2.tgz#43fa75c0097dbdb24a54ff320b3c8ad732407365" + integrity sha512-/l/oE1LVNgIRRhLbhmfFMHiWV0xhUn0A0iz1ytLVRYywL7FTp8Rx2vkJS/q/RpExDvV7yLw2493XZBYIM1dnLQ== + react-native-mmkv@^2.10.1: version "2.10.2" resolved "https://registry.yarnpkg.com/react-native-mmkv/-/react-native-mmkv-2.10.2.tgz#73f06bb710388f67bade031e7b8e42a6d2358e40" @@ -14505,6 +14480,13 @@ react-native-navigation-bar-color@^2.0.2: resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.2.tgz#2e14ca79a656d81d5b4b7433ae43966ef5206444" integrity sha512-ZmpLWRocyme1au11e5ZuecMS/UCi57nlzgnioi03Q6ERMbeUOqqbWgNBaNB7SsCeqBV6fZPjo3+A64zEIpzw4w== +react-native-onesignal@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-native-onesignal/-/react-native-onesignal-5.0.1.tgz#2297d3756074af8c8e664bc80dccd7d1c6143269" + integrity sha512-DB/r/r+nAa+HxLiGtYCx4PEpVhN391p517GEE+GG/hrAW+bV7BkwqPxjrYfircmrfhRTaYs59xgJ3Py0RJdkJQ== + dependencies: + invariant "^2.2.2" + react-native-pager-view@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.2.1.tgz#985d21bbb7d7bc012f4c142dedbb98ce4bdea104" @@ -14520,14 +14502,6 @@ react-native-permissions@^3.8.0: resolved "https://registry.yarnpkg.com/react-native-permissions/-/react-native-permissions-3.9.2.tgz#729ee7fe9ca437ee8e87f1ecec59acfe89bbb840" integrity sha512-mBGoRDKi4twYH+UsPomPdi0dLpV6dGLmKzLpIgB5cLK/dzfM8Sr02Kch1xghVwT13ZkyCyd8DpcL4HgBJ4GQQg== -react-native-picker-select@^8.0.4: - version "8.1.0" - resolved "https://registry.yarnpkg.com/react-native-picker-select/-/react-native-picker-select-8.1.0.tgz#667a5442f783f4bcfd3f65880c6926155fd2c39c" - integrity sha512-iLsLv2OEWpXnQMDYJS6du5Cl1HTHy887n60Yp5OOiMny0TDB9w5CfxTUYWtpsvJJrUa/Yrv+1NMQiJy7IA4ETw== - dependencies: - "@react-native-picker/picker" "^1.8.3" - lodash.isequal "^4.5.0" - react-native-progress@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/react-native-progress/-/react-native-progress-5.0.0.tgz#f5ac6ceaeee27f184c660b00f29419e82a9d0ab0"