react native с firebase разбился без ошибок после добавления сообщений, а затем после удаления осязаемой непрозрачности не работает

#android #firebase #react-native #firebase-in-app-messaging

# #Android #firebase #react-native #firebase-in-app-messaging

Вопрос:

я не новичок в react native, но новичок в firebase. я смог создать приложение на своем Mac и интегрировать auth, и оно работало. У меня была проблема с ключами на моем Mac, поэтому я отдал его на обслуживание, но у меня тот же код на моем компьютере с Windows, и я думаю, что я правильно настроил компьютер, но теперь у меня возникают странные проблемы. Первоначально приложение продолжало сбой без каких-либо ошибок, и через некоторое время, когда я смог выполнить
adb logcat -t ‘некоторое время’

я видел это сообщение в журналах: ——— начало сбоя 12-13 13:51:10.449 20375 20375 E AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 12-13 13:51:10.449 20375 20375 E AndroidRuntime: Процесс: com.vmallapp, PID: 20375 12-13 13:51:10.449 20375 20375 E AndroidRuntime: java.lang.RuntimeException: не удается получить провайдера com.google.firebase.provider.FirebaseInitProvider: com.google.firebase.components.Исключение MissingDependencyException: Неудовлетворенная зависимость для компонента Component<[class com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay]>{2, type=0, deps=[Зависимость{AnInterface=интерфейс com.google.firebase.analytics.connector.AnalyticsConnector, тип=обязательно, прямой=true}, Зависимость{AnInterface=class com.google.firebase.FirebaseApp, type=required, direct=true}, Зависимость{AnInterface=class com.google.firebase.inappmessaging.FirebaseInAppMessaging, type=обязательно, direct=true}]}: интерфейс com.google.firebase.analytics.connector.AnalyticsConnector

Поэтому я удалил @react-native-firebase / in-app-messaging с помощью yarn remove. Теперь приложение запускается в симуляторе, но ни одно из нажатий touchable opacity не срабатывает : (. это довольно простой материал, и я убежден, что это как-то связано с интеграцией firebase, но я не могу понять, что происходит. Мой код, в котором теперь осязаемая непрозрачность не работает, выглядит следующим образом (работает анонимная аутентификация):

 import React, { useState, useEffect } from 'react';
import profileImage from '../assets/my_profile.png';
import auth from '@react-native-firebase/auth';
import { View, Text, Button, TouchableWithoutFeedback,Dimensions, FlatList, StyleSheet,Image,TouchableOpacity } from 'react-native';

import firestore from '@react-native-firebase/firestore';

export function HomeScreen({ route, navigation }) {

  const [flatListItems,setflatListItems] = useState([{name:'My Profile', Image: profileImage, key: '0'}]);
  const [initializing, setInitializing] = useState(true);
  const [user, setUser] = useState();
  const [refreshMenu, setrefreshMenu] = useState(false);
  const [refreshingMenuItems, setrefreshingMenuItems] = useState(false);
  const getMenuItemsFromDB = async  ()=>{
    setrefreshingMenuItems(true);
    console.log(`made db call to update menu for userid ${user.uid}`);
    try{
    var querySnapshot =  await firestore().collection('Users').where('userId', '==', user.uid).get();
    console.log(querySnapshot.size);
    const storeList = [{name:'My Profile', Image: profileImage, key: '0'}];

    querySnapshot.forEach(documentSnapshot => {
      var counter = 1;
      console.log('snapshot ID: ', documentSnapshot.id, documentSnapshot.data());
      documentSnapshot.data().stores.forEach( x=>{
        var imageUri = `url need to be added`
        console.log(imageUri);
        storeList.push({name:x.mainDisplay, Image: profileImage, key: (counter  ).toString(), imageURL : imageUri});
      }
      );
    });
    setflatListItems(storeList);
    if(refreshMenu)
      setrefreshMenu(false);
    else 
      setrefreshMenu(true);


  
    
    }
    catch(error){
      console.log(error);
    }
    setrefreshingMenuItems(false);

  }
  function onAuthStateChanged(user) {
    setUser(user);
    if (initializing) setInitializing(false);
  }

  const handleLogin = () =>{
    console.log('login clicked');
    console.log(user);
    navigation.navigate('Login');
  }
    
    const onItemClick = (iconnumber) => {
 
        if(iconnumber=='0')
          {
          console.log(iconnumber);
          //const userinfo = {userid:user.uid,isAnonymous:user.isAnonymous};
          //console.log(access_token);
          navigation.navigate('Profile');
          }

    }

    useEffect(() => {
      console.log('i got triggered');
      const subscriber = auth().onAuthStateChanged(onAuthStateChanged);

      auth()
        .signInAnonymously()
        .then(() => {
          console.log('User signed in anonymously');
          console.log(`user info is ${JSON.stringify(user)}`);
        })
        .catch(error => {
          if (error.code === 'auth/operation-not-allowed') {
            console.log('Enable anonymous in your firebase console.');
          }

          console.error(error);
        });
      return subscriber; // unsubscribe on unmount
    }, []);
  
    if (initializing) return null;

    return (

        <View style={styles.rootLayoutContainer}>
        {(user == null || user.isAnonymous) amp;amp; 
        <TouchableOpacity onPress={() =>handleLogin(user)}>
          <Text>Login please please</Text>
        </TouchableOpacity>
        }
        {!user.isAnonymous amp;amp; 
    
        <Text>welcome {user.email}</Text>
       
        }

        <FlatList
        data={flatListItems}
        extraData = {refreshMenu}
        refreshing={refreshingMenuItems}
        contentContainerStyle={{paddingTop: 25, flex:0.5}}
        onRefresh={getMenuItemsFromDB}
        numColumns={2}
        renderItem={({item})=>(
        <TouchableWithoutFeedback onPress={() => onItemClick( item.key)} >
        <View style={styles.containerOfList} >
          {!item.imageURL amp;amp; 
          <Image  style={styles.listItemImage} source={item.Image}></Image>
        }
        {item.imageURL amp;amp; 
          <Image  style={styles.listItemImage} source={{uri:item.imageURL}}></Image>
        }
        <Text style={styles.textContainer}  >
        {item.name}
        </Text>
        </View>
         </TouchableWithoutFeedback>
        )}
        />
        <TouchableOpacity onPress={() => console.log(' i got pressed')}>
          <Text>Refresh Menu</Text>
        </TouchableOpacity>
        
              </View>
        
            );

}
 

/
мне интересно, что происходит? на данный момент ни одно из событий onpress не запускается. Любые указатели будут очень оценены.

Ответ №1:

итак, еще несколько проблем, и у меня, по какой-то причине, не было времени, чтобы эмулятор полностью отключился. это не соответствовало времени хоста. я попытался изменить настройку, чтобы использовать сетевое время и включать и выключать эмулятор, но это ничего не дало. Затем я также полностью перезапустил свой компьютер, который, похоже, устранил проблему. и теперь время ADB совпадает с моим системным временем. я также добавил пакет обмена сообщениями и буду играть с ним и сейчас. просто добавив его, он еще ничего не разбил. разместив его здесь, поэтому, если кто-нибудь еще увидит эти проблемы, у них может появиться идея по устранению неполадок.