Conforme a demanda por comunicação em tempo real cresce, os desenvolvedores procuram maneiras fáceis de adicionar canais de comunicação confiáveis ​​aos aplicativos móveis. Neste tutorial, aprenderemos como construir aplicativos de bate-papo móvel para iOS e Android no React Native usando react-native-gifted-chat , uma IU de bate-papo projetada para capacitar os desenvolvedores de aplicativos a criar aplicativos de bate-papo entre plataformas.

Para acompanhar este tutorial, você precisará:

Familiaridade com CSS, HTML e Javascript ES6 Node.js e Watchman instalados em sua máquina de desenvolvimento Simulador de iOS ou Android Emulator para teste Um editor de código instalado em sua máquina de desenvolvimento Uma compreensão básica de React e React Native

Vamos começar!

react-native-gifted-chat props

Vamos dar uma olhada em alguns dos adereços integrados que usaremos para criar nosso aplicativo:

messages (array): exibe o texto das mensagens (string): o tipo de texto de entrada. O padrão é indefinido isTyping (bool): controla o estado do indicador de digitação. O padrão é falso timeFormat (string): determina o formato da hora. O padrão é LT dateFormat (string): determina o formato da data. O padrão é ll espaço reservado (texto): o espaço reservado para um campo de texto vazio. O padrão é Digite uma mensagem… usuário (objeto): as credenciais do usuário que está enviando a mensagem, ou seja, {_id, nome, avatar} messageIdGenerator (função): gera um id para cada nova mensagem. O padrão é UUID V4

Você pode explorar outros adereços na documentação .

Instalando react-native-gifted-chat

Vamos começar configurando um novo aplicativo React Native. Abra seu terminal, navegue até seu diretório de trabalho e execute o comando abaixo para inicializar um novo aplicativo React Native:

npx react-native init GiftedChatApp

Quando a configuração estiver concluída, navegue até o diretório GiftedChatApp e execute o comando abaixo para instalar as dependências necessárias:

cd GiftedChatApp && npm install @ react-navigation/native @ react-navigation/stack react-native-gifted-chat react-native-reanimated react-nativo-gestual-manipulador react-nativo-screens react-native-safe-area-context @ react-native-community/masked-view

O comando acima instalará o React Navigation, react-native-gifted-chat e as outras dependências necessárias em seu projeto. Se você configurou tudo corretamente, seu aplicativo deve ser semelhante à captura de tela abaixo:

Construindo a tela de login

Antes de começarmos a construir a tela de login, vamos atualize nosso código para fazer o App.js permitir a navegação na tela. Abra o App.js, copie e cole o código abaixo:

/** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow strict-local */import React from’react’; import {StyleSheet,} from’react-native’; import {createStackNavigator} de’@ react-navigation/stack’import {NavigationContainer} de’@ react-navigation/native’; importar LoginScreen de’./screens/Login’; const Stack=createStackNavigator (); const App=()=> {return ( ); }; const styles=StyleSheet.create ({}) exportar aplicativo padrão;

Vamos instalar uma dependência final. React Native Elements é um kit de ferramentas de interface do usuário que permite criar facilmente ícones e elementos de formulário. Para instalar o React Native Elements, execute o código abaixo em seu terminal:

npm install react-native-elements

Em seguida, navegue até o diretório do seu projeto, crie uma nova pasta chamada telas, crie um novo arquivo chamado Login. js, copie e cole o código abaixo em Login.js:

import React, {useState} from’react’; import {View, StyleSheet} from’react-native’import {Input, Button} from’react-native-elements’; importar ícone de’react-native-vector-icons/FontAwesome’; const Login=()=> {const [email, setEmail]=useState (”); const [senha, setPassword]=useState (”); return ( setEmail (text)}/> setPassword (text)} secureTextEntry/> )} const styles=StyleSheet.create ({container: {flex: 1, alignItems:’center’, padding: 10, marginTop: 100,}, botão: {width: 370, marginTop: 10}}); exportar Login padrão;

No bloco de código acima, importamos o gancho useState (), criamos dois estados para armazenar os campos de e-mail e senha, criamos os campos de entrada de login usando React Native Elements e, finalmente, adicionamos estilos.

Agora , execute npx react-native run-ios e seu aplicativo deve ser semelhante à imagem abaixo:

Construindo a tela de registro

Agora, vamos construir uma tela de registro para adicionar novos usuários ao nosso aplicativo. Navegue até a pasta de telas, crie um novo arquivo chamado Register.js, copie e cole o código abaixo:

import React, {useState} from’react’; import {View, StyleSheet} from’react-native’import {Input, Button} from’react-native-elements’; const Register=()=> {const [name, setName]=useState (”); const [email, setEmail]=useState (”); const [senha, setPassword]=useState (”); const [avatar, setAvatar]=useState (”); return ( setName (text)}/> setEmail (text)}/> setPassword (text)} secureTextEntry/> setAvatar (text)}/> )} const styles=StyleSheet.create ({container: {flex: 1, alignItems:’center’, padding: 10, marginTop: 100,}, botão: {width: 370, marginTop: 10}}) export default Register;

Configurando o Firebase para React Native

Agora que você concluiu a criação das telas de login e registro, vamos adicionar o Firebase ao nosso aplicativo para autenticar usuários.

Instale o Firebase executando o código abaixo:

npm install–save @ react-native-firebase/app

Agora, vá para o site do Firebase e crie um novo projeto chamado Gifted Chat App:

A seguir, adicionaremos um aplicativo da web ao projeto Firebase que acabamos de criar. Crie um novo arquivo chamado firebase.js no diretório raiz do projeto. Copie as credenciais firebaseConfig da tela abaixo:

Substitua as credenciais atualmente em firebaseConfig pelos detalhes exclusivos do seu projeto:

import * as firebase from’firebase’; import’firebase/auth’; import’firebase/firestore’; var firebaseConfig={apiKey:”your_api_key”, authDomain:”your_auth_domain”, projectId:”your_project_id”, storageBucket:”your_storage_bucket”, messagingSenderId:”your_meddage_sender_id”, appId:”your_app_id}; deixe o app; if (firebase.apps.length===0) {app=firebase.initializeApp (firebaseConfig); } else {app=firebase.app (); } const db=app.firestore (); const auth=firebase.auth (); exportar {db, auth};

Autenticação de um usuário com Firebase

Vamos habilitar a autenticação do usuário por meio do Firebase usando e-mail e senha. Clique em autenticação no menu da barra lateral do console do Firebase e selecione E-mail/senha. Em seguida, selecione ativar e salvar :

Agora que a instalação e a configuração do Firebase foram concluídas, vamos atualizar o arquivo Register.js para autenticar um novo usuário. Copie o código abaixo e coloque-o acima da função de retorno:

//… const register=()=> {auth.createUserWithEmailAndPassword (email, senha).then ((userCredential)=> {//Conectado var user=userCredential.user;//… user.updateProfile ({displayName: name, photoUrl: avatar? avatar:”https://gravatar.com/avatar/94d45dbdba988afacf30d916e7aaad69?s=200&d=mp&r=x”,} ).catch ((erro)=> {alert (error.message)})}).catch ((error)=> {var errorCode=error.code; var errorMessage=error.message;//.. alert (errorMessage );}); }//…

Primeiro, importamos o objeto auth do arquivo firebase.js que criamos anteriormente. Em seguida, criamos uma função de registro e passamos o e-mail e a senha do novo usuário para o método signInWithEmailAndPassword. Por fim, atualizamos as credenciais do usuário com nome e avatar.

A seguir, passaremos a função de registro para o botão de registro com o manipulador onPress:

Agora, você pode registrar um novo usuário do seu aplicativo e listá-lo no console do Firebase:

Construindo a tela de bate-papo

A seguir, construiremos a tela de bate-papo, onde redirecionaremos os usuários após um login bem-sucedido.

Crie um novo arquivo chamado Chat.js no diretório de telas. Para criar um aplicativo de chat básico, copie e cole o código abaixo no arquivo:

import React, {useEffect, useCallback, useState, useLayoutEffect} from’react’; import {View, Text, StyleSheet, TouchableOpacity} de’react-native’; importar {Avatar} de’react-native-elements’; importar {auth} de’../firebase’; import {GiftedChat} de’react-native-gifted-chat’; const Chat=({navegação})=> {const [mensagens, setMessages]=useState ([]); const signOut=()=> {auth.signOut (). then (()=> {//Terminar sessão com sucesso. navigation.replace (“Login”);}). catch ((error)=> {//Ocorreu um erro.}); } useLayoutEffect (()=> {navigation.setOptions ({headerLeft: ()=> ( ), headerRight: ()=> ( logout )})}, [navegação]); useEffect (()=> {setMessages ([{_id: 1, text:’Hello developer’, createdAt: new Date (), user: {_id: 2, name:’React Native’, avatar:’https://placeimg.com/140/140/any’,},},])}, []) const onSend=useCallback ((messages=[])=> {setMessages (previousMessages=> GiftedChat.append (previousMessages, messages)) }, []) return ( onSend (messages)} user={{_id: auth?.currentUser?.email, name: auth?.currentUser ?.displayName, avatar: auth?.currentUser?.photoURL}}/>); } const styles=StyleSheet.create ({}); exportar bate-papo padrão;

Com o objeto de autenticação do Firebase, criamos o estado das mensagens e uma função para lidar com o logout de um usuário. Em seguida, criamos um efeito de navegação básico envolvendo o cabeçalho nav com um useLayoutEffect.

Com o gancho useEffect, criamos uma mensagem fictícia, que montamos no componente GiftedChat. A proposta do usuário no componente GiftedChat se refere ao usuário que está conectado no momento, que neste caso é você.

Agora, seu aplicativo deve ser semelhante à captura de tela abaixo:

Atualmente, as mensagens em nosso aplicativo de bate-papo não são armazenadas em nenhum lugar. Para armazenar mensagens no firestore, modificaremos a função onSend:

const onSend=useCallback ((messages=[])=> {setMessages (previousMessages=> GiftedChat.append (previousMessages, messages)) const {_id, createdAt, text, user,}=messages [0] db.collection (‘chats’). add ({_id, createdAt, text, user})}, []);

Para recuperar mensagens antigas do firestore, faremos uma chamada para o banco de dados usando useLayoutEffect. Copie e cole o código abaixo da função onSend para carregar mensagens antigas na tela de bate-papo:

useLayoutEffect (()=> {const unsubscribe=db.collection (‘chats’). OrderBy (‘createdAt’,’desc’).onSnapshot (snapshot=> setMessages (snapshot.docs.map (doc=> ({_id: doc.data ()._ id, createdAt: doc.data (). createdAt.toDate (), texto: doc.data ().text, user: doc.data (). user,}))));

Conclusão

Agora, você sabe como construir um aplicativo de chat padrão com compatibilidade multiplataforma usando React Native e Firebase. Nosso aplicativo nos permite bater papo entre vários dispositivos com um número ilimitado de usuários.

react-native-gifted-chat é uma ótima ferramenta para implementar chat no React Native, ajudando você a melhorar a comunicação em seu aplicativo. Você pode ler mais sobre react-native-gifted-chat e Autenticação do Firebase nos documentos oficiais.