diff --git a/android/app/build.gradle b/android/app/build.gradle
index 0ffdeb18c..dc22cd00c 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -122,7 +122,7 @@ def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false);
configurations.all {
resolutionStrategy {
- force "com.facebook.soloader:soloader:0.8.0"
+ force "com.facebook.soloader:soloader:0.8.1"
}
}
android {
@@ -212,6 +212,7 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
implementation 'com.android.support:multidex:2.0.1'
implementation project(':@react-native-community_viewpager')
+ implementation 'com.google.firebase:firebase-analytics:17.2.3'
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 9e791b4ec..612459187 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -57,9 +57,9 @@
-
+ android:resource="@color/notification_icon" /> -->
diff --git a/android/build.gradle b/android/build.gradle
index 6770fe6db..4b097982c 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -29,7 +29,7 @@ buildscript {
dependencies {
classpath('com.android.tools.build:gradle:3.5.2')
- classpath 'com.google.gms:google-services:4.0.2'
+ classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.bugsnag:bugsnag-android-gradle-plugin:4.+'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/ios/Podfile b/ios/Podfile
index 3fe2638f2..6349fb3e5 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -35,6 +35,7 @@ target 'eSteem' do
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
pod 'rn-fetch-blob', :path => '../node_modules/rn-fetch-blob'
+ pod 'Firebase/Analytics'
target 'eSteemTests' do
inherit! :search_paths
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 449b6c6fd..4a113e071 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -40,6 +40,57 @@ PODS:
- React-Core (= 0.61.5)
- React-jsi (= 0.61.5)
- ReactCommon/turbomodule/core (= 0.61.5)
+ - Firebase/Analytics (6.25.0):
+ - Firebase/Core
+ - Firebase/Core (6.25.0):
+ - Firebase/CoreOnly
+ - FirebaseAnalytics (= 6.5.1)
+ - Firebase/CoreOnly (6.25.0):
+ - FirebaseCore (= 6.7.1)
+ - Firebase/Messaging (6.25.0):
+ - Firebase/CoreOnly
+ - FirebaseMessaging (~> 4.4.1)
+ - FirebaseAnalytics (6.5.1):
+ - FirebaseCore (~> 6.7)
+ - FirebaseInstallations (~> 1.2)
+ - GoogleAppMeasurement (= 6.5.1)
+ - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
+ - GoogleUtilities/MethodSwizzler (~> 6.0)
+ - GoogleUtilities/Network (~> 6.0)
+ - "GoogleUtilities/NSData+zlib (~> 6.0)"
+ - nanopb (~> 1.30905.0)
+ - FirebaseAnalyticsInterop (1.5.0)
+ - FirebaseCore (6.7.1):
+ - FirebaseCoreDiagnostics (~> 1.3)
+ - FirebaseCoreDiagnosticsInterop (~> 1.2)
+ - GoogleUtilities/Environment (~> 6.5)
+ - GoogleUtilities/Logger (~> 6.5)
+ - FirebaseCoreDiagnostics (1.3.0):
+ - FirebaseCoreDiagnosticsInterop (~> 1.2)
+ - GoogleDataTransportCCTSupport (~> 3.1)
+ - GoogleUtilities/Environment (~> 6.5)
+ - GoogleUtilities/Logger (~> 6.5)
+ - nanopb (~> 1.30905.0)
+ - FirebaseCoreDiagnosticsInterop (1.2.0)
+ - FirebaseInstallations (1.2.0):
+ - FirebaseCore (~> 6.6)
+ - GoogleUtilities/Environment (~> 6.6)
+ - GoogleUtilities/UserDefaults (~> 6.6)
+ - PromisesObjC (~> 1.2)
+ - FirebaseInstanceID (4.3.4):
+ - FirebaseCore (~> 6.6)
+ - FirebaseInstallations (~> 1.0)
+ - GoogleUtilities/Environment (~> 6.5)
+ - GoogleUtilities/UserDefaults (~> 6.5)
+ - FirebaseMessaging (4.4.1):
+ - FirebaseAnalyticsInterop (~> 1.5)
+ - FirebaseCore (~> 6.6)
+ - FirebaseInstanceID (~> 4.3)
+ - GoogleUtilities/AppDelegateSwizzler (~> 6.5)
+ - GoogleUtilities/Environment (~> 6.5)
+ - GoogleUtilities/Reachability (~> 6.5)
+ - GoogleUtilities/UserDefaults (~> 6.5)
+ - Protobuf (>= 3.9.2, ~> 3.9)
- FLAnimatedImage (1.0.12)
- Folly (2018.10.22.00):
- boost-for-react-native
@@ -51,10 +102,46 @@ PODS:
- DoubleConversion
- glog
- glog (0.3.5)
+ - GoogleAppMeasurement (6.5.1):
+ - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
+ - GoogleUtilities/MethodSwizzler (~> 6.0)
+ - GoogleUtilities/Network (~> 6.0)
+ - "GoogleUtilities/NSData+zlib (~> 6.0)"
+ - nanopb (~> 1.30905.0)
+ - GoogleDataTransport (6.1.1)
+ - GoogleDataTransportCCTSupport (3.1.0):
+ - GoogleDataTransport (~> 6.1)
+ - nanopb (~> 1.30905.0)
+ - GoogleUtilities/AppDelegateSwizzler (6.6.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Environment (6.6.0):
+ - PromisesObjC (~> 1.2)
+ - GoogleUtilities/Logger (6.6.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/MethodSwizzler (6.6.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network (6.6.0):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (6.6.0)"
+ - GoogleUtilities/Reachability (6.6.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/UserDefaults (6.6.0):
+ - GoogleUtilities/Logger
- lottie-ios (3.1.3)
- lottie-react-native (3.3.2):
- lottie-ios (~> 3.1.3)
- React
+ - nanopb (1.30905.0):
+ - nanopb/decode (= 1.30905.0)
+ - nanopb/encode (= 1.30905.0)
+ - nanopb/decode (1.30905.0)
+ - nanopb/encode (1.30905.0)
+ - PromisesObjC (1.2.8)
+ - Protobuf (3.12.0)
- QBImagePickerController (3.4.0)
- RCTRequired (0.61.5)
- RCTTypeSafety (0.61.5):
@@ -277,6 +364,16 @@ PODS:
- React-Core
- RNCAsyncStorage (1.7.1):
- React
+ - RNCPushNotificationIOS (1.2.0):
+ - React
+ - RNFBApp (7.1.0):
+ - Firebase/CoreOnly (~> 6.25.0)
+ - React
+ - RNFBMessaging (7.1.0):
+ - Firebase/Analytics (~> 6.25.0)
+ - Firebase/Messaging (~> 6.25.0)
+ - React
+ - RNFBApp
- RNGestureHandler (1.5.2):
- React
- RNIap (3.4.15):
@@ -309,6 +406,7 @@ DEPENDENCIES:
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
+ - Firebase/Analytics
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- lottie-ios (from `../node_modules/lottie-ios`)
@@ -345,6 +443,9 @@ DEPENDENCIES:
- ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`)
- rn-fetch-blob (from `../node_modules/rn-fetch-blob`)
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
+ - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)"
+ - "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
+ - "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)"
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNIap (from `../node_modules/react-native-iap`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
@@ -358,7 +459,23 @@ SPEC REPOS:
- AppCenter
- AppCenterReactNativeShared
- boost-for-react-native
+ - Firebase
+ - FirebaseAnalytics
+ - FirebaseAnalyticsInterop
+ - FirebaseCore
+ - FirebaseCoreDiagnostics
+ - FirebaseCoreDiagnosticsInterop
+ - FirebaseInstallations
+ - FirebaseInstanceID
+ - FirebaseMessaging
- FLAnimatedImage
+ - GoogleAppMeasurement
+ - GoogleDataTransport
+ - GoogleDataTransportCCTSupport
+ - GoogleUtilities
+ - nanopb
+ - PromisesObjC
+ - Protobuf
- QBImagePickerController
- RSKImageCropper
- SDWebImage
@@ -448,6 +565,12 @@ EXTERNAL SOURCES:
:path: "../node_modules/rn-fetch-blob"
RNCAsyncStorage:
:path: "../node_modules/@react-native-community/async-storage"
+ RNCPushNotificationIOS:
+ :path: "../node_modules/@react-native-community/push-notification-ios"
+ RNFBApp:
+ :path: "../node_modules/@react-native-firebase/app"
+ RNFBMessaging:
+ :path: "../node_modules/@react-native-firebase/messaging"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNIap:
@@ -476,11 +599,27 @@ SPEC CHECKSUMS:
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f
FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75
+ Firebase: 5719b4f965f76643241a1bb8244483ff6117db39
+ FirebaseAnalytics: 93565f3f0f0f50a5d8770850bfe6a82eaba5db27
+ FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae
+ FirebaseCore: 6023faeada5afa95a349fccafb40900e32e9ac42
+ FirebaseCoreDiagnostics: 4a773a47bd83bbd5a9b1ccf1ce7caa8b2d535e67
+ FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850
+ FirebaseInstallations: 2119fb3e46b0a88bfdbf12562f855ee3252462fa
+ FirebaseInstanceID: cef67c4967c7cecb56ea65d8acbb4834825c587b
+ FirebaseMessaging: 29543feb343b09546ab3aa04d008ee8595b43c44
FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
+ GoogleAppMeasurement: 137afe68bfa406c3f4221b9395253d9e5d4654cf
+ GoogleDataTransport: ad884314b81cdb808fb1d23787b367ff8da4e28a
+ GoogleDataTransportCCTSupport: d70a561f7d236af529fee598835caad5e25f6d3d
+ GoogleUtilities: 39530bc0ad980530298e9c4af8549e991fd033b1
lottie-ios: 496ac5cea1bbf1a7bd1f1f472f3232eb1b8d744b
lottie-react-native: 2a1a82bb326ae51331a5520de0cf706733c6db69
+ nanopb: c43f40fadfe79e8b8db116583945847910cbabc9
+ PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6
+ Protobuf: 2793fcd0622a00b546c60e7cbbcc493e043e9bb9
QBImagePickerController: d54cf93db6decf26baf6ed3472f336ef35cae022
RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1
RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320
@@ -511,6 +650,9 @@ SPEC CHECKSUMS:
ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNCAsyncStorage: 44395cb9c7c1523104c2b499eb426ef7aff82bca
+ RNCPushNotificationIOS: 4d9ffd08f00ef6c1029ebbf4d72fc711eca3ff01
+ RNFBApp: 25a6476dfd7aac2bcbe984f569875bcea122895b
+ RNFBMessaging: ea4ce2a6466b3a6dfb46a8c28c38a7989da36a31
RNGestureHandler: 946a7691e41df61e2c4b1884deab41a4cdc3afff
RNIap: b4c77c8bc4501203f4b743126a05da23f10f40b4
RNImageCropPicker: e1d8c3381e5b05a1bdcd13ea57a4f1c020a09cef
@@ -521,6 +663,6 @@ SPEC CHECKSUMS:
SDWebImage: c10d14a8883ebd89664f02a422006f66a85c0c5d
Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b
-PODFILE CHECKSUM: d4edbb9c1c57c5484f4893520a7865260cb898d3
+PODFILE CHECKSUM: 162b87bf8ea343d40707844f5dfad5d6aa5a4e99
COCOAPODS: 1.8.4
diff --git a/ios/eSteem.xcodeproj/project.pbxproj b/ios/eSteem.xcodeproj/project.pbxproj
index 2767af74c..ab87b249f 100644
--- a/ios/eSteem.xcodeproj/project.pbxproj
+++ b/ios/eSteem.xcodeproj/project.pbxproj
@@ -31,6 +31,10 @@
588A5058232A3A4C00FC1361 /* Sansation_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 588A5052232A3A4C00FC1361 /* Sansation_Regular.ttf */; };
588A5059232A3A4C00FC1361 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 588A5053232A3A4C00FC1361 /* Roboto.ttf */; };
588A505A232A3A4C00FC1361 /* Roboto-medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 588A5054232A3A4C00FC1361 /* Roboto-medium.ttf */; };
+ 58F9BCC524793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
+ 58F9BCC624793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
+ 58F9BCC724793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
+ 58F9BCC824793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
60B4658C6F794BF28A644ADC /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4EB466C53BAE4EDC904357B3 /* FontAwesome5_Solid.ttf */; };
643845B37F268570EDF67449 /* libPods-eSteem-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EAA462F8619BEA95CF30F446 /* libPods-eSteem-tvOSTests.a */; };
8A865CFDCD1C4F4885488F9D /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 22F5F05A06E142C2B41A4D38 /* MaterialCommunityIcons.ttf */; };
@@ -116,6 +120,7 @@
588A5054232A3A4C00FC1361 /* Roboto-medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Roboto-medium.ttf"; path = "../src/assets/Fonts/Roboto-medium.ttf"; sourceTree = ""; };
588A5064232A497100FC1361 /* ReactNativeConfig.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativeConfig.xcodeproj; path = "../node_modules/react-native-config/ios/ReactNativeConfig.xcodeproj"; sourceTree = ""; };
58F6300F2350580B0017C953 /* libRealmJS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRealmJS.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
664C331A95B54FA5B7AD4267 /* Pods-RnDiffApp-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RnDiffApp-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-RnDiffApp-tvOSTests/Pods-RnDiffApp-tvOSTests.release.xcconfig"; sourceTree = ""; };
6D935B44FB5A4CF3BF4D01DF /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; };
7093E51BBC0EE2F41AB19EBA /* libPods-eSteem-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-eSteem-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -205,6 +210,7 @@
13B07FAE1A68108700A75B9A /* eSteem */ = {
isa = PBXGroup;
children = (
+ 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */,
58190B3D23294823000EA0E1 /* eSteem.entitlements */,
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
@@ -373,6 +379,7 @@
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
9AD0AC4A37A0E92951F26CAE /* [CP] Copy Pods Resources */,
+ 54BD4F02E8D68B11EA36003A /* [CP-User] [RNFB] Core Configuration */,
);
buildRules = (
);
@@ -511,6 +518,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 58F9BCC624793C61004F0790 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -538,6 +546,7 @@
17680F34EC3E4996905493C6 /* Ionicons.ttf in Resources */,
588A5058232A3A4C00FC1361 /* Sansation_Regular.ttf in Resources */,
8A865CFDCD1C4F4885488F9D /* MaterialCommunityIcons.ttf in Resources */,
+ 58F9BCC524793C61004F0790 /* GoogleService-Info.plist in Resources */,
344120660B8D409FAA2DF0F1 /* MaterialIcons.ttf in Resources */,
ED7C9108CF35437280FB8893 /* Octicons.ttf in Resources */,
588A5059232A3A4C00FC1361 /* Roboto.ttf in Resources */,
@@ -550,6 +559,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 58F9BCC724793C61004F0790 /* GoogleService-Info.plist in Resources */,
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -558,6 +568,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 58F9BCC824793C61004F0790 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -621,6 +632,16 @@
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;
};
+ 54BD4F02E8D68B11EA36003A /* [CP-User] [RNFB] Core Configuration */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ name = "[CP-User] [RNFB] Core Configuration";
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes usful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"firebase_crashlytics_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\n\n # config.admob_delay_app_measurement_init\n _ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_delay_app_measurement_init\")\n if [[ $_ADMOB_DELAY_APP_MEASUREMENT == \"true\" ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADDelayAppMeasurementInit\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"YES\")\n fi\n\n # config.admob_ios_app_id\n _ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_ios_app_id\")\n if [[ $_ADMOB_IOS_APP_ID ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADApplicationIdentifier\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_ADMOB_IOS_APP_ID\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally \n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n\n";
+ };
57F4EECD4004FE3420E6DF92 /* Bundle React Native Code And Images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -970,7 +991,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = app.esteem.mobile.ios;
PRODUCT_NAME = Esteem;
- PROVISIONING_PROFILE_SPECIFIER = dev09Dec;
+ PROVISIONING_PROFILE_SPECIFIER = dev;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
@@ -1041,7 +1062,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = app.esteem.mobile.ios;
PRODUCT_NAME = Esteem;
- PROVISIONING_PROFILE_SPECIFIER = prod_02_2021;
+ PROVISIONING_PROFILE_SPECIFIER = prod;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
diff --git a/ios/eSteem.xcworkspace/xcuserdata/mistik.xcuserdatad/UserInterfaceState.xcuserstate b/ios/eSteem.xcworkspace/xcuserdata/mistik.xcuserdatad/UserInterfaceState.xcuserstate
index c879d731b..9b623942f 100644
Binary files a/ios/eSteem.xcworkspace/xcuserdata/mistik.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/eSteem.xcworkspace/xcuserdata/mistik.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/eSteem/AppDelegate.m b/ios/eSteem/AppDelegate.m
index df697c695..9f7c86638 100644
--- a/ios/eSteem/AppDelegate.m
+++ b/ios/eSteem/AppDelegate.m
@@ -13,6 +13,7 @@
#import
#import
#import
+@import Firebase;
#import
#import
@@ -30,6 +31,7 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
+ [FIRApp configure];
[AppCenterReactNativePush register];
[AppCenterReactNative register];
[AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true];
diff --git a/package.json b/package.json
index 4b2df1fc7..76e0bbcab 100644
--- a/package.json
+++ b/package.json
@@ -33,6 +33,9 @@
"@react-native-community/async-storage": "^1.7.1",
"@react-native-community/cameraroll": "^1.3.0",
"@react-native-community/netinfo": "^5.3.3",
+ "@react-native-community/push-notification-ios": "^1.2.0",
+ "@react-native-firebase/app": "^7.1.0",
+ "@react-native-firebase/messaging": "^7.1.0",
"appcenter": "^2.6.0",
"appcenter-analytics": "^2.6.0",
"appcenter-crashes": "^2.6.0",
@@ -70,6 +73,7 @@
"react-native-modal-dropdown": "esteemapp/react-native-modal-dropdown",
"react-native-modal-translucent": "^5.0.0",
"react-native-navigation-bar-color": "^1.0.0",
+ "react-native-push-notification": "^3.5.1",
"react-native-qrcode-svg": "^6.0.3",
"react-native-reanimated": "^1.3.0",
"react-native-scrollable-tab-view": "esteemapp/react-native-scrollable-tab-view",
diff --git a/src/components/upvote/container/upvoteContainer.js b/src/components/upvote/container/upvoteContainer.js
index 46393e7e3..19099f154 100644
--- a/src/components/upvote/container/upvoteContainer.js
+++ b/src/components/upvote/container/upvoteContainer.js
@@ -85,7 +85,9 @@ class UpvoteContainer extends PureComponent {
if (pendingPayout > 0 && pendingPayout < minimumAmountForPayout) {
warnZeroPayout = true;
}
- const { base, quote, sbdPrintRate } = globalProps;
+ const base = get(globalProps, 'base', 0);
+ const quote = get(globalProps, 'quote', 0);
+ const sbdPrintRate = get(globalProps, 'sbdPrintRate', 0);
const SBD_PRINT_RATE_MAX = 10000;
const percent_steem_dollars = get(content, 'percent_steem_dollars') / 20000;
const pending_payout_sbd = pendingPayout * percent_steem_dollars;
diff --git a/src/index.js b/src/index.js
index ffeb1bb14..639a3f806 100755
--- a/src/index.js
+++ b/src/index.js
@@ -3,6 +3,7 @@ import 'react-native-gesture-handler';
import { Provider, connect } from 'react-redux';
import { PersistGate } from 'redux-persist/integration/react';
import { IntlProvider } from 'react-intl';
+import firebase from '@react-native-firebase/app';
import { flattenMessages } from './utils/flattenMessages';
import messages from './config/locales';
diff --git a/src/screens/application/container/applicationContainer.js b/src/screens/application/container/applicationContainer.js
index 682acf4a0..54161ed92 100644
--- a/src/screens/application/container/applicationContainer.js
+++ b/src/screens/application/container/applicationContainer.js
@@ -2,9 +2,7 @@ import { Component } from 'react';
import { Platform, BackHandler, Alert, Linking, AppState } from 'react-native';
import NetInfo from '@react-native-community/netinfo';
import Config from 'react-native-config';
-import Push from 'appcenter-push';
import get from 'lodash/get';
-import AppCenter from 'appcenter';
import changeNavigationBarColor from 'react-native-navigation-bar-color';
import { connect } from 'react-redux';
import { injectIntl } from 'react-intl';
@@ -16,6 +14,8 @@ import {
initialMode as nativeThemeInitialMode,
eventEmitter as nativeThemeEventEmitter,
} from 'react-native-dark-mode';
+import messaging from '@react-native-firebase/messaging';
+import PushNotification from 'react-native-push-notification';
// Constants
import AUTH_TYPE from '../../../constants/authType';
@@ -85,6 +85,9 @@ export const setPreviousAppState = () => {
}, 500);
};
+let firebaseOnNotificationOpenedAppListener = null;
+let firebaseOnMessageListener = null;
+
class ApplicationContainer extends Component {
constructor(props) {
super(props);
@@ -155,6 +158,14 @@ class ApplicationContainer extends Component {
clearTimeout(this._pinCodeTimer);
}
+ if (firebaseOnMessageListener) {
+ firebaseOnMessageListener();
+ }
+
+ if (firebaseOnNotificationOpenedAppListener) {
+ firebaseOnNotificationOpenedAppListener();
+ }
+
this.netListener();
}
@@ -277,101 +288,116 @@ class ApplicationContainer extends Component {
}
};
- _createPushListener = () => {
+ _pushNavigate = (notification) => {
const { dispatch } = this.props;
let params = null;
let key = null;
let routeName = null;
- Push.setListener({
- onPushNotificationReceived(pushNotification) {
- if (previousAppState !== 'active') {
- const push = get(pushNotification, 'customProperties');
- const type = get(push, 'type', '');
- const permlink1 = get(push, 'permlink1', '');
- const permlink2 = get(push, 'permlink2', '');
- const permlink3 = get(push, 'permlink3', '');
- //const parentPermlink1 = get(push, 'parent_permlink1', '');
- //const parentPermlink2 = get(push, 'parent_permlink2', '');
- //const parentPermlink3 = get(push, 'parent_permlink3', '');
+ if (previousAppState !== 'active' && !!notification) {
+ const push = get(notification, 'data');
+ const type = get(push, 'type', '');
+ const fullPermlink = get(push, 'permlink', '');
+ const username = get(push, 'target', '');
+ const activity_id = get(push, 'id', '');
- //const fullParentPermlink = `${parentPermlink1}${parentPermlink2}${parentPermlink3}`;
- const fullPermlink = `${permlink1}${permlink2}${permlink3}`;
+ switch (type) {
+ case 'vote':
+ case 'unvote':
+ params = {
+ author: get(push, 'target', ''),
+ permlink: fullPermlink,
+ };
+ key = fullPermlink;
+ routeName = ROUTES.SCREENS.POST;
+ break;
+ case 'mention':
+ params = {
+ author: get(push, 'source', ''),
+ permlink: fullPermlink,
+ };
+ key = fullPermlink;
+ routeName = ROUTES.SCREENS.POST;
+ break;
- const username = get(push, 'target', '');
- const activity_id = get(push, 'id', '');
+ case 'follow':
+ case 'unfollow':
+ case 'ignore':
+ params = {
+ username: get(push, 'source', ''),
+ };
+ key = get(push, 'source', '');
+ routeName = ROUTES.SCREENS.PROFILE;
+ break;
- switch (type) {
- case 'vote':
- case 'unvote':
- params = {
- author: get(push, 'target', ''),
- permlink: fullPermlink,
- };
- key = fullPermlink;
- routeName = ROUTES.SCREENS.POST;
- break;
- case 'mention':
- params = {
- author: get(push, 'source', ''),
- permlink: fullPermlink,
- };
- key = fullPermlink;
- routeName = ROUTES.SCREENS.POST;
- break;
+ case 'reblog':
+ params = {
+ author: get(push, 'target', ''),
+ permlink: fullPermlink,
+ };
+ key = fullPermlink;
+ routeName = ROUTES.SCREENS.POST;
+ break;
- case 'follow':
- case 'unfollow':
- case 'ignore':
- params = {
- username: get(push, 'source', ''),
- };
- key = get(push, 'source', '');
- routeName = ROUTES.SCREENS.PROFILE;
- break;
+ case 'reply':
+ params = {
+ author: get(push, 'source', ''),
+ permlink: fullPermlink,
+ };
+ key = fullPermlink;
+ routeName = ROUTES.SCREENS.POST;
+ break;
- case 'reblog':
- params = {
- author: get(push, 'target', ''),
- permlink: fullPermlink,
- };
- key = fullPermlink;
- routeName = ROUTES.SCREENS.POST;
- break;
+ case 'transfer':
+ routeName = ROUTES.TABBAR.PROFILE;
+ params = {
+ activePage: 2,
+ };
+ break;
- case 'reply':
- params = {
- author: get(push, 'source', ''),
- permlink: fullPermlink,
- };
- key = fullPermlink;
- routeName = ROUTES.SCREENS.POST;
- break;
+ default:
+ break;
+ }
- case 'transfer':
- routeName = ROUTES.TABBAR.PROFILE;
- params = {
- activePage: 2,
- };
- break;
+ markActivityAsRead(username, activity_id).then((result) => {
+ dispatch(updateUnreadActivityCount(result.unread));
+ });
+ if (!some(params, isEmpty)) {
+ navigate({
+ routeName,
+ params,
+ key,
+ });
+ }
+ }
+ };
- default:
- break;
- }
+ _createPushListener = () => {
+ (async () => await messaging().requestPermission())();
- markActivityAsRead(username, activity_id).then((result) => {
- dispatch(updateUnreadActivityCount(result.unread));
- });
- if (!some(params, isEmpty)) {
- navigate({
- routeName,
- params,
- key,
- });
- }
- }
- },
+ PushNotification.setApplicationIconBadgeNumber(0);
+ PushNotification.cancelAllLocalNotifications();
+
+ firebaseOnMessageListener = messaging().onMessage((remoteMessage) => {
+ console.log('remoteMessage 1 ', remoteMessage);
+ // this._pushNavigate(remoteMessage);
});
+
+ firebaseOnNotificationOpenedAppListener = messaging().onNotificationOpenedApp(
+ (remoteMessage) => {
+ console.log('remoteMessage 2:>> ', remoteMessage);
+ // this._pushNavigate(remoteMessage);
+ },
+ );
+
+ messaging()
+ .getInitialNotification()
+ .then((remoteMessage) => {
+ console.log('remoteMessage 3:>> ', remoteMessage);
+ // this._pushNavigate(remoteMessage);
+ });
+
+ // return unsubscribe;
};
_handleConntectionChange = (status) => {
@@ -526,8 +552,6 @@ class ApplicationContainer extends Component {
}),
);
dispatch(changeAllNotificationSettings(settings));
-
- Push.setEnabled(settings.notification);
}
if (settings.nsfw !== '') dispatch(setNsfw(settings.nsfw));
@@ -596,15 +620,18 @@ class ApplicationContainer extends Component {
};
_enableNotification = async (username, isEnable) => {
- const token = await AppCenter.getInstallId();
-
- setPushToken({
- username,
- token,
- system: Platform.OS,
- allows_notify: Number(isEnable),
- notify_types: [1, 2, 3, 4, 5, 6],
- });
+ messaging()
+ .getToken()
+ .then((token) => {
+ console.log('token :>> ', token);
+ setPushToken({
+ username,
+ token,
+ system: Platform.OS,
+ allows_notify: Number(isEnable),
+ notify_types: [1, 2, 3, 4, 5, 6],
+ });
+ });
};
_switchAccount = async (targetAccountUsername) => {
diff --git a/src/screens/login/container/loginContainer.js b/src/screens/login/container/loginContainer.js
index 8153b4f87..0d0c980dc 100644
--- a/src/screens/login/container/loginContainer.js
+++ b/src/screens/login/container/loginContainer.js
@@ -2,8 +2,8 @@ import React, { PureComponent } from 'react';
import { Alert, Platform } from 'react-native';
import { connect } from 'react-redux';
import { injectIntl } from 'react-intl';
-import AppCenter from 'appcenter';
import Config from 'react-native-config';
+import messaging from '@react-native-firebase/messaging';
// Services and Actions
import { login } from '../../../providers/steem/auth';
@@ -100,7 +100,6 @@ class LoginContainer extends PureComponent {
transfers: 6,
};
const notifyTypes = [];
- const token = await AppCenter.getInstallId();
Object.keys(notificationDetails).map((item) => {
const notificationType = item.replace('Notification', '');
@@ -110,16 +109,20 @@ class LoginContainer extends PureComponent {
}
});
- const data = {
- username,
- token,
- system: Platform.OS,
- allows_notify: Number(notificationSettings),
- notify_types: notifyTypes,
- };
- setPushToken(data).then(() => {
- setPushTokenSaved(true);
- });
+ messaging()
+ .getToken()
+ .then((token) => {
+ const data = {
+ username,
+ token,
+ system: Platform.OS,
+ allows_notify: Number(notificationSettings),
+ notify_types: notifyTypes,
+ };
+ setPushToken(data).then(() => {
+ setPushTokenSaved(true);
+ });
+ });
};
_getAccountsWithUsername = async (username) => {
diff --git a/src/screens/settings/container/settingsContainer.js b/src/screens/settings/container/settingsContainer.js
index 8aea40a58..b611c6682 100644
--- a/src/screens/settings/container/settingsContainer.js
+++ b/src/screens/settings/container/settingsContainer.js
@@ -1,12 +1,11 @@
import React, { Component } from 'react';
import { Platform } from 'react-native';
import { connect } from 'react-redux';
-import AppCenter from 'appcenter';
-import Push from 'appcenter-push';
import { Client } from '@esteemapp/dhive';
import VersionNumber from 'react-native-version-number';
import Config from 'react-native-config';
import { injectIntl } from 'react-intl';
+import messaging from '@react-native-firebase/messaging';
// Realm
import {
@@ -267,7 +266,6 @@ class SettingsContainer extends Component {
notifyTypes.sort();
if (actionType === 'notification') {
- await Push.setEnabled(action);
this._setPushToken(action ? notifyTypes : []);
} else {
this._setPushToken(notifyTypes);
@@ -312,21 +310,23 @@ class SettingsContainer extends Component {
const { isLoggedIn, otherAccounts = [] } = this.props;
if (isLoggedIn) {
- const token = await AppCenter.getInstallId();
-
getExistUser().then((isExistUser) => {
if (isExistUser) {
otherAccounts.forEach((item) => {
const { isNotificationSettingsOpen } = this.props;
- const data = {
- username: item.username,
- token,
- system: Platform.OS,
- allows_notify: Number(isNotificationSettingsOpen),
- notify_types: notifyTypes,
- };
- setPushToken(data);
+ messaging()
+ .getToken()
+ .then((token) => {
+ const data = {
+ username: item.username,
+ token,
+ system: Platform.OS,
+ allows_notify: Number(isNotificationSettingsOpen),
+ notify_types: notifyTypes,
+ };
+ setPushToken(data);
+ });
});
}
});
diff --git a/yarn.lock b/yarn.lock
index 4b4fa161b..b417404ee 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1520,11 +1520,37 @@
resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-5.3.3.tgz#2e627456d83c1d75d4c43ab6cef70fe125b9691d"
integrity sha512-L4BsdIEEuG5rKkVNzjESdJ1wvusn0kflj/FrwctaW+xkLxiFs1+mdBg/mvqqfXvVFuBEphbyXJTFT4aG4Okkow==
+"@react-native-community/push-notification-ios@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/push-notification-ios/-/push-notification-ios-1.2.0.tgz#3353598450a39c42d079603aad2d1c0f9c2c1729"
+ integrity sha512-B5qPb9P/6vvxGGQDePlK/q6NxoZPWSVFtKCQ9jlboP7gNZmf3AAyBhTzrb++s2NSXXogjkGi6vt9df1ipZiawQ==
+ dependencies:
+ invariant "^2.2.4"
+
"@react-native-community/viewpager@^2.0.1":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@react-native-community/viewpager/-/viewpager-2.0.2.tgz#622b190294b1310c4825c98daeaee1c8443f7124"
integrity sha512-CKVhIZdX/Cmb80muog8sKpi5vM8npwFp4tx4Dj1IvTBidZweuO22+VH2rDOj7E0LzdV9IYRJ4FGBwcPBD2qUrQ==
+"@react-native-firebase/app-types@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.yarnpkg.com/@react-native-firebase/app-types/-/app-types-6.7.2.tgz#d2e1530af5702e00578914b41468898c10d3289c"
+ integrity sha512-pIwc6e0ZINw6PJqNVsAxzOVJUDg6au2TdulY+ZOYQ11SPDs5I2n9likoGrElPmJjajT4s9h87uz/6PWP2k9PxQ==
+
+"@react-native-firebase/app@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@react-native-firebase/app/-/app-7.1.0.tgz#df56260b7861b700c5888a3865b217e17536dbff"
+ integrity sha512-C/SCrU/zzlYVUrqFar+a7zQ1qN01I39LREzD098Pl6gPi8ONhd5bda8ZX0Qq7fRwNmSZlQ1j93VLysagt41woA==
+ dependencies:
+ "@react-native-firebase/app-types" "6.7.2"
+ opencollective-postinstall "^2.0.1"
+ superstruct "^0.6.2"
+
+"@react-native-firebase/messaging@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@react-native-firebase/messaging/-/messaging-7.1.0.tgz#49040d84ad021aec6b34caaee7dd790ffb2abc7a"
+ integrity sha512-pl/qUICfK3NoOUdajgSw1Qcl1w7UHyfkwTRjwrRawySGd05p5BEkig1X32D+YHGdB14OPDKn46JxAZuw6a6Lyw==
+
"@react-navigation/core@^3.5.1":
version "3.5.1"
resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.5.1.tgz#7a2339fca3496979305fb3a8ab88c2ca8d8c214d"
@@ -2679,6 +2705,16 @@ cliui@^5.0.0:
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
+clone-deep@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713"
+ integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==
+ dependencies:
+ for-own "^1.0.0"
+ is-plain-object "^2.0.4"
+ kind-of "^6.0.0"
+ shallow-clone "^1.0.0"
+
clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
@@ -4168,11 +4204,23 @@ follow-redirects@1.5.10:
dependencies:
debug "=3.1.0"
-for-in@^1.0.2:
+for-in@^0.1.3:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
+ integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=
+
+for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=
+ dependencies:
+ for-in "^1.0.1"
+
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -5639,6 +5687,11 @@ kind-of@^6.0.0, kind-of@^6.0.2:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+kind-of@^6.0.1:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
+ integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
+
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@@ -6415,6 +6468,14 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
+mixin-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
+ integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=
+ dependencies:
+ for-in "^0.1.3"
+ is-extendable "^0.1.1"
+
mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
@@ -6772,7 +6833,7 @@ open@^6.2.0:
dependencies:
is-wsl "^1.1.0"
-opencollective-postinstall@^2.0.2:
+opencollective-postinstall@^2.0.1, opencollective-postinstall@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89"
integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==
@@ -7559,6 +7620,13 @@ react-native-navigation-bar-color@^1.0.0:
resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-1.0.0.tgz#04ff752a58049af93ceea9ccf266b8d3fbc6514a"
integrity sha512-djBE0zSp+JT65VeUm4UpIpr9DA9SpE9YTLwDAcqkWfB9JI8l3djSx+SmrIYfc7dUs216Y6qo2dr0qR3+M5qbOQ==
+react-native-push-notification@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/react-native-push-notification/-/react-native-push-notification-3.5.1.tgz#438dd6b526903e01659f34b1ba5d9f293ac663a1"
+ integrity sha512-F2h4qlEnKzjtqFhtT3To3rUAFuzmfHrFum55yttb40dE0+gMh1Piu0EyebIseKsin6Ia3830tLK/e1Q1kQMMjA==
+ dependencies:
+ "@react-native-community/push-notification-ios" "^1.2.0"
+
react-native-qrcode-svg@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/react-native-qrcode-svg/-/react-native-qrcode-svg-6.0.3.tgz#27b6a7a1df02c5bf10796fd97e8b55c0044dc0f8"
@@ -8410,6 +8478,15 @@ sha.js@^2.4.0, sha.js@^2.4.8:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+shallow-clone@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571"
+ integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==
+ dependencies:
+ is-extendable "^0.1.1"
+ kind-of "^5.0.0"
+ mixin-object "^2.0.1"
+
shallow-equal@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
@@ -8852,6 +8929,14 @@ sudo-prompt@^9.0.0:
resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0"
integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==
+superstruct@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.2.tgz#c5eb034806a17ff98d036674169ef85e4c7f6a1c"
+ integrity sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig==
+ dependencies:
+ clone-deep "^2.0.1"
+ kind-of "^6.0.1"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"