invertase / react-native-firebase

🔥 A well-tested feature-rich modular Firebase implementation for React Native. Supports both iOS & Android platforms for all Firebase services.
https://rnfirebase.io
Other
11.61k stars 2.19k forks source link

[🐛] Bug Report Title - java.lang.RuntimeException: Could not invoke RNFBFirestoreDocumentModule.documentOnSnapshot only android #7782

Closed Doipah closed 3 months ago

Doipah commented 3 months ago

Issue

Describe your issue here


Project Files

Javascript

Click To Expand

#### `package.json`: ```json { "name": "Hello", "version": "0.0.1", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "start": "react-native start", "test": "jest", "lint": "eslint .", "postinstall": "patch-package" }, "dependencies": { "@e-mine/react-native-html-text": "^0.3.3", "@invertase/react-native-apple-authentication": "^2.2.2", "@react-native-community/async-storage": "^1.12.1", "@react-native-community/blur": "^4.3.2", "@react-native-community/cameraroll": "^4.1.2", "@react-native-community/clipboard": "^1.5.1", "@react-native-community/geolocation": "^3.0.5", "@react-native-community/netinfo": "^5.9.7", "@react-native-community/push-notification-ios": "^1.11.0", "@react-native-firebase/analytics": "13.1.1", "@react-native-firebase/app": "^13.0.1", "@react-native-firebase/auth": "13.0.1", "@react-native-firebase/database": "^13.0.1", "@react-native-firebase/firestore": "13.0.1", "@react-native-firebase/messaging": "^13.0.1", "@react-native-firebase/storage": "^13.0.1", "@react-native-google-signin/google-signin": "^9.0.2", "@react-native-masked-view/masked-view": "^0.2.9", "@react-navigation/bottom-tabs": "^6.2.0", "@react-navigation/native": "^6.0.12", "@react-navigation/native-stack": "^6.5.0", "@react-navigation/stack": "^6.1.1", "@twotalltotems/react-native-otp-input": "^1.3.11", "@valdio/react-native-scrollable-tabview": "^0.8.12", "geolib": "^3.3.3", "jwt-decode": "^3.1.2", "lottie-react-native": "^5.0.1", "moment": "^2.29.4", "omise-react-native": "^0.1.0", "patch-package": "^7.0.2", "popup-ui": "^1.2.2", "react": "17.0.2", "react-apple-signin-auth": "^1.0.9", "react-native": "0.68.3", "react-native-android-open-settings": "^1.3.0", "react-native-animated-loader": "^1.0.0", "react-native-app-intro-slider": "^4.0.4", "react-native-background-timer": "^2.4.1", "react-native-biometric-id": "^1.0.6", "react-native-biometrics": "^3.0.1", "react-native-blob-util": "^0.19.0", "react-native-camera": "^4.2.1", "react-native-canvas": "^0.1.39", "react-native-checkbox-tree": "^1.3.0", "react-native-confirmation-code-field": "^7.2.0", "react-native-credit-card-input": "^0.4.1", "react-native-device-info": "^10.6.0", "react-native-dynamic-island-master": "^0.2.1", "react-native-elements": "^3.4.2", "react-native-encrypted-storage": "^4.0.3", "react-native-error-boundary": "^1.1.3", "react-native-fast-image": "^8.6.3", "react-native-fingerprint-scanner": "^6.0.0", "react-native-fs": "^2.20.0", "react-native-geocoding": "^0.5.0", "react-native-gesture-handler": "^2.9.0", "react-native-gifted-chat": "^1.1.1", "react-native-gradient-loading": "^1.0.0", "react-native-i18n": "^2.0.15", "react-native-image-picker": "^5.0.0", "react-native-inappbrowser-reborn": "^3.7.0", "react-native-linear-gradient": "^2.7.3", "react-native-live-activity": "^0.1.0", "react-native-loading-spinner-overlay": "^3.0.1", "react-native-localize": "^2.2.5", "react-native-map-link": "^2.11.0", "react-native-maps": "^1.4.0", "react-native-maps-directions": "^1.9.0", "react-native-mask-loader": "^0.0.3", "react-native-modalize": "^2.1.1", "react-native-otp-verify": "^1.1.5", "react-native-parallax-scroll-view": "^0.21.3", "react-native-parallax-scrollview": "^3.0.0", "react-native-parsed-text": "^0.0.22", "react-native-permissions": "3.3.1", "react-native-pin-view": "^3.0.3", "react-native-push-notification": "^8.1.1", "react-native-qr-decode-image-camera": "^1.1.3", "react-native-qrcode-svg": "^6.2.0", "react-native-raw-bottom-sheet": "^2.2.0", "react-native-reanimated": "2.5.0", "react-native-render-html": "^6.3.4", "react-native-responsive-fontsize": "^0.5.1", "react-native-responsive-screen": "^1.4.2", "react-native-safe-area-context": "^4.7.2", "react-native-screens": "^3.25.0", "react-native-scroll-bottom-sheet": "^0.7.0", "react-native-scrollable-tab-view": "^1.0.0", "react-native-share": "^8.2.1", "react-native-signature-canvas": "^4.7.2", "react-native-size-matters": "^0.4.0", "react-native-size-scaling": "^0.5.1", "react-native-skeleton-placeholder": "^5.2.4", "react-native-snap-carousel": "^3.9.1", "react-native-splash-screen": "^3.2.0", "react-native-svg": "^12.1.1", "react-native-svg-charts": "^5.4.0", "react-native-svg-uri": "^1.2.3", "react-native-swipe-list-view": "^3.2.9", "react-native-toast-notifications": "^3.4.0", "react-native-utils-navigation-bar": "^2.0.4", "react-native-utils-scale": "^2.6.0", "react-native-vector-icons": "^9.2.0", "react-native-video": "^5.2.1", "react-native-video-player": "^0.14.0", "react-native-view-shot": "^3.1.2", "react-native-webview": "^13.3.1", "react-redux": "^8.0.5", "recoil": "^0.7.6", "redux": "^4.2.1", "redux-persist": "^6.0.0", "redux-persist-keychain-storage": "^0.1.1", "redux-thunk": "^2.4.2", "svg-parser": "^2.0.4", "thai-id-validator": "^1.1.3", "toggle-switch-react-native": "^3.3.0" }, "devDependencies": { "@babel/core": "^7.16.5", "@babel/runtime": "^7.16.5", "@react-native-community/eslint-config": "^3.0.1", "babel-jest": "^27.4.5", "eslint": "^8.4.1", "jest": "^27.4.5", "metro-react-native-babel-preset": "^0.66.2", "react-test-renderer": "17.0.2" }, "jest": { "preset": "react-native" } } ``` #### `firebase.json` for react-native-firebase v6: ```json # N/A ```

iOS

Click To Expand

#### `ios/Podfile`: - [ ] I'm not using Pods - [x] I'm using Pods and my Podfile looks like: ```ruby # N/A ``` #### `AppDelegate.m`: ```objc // N/A ```


Android

Click To Expand

#### Have you converted to AndroidX? - [ ] my application is an AndroidX application? - [ Y ] I am using `android/gradle.settings` `jetifier=true` for Android compatibility? - [ Y ] I am using the NPM package `jetifier` for react-native compatibility? #### `android/build.gradle`: ```groovy // Top-level build file where you can add configuration options common to all sub-projects/modules. def REACT_NATIVE_VERSION = new File(['node', '--print',"JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"].execute(null, rootDir).text.trim()) buildscript { ext { kotlinVersion = "1.6.0" buildToolsVersion = "30.0.2" minSdkVersion = 23 compileSdkVersion = 33 targetSdkVersion = 33 ndkVersion = "21.4.7075529" androidXAnnotation = "1.2.0" androidXBrowser = "1.3.0" agp_version = '4.2.1' agp_version1 = '3.4.2' agp_version2 = '4.2.2' agp_version3 = '8.2.0' agp_version4 = agp_version2 } repositories { google() mavenCentral() } dependencies { classpath("com.android.tools.build:gradle:$agp_version2") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath 'com.google.gms:google-services:4.3.15' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } allprojects { repositories { mavenCentral() mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } google() maven { url 'https://www.jitpack.io' } configurations.all { resolutionStrategy { // force 'com.facebook.react:react-native:0.66.4' //select Version you used force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION } } exclusiveContent { filter { includeGroup "com.facebook.react" } forRepository { maven { url "$rootDir/../node_modules/react-native/android" } } } } } ``` #### `android/app/build.gradle`: ```groovy apply plugin: "com.android.application" apply plugin: 'com.google.gms.google-services' import com.android.build.OutputFile /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets * and bundleReleaseJsAndAssets). * These basically call `react-native bundle` with the correct arguments during the Android build * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the * bundle directly from the development server. Below you can see all the possible configurations * and their defaults. If you decide to add a configuration block, make sure to add it before the * `apply from: "../../node_modules/react-native/react.gradle"` line. * * project.ext.react = [ * // the name of the generated asset file containing your JS bundle * bundleAssetName: "index.android.bundle", * * // the entry file for bundle generation. If none specified and * // "index.android.js" exists, it will be used. Otherwise "index.js" is * // default. Can be overridden with ENTRY_FILE environment variable. * entryFile: "index.android.js", * * // https://reactnative.dev/docs/performance#enable-the-ram-format * bundleCommand: "ram-bundle", * * // whether to bundle JS and assets in debug mode * bundleInDebug: false, * * // whether to bundle JS and assets in release mode * bundleInRelease: true, * * // whether to bundle JS and assets in another build variant (if configured). * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants * // The configuration property can be in the following formats * // 'bundleIn${productFlavor}${buildType}' * // 'bundleIn${buildType}' * // bundleInFreeDebug: true, * // bundleInPaidRelease: true, * // bundleInBeta: true, * * // whether to disable dev mode in custom build variants (by default only disabled in release) * // for example: to disable dev mode in the staging build type (if configured) * devDisabledInStaging: true, * // The configuration property can be in the following formats * // 'devDisabledIn${productFlavor}${buildType}' * // 'devDisabledIn${buildType}' * * // the root of your project, i.e. where "package.json" lives * root: "../../", * * // where to put the JS bundle asset in debug mode * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", * * // where to put the JS bundle asset in release mode * jsBundleDirRelease: "$buildDir/intermediates/assets/release", * * // where to put drawable resources / React Native assets, e.g. the ones you use via * // require('./image.png')), in debug mode * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", * * // where to put drawable resources / React Native assets, e.g. the ones you use via * // require('./image.png')), in release mode * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", * * // by default the gradle tasks are skipped if none of the JS files or assets change; this means * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to * // date; if you have any other folders that you want to ignore for performance reasons (gradle * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ * // for example, you might want to remove it from here. * inputExcludes: ["android/**", "ios/**"], * * // override which node gets called and with what additional arguments * nodeExecutableAndArgs: ["node"], * * // supply additional arguments to the packager * extraPackagerArgs: [] * ] */ project.ext.react = [ enableHermes: false, // clean and rebuild if changing ] apply from: "../../node_modules/react-native/react.gradle" /** * Set this to true to create two separate APKs instead of one: * - An APK that only works on ARM devices * - An APK that only works on x86 devices * The advantage is the size of the APK is reduced by about 4MB. * Upload all the APKs to the Play Store and people will download * the correct one based on the CPU architecture of their device. */ def enableSeparateBuildPerCPUArchitecture = false /** * Run Proguard to shrink the Java bytecode in release builds. */ def enableProguardInReleaseBuilds = false /** * The preferred build flavor of JavaScriptCore. * * For example, to use the international variant, you can use: * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ def jscFlavor = 'org.webkit:android-jsc:+' /** * Whether to enable the Hermes VM. * * This should be set on project.ext.react and mirrored here. If it is not set * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode * and the benefits of using Hermes will therefore be sharply reduced. */ def enableHermes = project.ext.react.get("enableHermes", false); /** * Architectures to build native code for in debug. */ def nativeArchitectures = project.getProperties().get("reactNativeDebugArchitectures") android { ndkVersion rootProject.ext.ndkVersion compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { applicationId "com.helloreactproject" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" missingDimensionStrategy 'react-native-camera', 'general' } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } } signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } } buildTypes { debug { signingConfig signingConfigs.debug if (nativeArchitectures) { ndk { abiFilters nativeArchitectures.split(',') } } } release { // Caution! In production, you need to generate your own keystore file. // see https://reactnative.dev/docs/signed-apk-android. signingConfig signingConfigs.debug minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } // applicationVariants are e.g. debug, release applicationVariants.all { variant -> variant.outputs.each { output -> // For each separate APK per architecture, set a unique version code as described here: // https://developer.android.com/studio/build/configure-apk-splits.html // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc. def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = defaultConfig.versionCode * 1000 + versionCodes.get(abi) } } } lintOptions { checkReleaseBuilds false } configurations { implementation.exclude module:'proto-google-common-protos' implementation.exclude module:'protolite-well-known-types' implementation.exclude module:'guava' implementation.exclude module:'protobuf-lite' } } dependencies { // implementation platform('com.google.firebase:firebase-bom:30.1.0') // implementation project(path: ":@react-native-firebase_app") // implementation 'com.google.firebase:firebase-common:21.0.0' // implementation 'androidx.appcompat:appcompat:1.3.1' // implementation project(':react-native-linear-gradient') // implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0")) // implementation project(':react-native-splash-screen') implementation fileTree(dir: "libs", include: ["*.jar"]) //noinspection GradleDynamicVersion implementation ("com.facebook.react:react-native") version { strictly "0.66.4" } // implementation "com.facebook.react:react-native:0.66.4" // From node_modules implementation project(':react-native-camera') implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" implementation 'com.google.android.gms:play-services-auth:12.0.1' implementation 'com.google.firebase:firebase-messaging:12.0.1' debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { exclude group:'com.facebook.fbjni' } debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { exclude group:'com.facebook.flipper' exclude group:'com.squareup.okhttp3', module:'okhttp' } debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { exclude group:'com.facebook.flipper' } implementation(project(':react-native-camera')){ exclude group: 'com.google.android.gms' } if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } } // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { from configurations.implementation into 'libs' } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) ``` #### `android/settings.gradle`: ```groovy rootProject.name = 'HelloReactproject' include ':react-native-inappbrowser-reborn' project(':react-native-inappbrowser-reborn').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-inappbrowser-reborn/android') include ':react-native-svg' project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') // include ':react-native-linear-gradient' // project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') include ':react-native-camera' project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') include ':react-native-splash-screen' project(':react-native-splash-screen').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-splash-screen/android') include ':react-native-svg' project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' //includeBuild('../node_modules/react-native-gradle-plugin') //include ':@react-native-firebase_app' //project(':@react-native-firebase_app').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-firebase/app/android') ``` #### `MainApplication.java`: ```java package com.helloreactproject; import android.app.Application; import android.content.Context; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; import com.proyecto26.inappbrowser.RNInAppBrowserPackage; import com.horcrux.svg.SvgPackage; import com.BV.LinearGradient.LinearGradientPackage; import com.BV.LinearGradient.LinearGradientPackage; import com.BV.LinearGradient.LinearGradientPackage; import com.BV.LinearGradient.LinearGradientPackage; import org.devio.rn.splashscreen.SplashScreenReactPackage; import com.horcrux.svg.SvgPackage; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.soloader.SoLoader; import java.lang.reflect.InvocationTargetException; import java.util.List; import cl.json.BuildConfig; //import org.reactnative.camera.RNCameraPackage; public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List packages = new PackageList(this).getPackages(); // Packages that cannot be autolinked yet can be added manually here, for example: // packages.add(new MyReactNativePackage()); // return Arrays.asList( // new MainReactPackage(), // new RNInAppBrowserPackage(), new SvgPackage(); // new LinearGradientPackage(), // new LinearGradientPackage(), // new LinearGradientPackage(), // new LinearGradientPackage(), // new SplashScreenReactPackage() //here // ); // new RNCameraPackage(), return packages; } @Override protected String getJSMainModuleName() { return "index"; } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); } /** * Loads Flipper in React Native templates. Call this in the onCreate method with something like * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); * * @param context * @param reactInstanceManager */ private static void initializeFlipper( Context context, ReactInstanceManager reactInstanceManager) { if (BuildConfig.DEBUG) { try { /* We use reflection here to pick up the class that initializes Flipper, since Flipper library is not available in release mode */ Class aClass = Class.forName("com.helloreactproject.ReactNativeFlipper"); aClass .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) .invoke(null, context, reactInstanceManager); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } ``` #### `AndroidManifest.xml`: ```xml ```


Environment

Click To Expand

**`react-native info` output:** ``` OUTPUT GOES HERE ``` - **Platform that you're experiencing the issue on**: - [ ] iOS - [ ] Android - [ ] **iOS** but have not tested behavior on Android - [ ] **Android** but have not tested behavior on iOS - [ ] Both - **`react-native-firebase` version you're using that has this issue:** - `e.g. 5.4.3` - **`Firebase` module(s) you're using that has the issue:** - `e.g. Instance ID` - **Are you using `TypeScript`?** - `Y/N` & `VERSION`


Doipah commented 3 months ago

![Uploading 438209284_1073170090447730_5646405213209295594_n.jpg…]()