Maison  >  Questions et réponses  >  le corps du texte

Impossible d'enregistrer l'utilisateur dans la violation immuable d'erreur Firebase : `new NativeEventEmitter()` nécessite un argument non nul. , moteur js : hermès

J'essaie de créer une application créée à l'aide de React Native et j'utilise @react-native-firebase/app": "^17.5.0", "@react-native-firebase/auth": "^ 17.5.0", "@react-native-firebase/firestore": "^17.5.0",

J'exécute l'application en utilisant npx react-native run-ios

Mon ignorance m'a empêché de continuer ce projet et il est resté bloqué après quelques jours alors que j'essayais d'enregistrer un utilisateur dans Firebase en utilisant la logique présentée ci-dessous, une logique de auth.js 文件(其中包含身份验证)和 firebase.js fichier Firebase. C'est impossible pour moi.

J'ai modifié la configuration de ces fichiers plusieurs fois et chaque modification n'a pas pu être ajoutée ici, mais cela a été plusieurs fois.

Mais je n'arrive pas à enregistrer de nouveaux utilisateurs.

J'ai édité la question J'ai édité la question

J'ai ajouté le Podfile sur la base de la suggestion d'un collègue. Je dois aussi dire que j'ai suivi les instructions pour React Native Firebase, mais si j'apporte toutes les modifications suggérées dans AppDelegate.m et Podfile, le projet s'arrête et ne redémarrera pas depuis le terminal ou Xcode.

L'erreur concerne les fichiers suivants :

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

L'application est toujours en cours d'exécution et les erreurs ont changé, mais les erreurs que j'enregistre maintenant sont les suivantes :

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)

Je sais qu'il peut y avoir plusieurs raisons, c'est pourquoi je suis ici car après de nombreuses tentatives et de nombreux changements basés sur d'autres questions similaires trouvées sur Stackoverflow, je ne trouve pas de solution. Peut-être que quelqu'un verra l'erreur que je fais dans mon code ou pourra suggérer la configuration correcte.

Je ne comprends pas si la configuration iOS l'affecte, chaque fois que je lance "pod install" toutes les dépendances sont à nouveau installées et il est écrit :

[!] 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.

Je montre les fichiers et j'espère que vous pourrez me donner quelques idées pour pouvoir corriger cela et continuer,

============ 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粉242126786178 Il y a quelques jours414

répondre à tous(1)je répondrai

  • P粉825079798

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

    Lorsque vous exécutez pod install sans la bibliothèque statique, une erreur sera générée et Firebase ne sera pas réellement installé.

    Désactivez Flipper car Flipper ne fonctionne pas avec les bibliothèques statiques :

    # 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

    Ajoutez les deux contenus suivants ci-dessus 目标“ApuntesDelCampo”内flags = ... :

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

    Assurez-vous également d'avoir ajouté GoogleService-Info.plist à votre projet.

    Maintenant, réexécutez-lepod install et essayez d'installer l'application.

    répondre
    0
  • Annulerrépondre