From 8407b2ed91a82896f815a0a65d1b29e2502c4c99 Mon Sep 17 00:00:00 2001 From: Mustafa Buyukcelebi Date: Sun, 7 Jun 2020 18:12:04 +0300 Subject: [PATCH 1/3] Changed appcenter push with firebase push --- android/app/build.gradle | 3 +- android/app/src/main/AndroidManifest.xml | 4 +- android/build.gradle | 2 +- ios/GoogleService-Info.plist | 38 ++++ ios/Podfile | 1 + ios/Podfile.lock | 144 +++++++++++- ios/eSteem.xcodeproj/project.pbxproj | 25 +- .../UserInterfaceState.xcuserstate | Bin 97025 -> 99304 bytes ios/eSteem/AppDelegate.m | 2 + package.json | 4 + .../upvote/container/upvoteContainer.js | 4 +- src/index.js | 1 + .../container/applicationContainer.js | 213 ++++++++++-------- src/screens/login/container/loginContainer.js | 27 ++- .../settings/container/settingsContainer.js | 26 +-- yarn.lock | 89 +++++++- 16 files changed, 455 insertions(+), 128 deletions(-) create mode 100644 ios/GoogleService-Info.plist 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/GoogleService-Info.plist b/ios/GoogleService-Info.plist new file mode 100644 index 000000000..04658f82a --- /dev/null +++ b/ios/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 211285790917-rtsrd251botepo2b9q0vjsd5bsp200o0.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.211285790917-rtsrd251botepo2b9q0vjsd5bsp200o0 + ANDROID_CLIENT_ID + 211285790917-nc7qrrdtmev9shdcc5hip6p3rfkbpupj.apps.googleusercontent.com + API_KEY + AIzaSyAWCJZkg2v3H9BBCgZREZG-c4MWDJm-MV8 + GCM_SENDER_ID + 211285790917 + PLIST_VERSION + 1 + BUNDLE_ID + app.esteem.mobile.ios + PROJECT_ID + esteem-ded08 + STORAGE_BUCKET + esteem-ded08.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:211285790917:ios:9e05a5a121d6eba53760ac + DATABASE_URL + https://esteem-ded08.firebaseio.com + + \ No newline at end of file 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 c879d731b7d5eedafef90ddcf261b99dd78f247c..9b623942f999382153927d271066e2af81079926 100644 GIT binary patch literal 99304 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 z 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%0A6DR6Nn*>1l;~cbK01PJ#9RQ8E>?s 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 xpz(F77Pe-&6b32QVX{tj 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 H&p!VH)M))@ 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" From 9727d8dc71942608911f2445c7bf9cb1576ec49a Mon Sep 17 00:00:00 2001 From: Mustafa Buyukcelebi Date: Wed, 17 Jun 2020 13:21:28 +0300 Subject: [PATCH 2/3] Delete GoogleService-Info.plist --- ios/GoogleService-Info.plist | 38 ------------------------------------ 1 file changed, 38 deletions(-) delete mode 100644 ios/GoogleService-Info.plist diff --git a/ios/GoogleService-Info.plist b/ios/GoogleService-Info.plist deleted file mode 100644 index 04658f82a..000000000 --- a/ios/GoogleService-Info.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CLIENT_ID - 211285790917-rtsrd251botepo2b9q0vjsd5bsp200o0.apps.googleusercontent.com - REVERSED_CLIENT_ID - com.googleusercontent.apps.211285790917-rtsrd251botepo2b9q0vjsd5bsp200o0 - ANDROID_CLIENT_ID - 211285790917-nc7qrrdtmev9shdcc5hip6p3rfkbpupj.apps.googleusercontent.com - API_KEY - AIzaSyAWCJZkg2v3H9BBCgZREZG-c4MWDJm-MV8 - GCM_SENDER_ID - 211285790917 - PLIST_VERSION - 1 - BUNDLE_ID - app.esteem.mobile.ios - PROJECT_ID - esteem-ded08 - STORAGE_BUCKET - esteem-ded08.appspot.com - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:211285790917:ios:9e05a5a121d6eba53760ac - DATABASE_URL - https://esteem-ded08.firebaseio.com - - \ No newline at end of file From f0807d349fb716d192feea546b71630f9e09ad0e Mon Sep 17 00:00:00 2001 From: feruzm Date: Thu, 16 Jul 2020 11:35:15 +0300 Subject: [PATCH 3/3] add plist and json into prebuild --- appcenter-pre-build.sh | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/appcenter-pre-build.sh b/appcenter-pre-build.sh index 49a51930b..ce448dba1 100644 --- a/appcenter-pre-build.sh +++ b/appcenter-pre-build.sh @@ -2,13 +2,15 @@ # Creates an .env from ENV variables for use with react-native-config GOOGLE_JSON_FILE=$APPCENTER_SOURCE_DIRECTORY/android/app/google-services.json +GOOGLE_PLIST_FILE=$APPCENTER_SOURCE_DIRECTORY/ios/GoogleService-Info.plist + printf "%s\n\n" $APPCENTER_SOURCE_DIRECTORY if [ -e "$GOOGLE_JSON_FILE" ] then echo "Updating Google Json" - echo "$GOOGLE_JSON" > $GOOGLE_JSON_FILE + echo "$GOOGLE_JSON" | base64 --decode > $GOOGLE_JSON_FILE sed -i -e 's/\\"/'\"'/g' $GOOGLE_JSON_FILE echo "File content:" @@ -16,7 +18,7 @@ then else echo "Creating and Updating Google Json" touch $GOOGLE_JSON_FILE - echo "$GOOGLE_JSON" > $GOOGLE_JSON_FILE + echo "$GOOGLE_JSON" | base64 --decode > $GOOGLE_JSON_FILE sed -i -e 's/\\"/'\"'/g' $GOOGLE_JSON_FILE echo "File content:" @@ -27,6 +29,28 @@ printf "google-services json file:\n" cat $GOOGLE_JSON_FILE +if [ -e "$GOOGLE_PLIST_FILE" ] +then + echo "Updating Google Json" + echo "$GOOGLE_PLIST" | base64 --decode > $GOOGLE_PLIST_FILE + sed -i -e 's/\\"/'\"'/g' $GOOGLE_PLIST_FILE + + echo "File content:" + cat $GOOGLE_PLIST_FILE +else + echo "Creating and Updating Google Plist" + touch $GOOGLE_PLIST_FILE + echo "$GOOGLE_PLIST" | base64 --decode > $GOOGLE_PLIST_FILE + sed -i -e 's/\\"/'\"'/g' $GOOGLE_PLIST_FILE + + echo "File content:" + cat $GOOGLE_PLIST_FILE +fi + +printf "google-services plist file:\n" + +cat $GOOGLE_PLIST_FILE + printf "Old .env file:\n" cat .env printf "Started script:\n"