#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 совпадает с моим системным временем. я также добавил пакет обмена сообщениями и буду играть с ним и сейчас. просто добавив его, он еще ничего не разбил. разместив его здесь, поэтому, если кто-нибудь еще увидит эти проблемы, у них может появиться идея по устранению неполадок.