Heim  >  Fragen und Antworten  >  Hauptteil

Benutzer kann nicht in Firebase registriert werden. Fehler: unveränderlicher Verstoß: „new NativeEventEmitter()“ erfordert ein Nicht-Null-Argument. , js-Engine: Hermes

Ich versuche eine mit React Native erstellte App zu erstellen und verwende @react-native-firebase/app": "^17.5.0", "@react-native-firebase/auth": "^ 17.5.0", "@react-native-firebase/firestore": "^17.5.0",

Ich betreibe die App mit npx react-native run-ios

Meine Unwissenheit hat mich daran gehindert, mit diesem Projekt fortzufahren, und es blieb nach ein paar Tagen hängen, als ich versuchte, einen Benutzer in Firebase mit der unten gezeigten Logik zu registrieren, einer auth.js 文件(其中包含身份验证)和 firebase.js Datei-Firebase-Logik. Das ist für mich unmöglich.

Ich habe die Konfiguration dieser Dateien mehrmals geändert und jede Änderung konnte hier nicht hinzugefügt werden, aber das war schon mehrere Male der Fall.

Aber ich schaffe es nicht, neue Benutzer zu registrieren.

Ich habe die Frage bearbeitet Ich habe die Frage bearbeitet

Ich habe das Podfile auf Vorschlag eines Kollegen hinzugefügt. Ich muss auch sagen, dass ich die Anweisungen für React Native Firebase befolgt habe, aber wenn ich alle in AppDelegate.m und Podfile vorgeschlagenen Änderungen vornehme, bricht das Projekt ab und startet nicht erneut über das Terminal oder Xcode.

Der Fehler betrifft die folgenden Dateien:

/node_modules/react-native/Libraries/EventEmitter/NativeEventEmitter.js

Die App läuft noch und die Fehler haben sich geändert, aber die Fehler, die ich jetzt protokolliere, sind wie folgt:

LOG  Running "Cositas enter code here" with {"rootTag":1,"initialProps":{}}
 ERROR  Invariant Violation: `new NativeEventEmitter()` requires a non-null argument., js engine: hermes
 at ?anon_0_ (http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.ApuntesDelCampo:132800:100)
    at next (native)
    at asyncGeneratorStep (http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.ApuntesDelCampo:20867:26)
    at _next (http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.ApuntesDelCampo:20886:29)
    at anonymous (http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.ApuntesDelCampo:20891:14)
    at tryCallTwo (/Users/distiller/react-native/sdks/hermes/build_iphonesimulator/lib/InternalBytecode/InternalBytecode.js:61:9)
    at doResolve (/Users/distiller/react-native/sdks/hermes/build_iphonesimulator/lib/InternalBytecode/InternalBytecode.js:216:25)
    at Promise (/Users/distiller/react-native/sdks/hermes/build_iphonesimulator/lib/InternalBytecode/InternalBytecode.js:82:14)
    at anonymous (http://localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.ApuntesDelCampo:20883:25)
    at apply (native)

Ich weiß, dass es mehrere Gründe geben kann, deshalb bin ich hier, weil ich nach vielen Versuchen und vielen Änderungen, die auf anderen ähnlichen Fragen auf Stackoverflow basieren, keine Lösung finden kann. Vielleicht sieht jemand den Fehler, den ich in meinem Code mache, oder kann die richtige Konfiguration vorschlagen.

Ich verstehe nicht, ob sich die iOS-Konfiguration darauf auswirkt, wenn ich "pod install" ausführe, werden alle Abhängigkeiten erneut installiert und es heißt:

[!] The following Swift pods cannot yet be integrated as static libraries:

    The Swift pod `FirebaseCoreInternal` depends upon `GoogleUtilities`, which does not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set `use_modular_headers!` globally in your Podfile, or specify `:modular_headers => true` for particular dependencies.

Ich zeige die Dateien und hoffe, dass Sie mir einige Ideen geben können, damit ich das korrigieren und fortfahren kann,

============ Podfile =======

require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, min_ios_version_supported
prepare_react_native_project!

# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
#
# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
# ```js
# module.exports = {
#   dependencies: {
#     ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
# ```
flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled

linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
  Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
  use_frameworks! :linkage => linkage.to_sym
end

target 'ApuntesDelCampo' do
  config = use_native_modules!

  # Flags change depending on the env values.
  flags = get_default_flags()

  use_react_native!(
    :path => config[:reactNativePath],
    # Hermes is now enabled by default. Disable by setting this flag to false.
    # Upcoming versions of React Native may rely on get_default_flags(), but
    # we make it explicit here to aid in the React Native upgrade process.
    :hermes_enabled => flags[:hermes_enabled],
    :fabric_enabled => flags[:fabric_enabled],
    # Enables Flipper.
    #
    # Note that if you have use_frameworks! enabled, Flipper will not work and
    # you should disable the next line.
    :flipper_configuration => flipper_config,
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/.."
  )

  target 'ApuntesDelCampoTests' do
    inherit! :complete
    # Pods for testing
  end

  post_install do |installer|
    react_native_post_install(
      installer,
      # Set `mac_catalyst_enabled` to `true` in order to apply patches
      # necessary for Mac Catalyst builds
      :mac_catalyst_enabled => false
    )
    __apply_Xcode_12_5_M1_post_install_workaround(installer)
  end
end

========. RegisterScreen.js ==================

import React, { useState } from 'react';
import { View, Text, TextInput, TouchableOpacity, Alert } from 'react-native';
import { registerUser } from '../../services/auth'

import styles from './AuthStyles/RegisterScreenStyles'

const RegisterScreen = () => {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');
  const [username, setUsername] = useState('');

  const handleRegister = async () => {
    if (email && password && username) {
      const { success, error } = await registerUser(email, password, username);

      if (success) {
        // Registro exitoso
        Alert.alert('Registro exitoso', '¡Usuario registrado correctamente!');
      } else {
        // Error en el registro
        Alert.alert('Error de registro', error);
      }
    } else {
      // Validación de campos vacíos
      Alert.alert('Campos vacíos', 'Por favor, completa todos los campos.');
    }
  }

  return (
    <View style={styles.container}>
      <Text style={styles.title}>Registro</Text>
      <TextInput
        style={styles.input}
        placeholder="Nombre de usuario"
        value={username}
        onChangeText={ setUsername}
      />
      <TextInput
        style={styles.input}
        placeholder="Correo electrónico"
        value={email}
        onChangeText={setEmail}
      />
      <TextInput
        style={styles.input}
        placeholder="Contraseña"
        secureTextEntry
        value={password}
        onChangeText={setPassword}
      />
      <TouchableOpacity style={styles.button} onPress={handleRegister}>
        <Text style={styles.buttonText}>Registrarse</Text>
      </TouchableOpacity>
    </View>
  )
}

export default RegisterScreen;

============. auth.js. =============

import { firebaseFirestore, firebaseAuth } from "./firebase";


// Registro de usuario
export const registerUser = async (email, password, username) => {
  try {
    const { user } = await firebaseAuth.createUserWithEmailAndPassword(email, password);

    // Almacenar el nombre de usuario en Firestore
    await firebaseFirestore.collection('users').doc(user.uid).set({
      username,
    });

    return { success: true, user };
  } catch (error) {
    return { success: false, error: error.message };
  }
};

========. firebase.js. ========

import firebase from '@react-native-firebase/app'
import '@react-native-firebase/firestore'
import '@react-native-firebase/auth'

// Configura Firebase
const firebaseConfig = {
  apiKey: "xxxxx",
  authDomain: "xxxxx",
  projectId: "cxxxxx",
  storageBucket: "xxxx",
  messagingSenderId: "xxxx",
  appId: "xxxxxx"
};

if (!firebase.apps.length) {
  firebase.initializeApp(firebaseConfig)
}

const firebaseFirestore = firebase.firestore();
const firebaseAuth = firebase.auth();

export { firebaseFirestore, firebaseAuth }

P粉242126786P粉242126786229 Tage vor467

Antworte allen(1)Ich werde antworten

  • P粉825079798

    P粉8250797982024-03-27 09:12:43

    当您在没有静态库的情况下运行 pod install 时,它会抛出错误,并且不会实际安装 Firebase。

    禁用 Flipper,因为 Flipper 不适用于静态库:

    # Note that if you have use_frameworks! enabled, Flipper will not work if enabled
    # :flipper_configuration => flipper_config, <-- comment this line
    # An absolute path to your application root

    目标“ApuntesDelCampo”内flags = ...上方添加以下两个内容:

    use_frameworks! :linkage => :static
    
    $RNFirebaseAsStaticFramework = true
    
    # Flags change depending on the env values.
    flags = get_default_flags()

    还要确保您已将 GoogleService-Info.plist 添加到您的项目中。

    现在再次运行pod install,并尝试安装应用程序。

    Antwort
    0
  • StornierenAntwort