Closed sankparatkar closed 5 months ago
@Salakar @mikehardy can you please take a look and advise? this is the only thing preventing our migration to react-native-firebase
If you are using .abb
for the Android release format, your app is actually unpacked then re-packed (into lots of little slices with different parts for different CPU architectures and languages etc) by the Google Play servers then re-signed with a key they have custody of. You'll need to obtain the SHA for this from the Google Play console then add it to firebase.
Have you done that?
Hi @mikehardy,
We are currently making the changes in the development builds. This is an apk generated after building using EAS (expo application service). This is where we are facing issues. The same SHA256 is also provided to EAS. Once the it works out in development we can move to prod and release in .aab format to play store.
With apologies I'm not going to be able to troubleshoot a project specific configuration problem. If you can demonstrate an actual error in this repo that will result in a change to the code here, I can look into it.
@mikehardy but the project configuration is in line with the documentation, They why is the error coming? Also, can you please also tag someone who can advise?
@sankparatkar if I knew, I would certainly tell you, I do love helping people fix problems. But in my own app and lots of other apps from users of this repo, it can work --> this implies it is something specific to your project. I must focus my time on problems that will result in changes to this repo, not problems that are project-specific and related to configuration unfortunately. You might investigate whether you have all the backend cloud APIs set up correctly to allow your project id to do verification etc for the associated project keys
As for who else to approach, tagging here will have no effect. The firebase crew performs official support on stackoverflow if you write up an issue well and use the appropriate firebase tags
I'm having the same problem.
Your SHA-1 & SHA-256 fingerprints have probably been changed, Open the Google Play Console then select the app you want and then you can find the Play App Signing page under Release > Setup > App Integrity, then add your new fingerprints to your firebase under Project settings.
@wieringen add both SHA-1, SHA-256 that solved my issue
Previously we only had SHA-256 added to the project. While it was working well with other functionalities, react native firebase only worked when I added SHA-1 along with SHA-256 for some reason.
please solve and tell the solution, same here
same here
Issue
We are migrating from firebase Web SDK to react native firebase. The phone auth was working well with the Web SDK, however after migrating to react native firebase we are facing this really frustrating issue.
Here is the error message :
Error: [auth/missing-client-identifier] This request is missing a valid app identifier, meaning that Play Integrity checks, and reCAPTCHA checks were unsuccessful. Please try again, or check the logcat for more details
Point of error :
We are using expo (bare workflow) and this issue is occurring while debugging in the development build as well as in the preview APK. We already had a SHA256 associated with our firebase project, the same key is also uploaded to EAS ( Expo Application Services). We faced no issues with phone login earlier.
keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
) Still the issue persists.Here are the errors from logcat
It seems like it has to do with the SHA keys, but not sure or understanding how exactly. Please advise.
Project Files
Javascript
Click To Expand
#### `package.json`: ```json { "scripts": { "start": "expo start --dev-client", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web", "eject": "expo eject", "postinstall": "patch-package" }, "dependencies": { "@expo/vector-icons": "^13.0.0", "@notifee/react-native": "^5.3.0", "@react-native-async-storage/async-storage": "1.18.2", "@react-native-community/netinfo": "9.3.10", "@react-native-community/slider": "4.4.2", "@react-native-firebase/analytics": "^19.2.2", "@react-native-firebase/app": "^19.2.2", "@react-native-firebase/auth": "^19.2.2", "@react-native-firebase/crashlytics": "^19.2.2", "@react-native-firebase/firestore": "^19.2.2", "@react-native-firebase/storage": "^19.2.2", "@react-native-google-signin/google-signin": "^11.0.1", "@react-navigation/drawer": "^6.1.8", "@react-navigation/material-bottom-tabs": "^6.1.1", "@react-navigation/native": "^6.1.9", "@react-navigation/native-stack": "^6.9.17", "@react-navigation/stack": "^6.1.1", "@sentry/react-native": "5.10.0", "@shopify/flash-list": "1.4.3", "@zegocloud/react-native-callkeep": "^4.3.9", "@zegocloud/zego-uikit-prebuilt-call-rn": "^4.4.2", "@zegocloud/zego-uikit-rn": "2.7.2", "axios": "^0.25.0", "clevertap-react-native": "^2.2.1", "deprecated-react-native-prop-types": "^4.0.0", "expo": "^49.0.0", "expo-app-loading": "~2.1.1", "expo-application": "~5.3.0", "expo-av": "~13.4.1", "expo-camera": "~13.4.4", "expo-checkbox": "~2.4.0", "expo-cli": "^6.3.9", "expo-constants": "~14.4.2", "expo-dev-client": "~2.4.13", "expo-device": "~5.4.0", "expo-font": "~11.4.0", "expo-image-picker": "~14.3.2", "expo-keep-awake": "~12.3.0", "expo-linear-gradient": "~12.3.0", "expo-linking": "~5.0.2", "expo-notifications": "~0.20.1", "expo-permissions": "~14.2.1", "expo-random": "~13.2.0", "expo-splash-screen": "~0.20.5", "expo-status-bar": "~1.6.0", "expo-web-browser": "~12.3.2", "lottie-react-native": "5.1.6", "moment": "^2.29.1", "patch-package": "^6.5.1", "phonepesdk": "^0.3.18", "postinstall-postinstall": "^2.1.0", "react": "18.2.0", "react-delegate-component": "^1.0.0", "react-dom": "18.2.0", "react-native": "0.72.10", "react-native-circular-progress-indicator": "^4.4.2", "react-native-device-info": "^10.6.0", "react-native-dropdown-picker": "^5.4.6", "react-native-encrypted-storage": "^4.0.3", "react-native-extended-stylesheet": "^0.12.0", "react-native-fbsdk-next": "^11.0.0", "react-native-gesture-handler": "~2.12.0", "react-native-google-mobile-ads": "^11.1.1", "react-native-keep-awake": "^4.0.0", "react-native-modalize": "^2.0.13", "react-native-obfuscating-transformer": "^1.0.0", "react-native-option-menu": "^1.1.3", "react-native-paper": "^4.11.2", "react-native-permissions": "^3.8.0", "react-native-phonepe-pg": "https://phonepe.mycloudrepo.io/public/repositories/phonepe-mobile-react-native-sdk/releases/v2/react-native-phonepe-pg.tgz", "react-native-push-notification": "^8.1.1", "react-native-ratings": "^8.1.0", "react-native-raw-bottom-sheet": "^2.2.0", "react-native-razorpay": "^2.3.0", "react-native-reanimated": "~3.3.0", "react-native-safe-area-context": "4.6.3", "react-native-screens": "~3.22.0", "react-native-searchable-dropdown": "^1.1.3", "react-native-sound": "^0.11.2", "react-native-star-rating": "^1.1.0", "react-native-svg": "13.9.0", "react-native-switch": "^1.5.1", "react-native-typing-animation": "^0.1.7", "react-native-version-check": "^3.4.2", "react-native-web": "~0.19.6", "react-native-webview": "13.2.2", "react-redux": "^7.2.6", "redux": "^4.1.2", "redux-persist": "^6.0.0", "redux-thunk": "^2.4.1", "save": "^2.9.0", "sentry-expo": "~7.1.0", "sp-react-native-in-app-updates": "^1.3.1", "victory-native": "^36.5.3", "zego-express-engine-reactnative": "3.2.0", "zego-zim-react-native": "2.10.0", "zego-zpns-react-native": "2.5.0-alpha" }, "devDependencies": { "@babel/core": "^7.20.0", "@expo/webpack-config": "^19.0.0" }, "private": true, "name": "App-Name", "version": "1.0.0" } ``` **Expo Plugins added** ``` "plugins": [ [ "@react-native-firebase/app", "@react-native-firebase/auth", "@react-native-firebase/crashlytics"] ] ``` #### `firebase.json` for react-native-firebase v6: ```json N/A ```
iOS
Click To Expand
#### `ios/Podfile`: - [x] I'm not using Pods - [] 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? - [x] my application is an AndroidX application? - [x] I am using `android/gradle.settings` `jetifier=true` for Android compatibility? - [x] I am using the NPM package `jetifier` for react-native compatibility? #### `android/build.gradle`: ```groovy import org.apache.tools.ant.taskdefs.condition.Os // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { buildToolsVersion = findProperty('android.buildToolsVersion') ?: '31.0.0' minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21') compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '33') targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '33') kotlinVersion = '1.8.10' frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0' if (System.properties['os.arch'] == 'aarch64') { // For M1 Users we need to use the NDK 24 which added support for aarch64 ndkVersion = '24.0.8215888' } else { // Otherwise we default to the side-by-side NDK version from AGP. ndkVersion = '21.4.7075529' } } repositories { google() mavenCentral() } dependencies { classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' classpath 'com.google.gms:google-services:4.3.3' classpath('com.android.tools.build:gradle:7.1.1') classpath('com.facebook.react:react-native-gradle-plugin') classpath('de.undercouch:gradle-download-task:5.0.1') // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } 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()) allprojects { configurations.all { resolutionStrategy { // force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION } } repositories { mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) } maven { // Android JSC is installed from npm url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist')) } google() mavenCentral { // We don't want to fetch react-native from Maven Central as there are // older versions over there. content { excludeGroup 'com.facebook.react' } } maven { url 'https://www.jitpack.io' } maven { url "https://phonepe.mycloudrepo.io/public/repositories/phonepe-intentsdk-android" } } } // @generated begin expo-camera-import - expo prebuild (DO NOT MODIFY) sync-f244f4f3d8bf7229102e8f992b525b8602c74770 def expoCameraMavenPath = new File(["node", "--print", "require.resolve('expo-camera/package.json')"].execute(null, rootDir).text.trim(), "../android/maven") allprojects { repositories { maven { url(expoCameraMavenPath) } } } // @generated end expo-camera-import ``` #### `android/app/build.gradle`: ```groovy apply plugin: "com.android.application" import com.android.build.OutputFile import org.apache.tools.ant.taskdefs.condition.Os def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() project.ext.react = [ entryFile: ["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android"].execute(null, rootDir).text.trim(), enableHermes: (findProperty('expo.jsEngine') ?: "jsc") == "hermes", cliPath: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/cli.js", hermesCommand: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc", composeSourceMapsPath: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/compose-source-maps.js", ] def enableSeparateBuildPerCPUArchitecture = false def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() def jscFlavor = 'org.webkit:android-jsc:+' def enableHermes = project.ext.react.get("enableHermes", false); def reactNativeArchitectures() { def value = project.getProperties().get("reactNativeArchitectures") return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] } android { ndkVersion rootProject.ext.ndkVersion compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { applicationId 'package.name' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 12 versionName "2.0.8" buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() if (isNewArchitectureEnabled()) { externalNativeBuild { ndkBuild { arguments "APP_PLATFORM=android-21", "APP_STL=c++_shared", "NDK_TOOLCHAIN_VERSION=clang", "GENERATED_SRC_DIR=$buildDir/generated/source", "PROJECT_BUILD_DIR=$buildDir", "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build" cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1" cppFlags "-std=c++17" // Make sure this target name is the same you specify inside the // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. targets "app_appmodules" // Fix for windows limit on number of character in file paths and in command lines if (Os.isFamily(Os.FAMILY_WINDOWS)) { arguments "NDK_APP_SHORT_COMMANDS=true" } } } if (!enableSeparateBuildPerCPUArchitecture) { ndk { abiFilters (*reactNativeArchitectures()) } } } } if (isNewArchitectureEnabled()) { externalNativeBuild { ndkBuild { path "$projectDir/src/main/jni/Android.mk" } } def reactAndroidProjectDir = project(':ReactAndroid').projectDir def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) { dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck") from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") into("$buildDir/react-ndk/exported") } def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) { dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck") from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") into("$buildDir/react-ndk/exported") } afterEvaluate { preDebugBuild.dependsOn(packageReactNdkDebugLibs) preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) configureNdkBuildRelease.dependsOn(preReleaseBuild) configureNdkBuildDebug.dependsOn(preDebugBuild) reactNativeArchitectures().each { architecture -> tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure { dependsOn("preDebugBuild") } tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure { dependsOn("preReleaseBuild") } } } } splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK include (*reactNativeArchitectures()) } } signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } } buildTypes { debug { signingConfig signingConfigs.debug } release { signingConfig signingConfigs.debug minifyEnabled true 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 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 = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } } } } ["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> // Split option: 'foo,bar' -> ['foo', 'bar'] def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); // Trim all elements in place. for (i in 0.. 0) {
println "android.packagingOptions.$prop += $options ($options.length)"
// Ex: android.packagingOptions.pickFirsts += '**/SCCS/**'
options.each {
android.packagingOptions[prop] += it
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
implementation 'com.google.firebase:firebase-messaging:21.1.0'
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:29.3.1')
implementation 'com.google.firebase:firebase-analytics:17.3.0'
implementation 'com.clevertap.android:clevertap-android-sdk:5.0.0'
implementation 'com.google.firebase:firebase-messaging:23.0.6'
implementation 'androidx.core:core:1.4.0'
implementation 'androidx.fragment:fragment:1.3.6'
//MANDATORY for App Inbox
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.viewpager:viewpager:1.0.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'com.github.bumptech.glide:glide:4.12.0'
//For CleverTap Android SDK v3.6.4 and above add the following -
implementation 'com.android.installreferrer:installreferrer:2.2'
//Optional ExoPlayer Libraries for Audio/Video Inbox Messages. Audio/Video messages will be dropped without these dependencies
implementation 'com.google.android.exoplayer:exoplayer:2.17.1'
implementation 'com.google.android.exoplayer:exoplayer-hls:2.17.1'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.17.1'
implementation 'com.google.android.play:integrity:1.3.0'
def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
def frescoVersion = rootProject.ext.frescoVersion
// If your app supports Android versions before Ice Cream Sandwich (API level 14)
if (isGifEnabled || isWebpEnabled) {
implementation "com.facebook.fresco:fresco:${frescoVersion}"
implementation "com.facebook.fresco:imagepipeline-okhttp3:${frescoVersion}"
}
if (isGifEnabled) {
// For animated gif support
implementation "com.facebook.fresco:animated-gif:${frescoVersion}"
}
if (isWebpEnabled) {
// For webp support
implementation "com.facebook.fresco:webpsupport:${frescoVersion}"
if (isWebpAnimatedEnabled) {
// Animated webp support
implementation "com.facebook.fresco:animated-webp:${frescoVersion}"
}
}
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
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'
}
if (enableHermes) {
debugImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute(null, rootDir).text.trim(), "../android/hermes-debug.aar"))
releaseImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute(null, rootDir).text.trim(), "../android/hermes-release.aar"))
} else {
implementation jscFlavor
}
}
if (isNewArchitectureEnabled()) {
// If new architecture is enabled, we let you build RN from source
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
// This will be applied to all the imported transtitive dependency.
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("com.facebook.react:react-native"))
.using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source")
}
}
}
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.implementation
into 'libs'
}
apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
applyNativeModulesAppBuildGradle(project)
def isNewArchitectureEnabled() {
// To opt-in for the New Architecture, you can either:
// - Set `newArchEnabled` to true inside the `gradle.properties` file
// - Invoke gradle with `-newArchEnabled=true`
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: "com.facebook.react"
```
#### `android/settings.gradle`:
```groovy
rootProject.name = 'app-name'
apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");
useExpoModules()
apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
applyNativeModulesSettingsGradle(settings)
include ':app'
includeBuild('../node_modules/@react-native/gradle-plugin')
if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
include(":ReactAndroid")
project(":ReactAndroid").projectDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../ReactAndroid");
}
```
#### `MainApplication.java`:
```java
package com.app.appname;
import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import androidx.annotation.NonNull;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.soloader.SoLoader;
import com.app.appname.newarchitecture.MainApplicationReactNativeHost;
import expo.modules.ApplicationLifecycleDispatcher;
import expo.modules.ReactNativeHostWrapper;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import com.clevertap.android.sdk.ActivityLifecycleCallback;
import com.clevertap.react.CleverTapPackage;
import com.clevertap.android.sdk.CleverTapAPI;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper(
this,
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 packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
});
private final ReactNativeHost mNewArchitectureNativeHost =
new ReactNativeHostWrapper(this, new MainApplicationReactNativeHost(this));
@Override
public ReactNativeHost getReactNativeHost() {
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
return mNewArchitectureNativeHost;
} else {
return mReactNativeHost;
}
}
@Override
public void onCreate() {
ActivityLifecycleCallback.register(this);
super.onCreate();
// If you opted-in for the New Architecture, we enable the TurboModule system
ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
ApplicationLifecycleDispatcher.onApplicationCreate(this);
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
}
/**
* 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.app.appname.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:** ``` System: OS: Windows 11 10.0.22621 CPU: (8) x64 Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz Memory: 6.28 GB / 15.70 GB Binaries: Node: version: 16.15.1 path: C:\Program Files\nodejs\node.EXE Yarn: Not Found npm: version: 8.11.0 path: C:\Program Files\nodejs\npm.CMD Watchman: Not Found SDKs: Android SDK: Not Found Windows SDK: AllowAllTrustedApps: Disabled IDEs: Android Studio: AI-222.4459.24.2221.9862592 Visual Studio: - 17.4.33205.214 (Visual Studio Community 2022) Languages: Java: Not Found Ruby: Not Found npmPackages: "@react-native-community/cli": Not Found react: installed: 18.2.0 wanted: 18.2.0 react-native: installed: 0.72.10 wanted: 0.72.10 react-native-windows: Not Found npmGlobalPackages: "*react-native*": Not Found Android: hermesEnabled: true newArchEnabled: false iOS: hermesEnabled: Not found newArchEnabled: Not found ``` - **Platform that you're experiencing the issue on**: - [ ] iOS - [ ] Android - [ ] **iOS** but have not tested behavior on Android - [x] **Android** but have not tested behavior on iOS - [ ] Both - **`react-native-firebase` version you're using that has this issue:** - `19.2.2` - **`Firebase` module(s) you're using that has the issue:** - Auth - **Are you using `TypeScript`?** - N