Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/isabelamoraes/rotina-de-compartilhamento
https://github.com/isabelamoraes/rotina-de-compartilhamento
dynamic-links firebase react react-native react-navigation react-router-dom rnfirebase styled-components vite
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/isabelamoraes/rotina-de-compartilhamento
- Owner: isabelamoraes
- Created: 2022-09-23T01:13:53.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-09-27T01:31:13.000Z (about 2 years ago)
- Last Synced: 2023-03-07T17:11:59.535Z (almost 2 years ago)
- Topics: dynamic-links, firebase, react, react-native, react-navigation, react-router-dom, rnfirebase, styled-components, vite
- Language: TypeScript
- Homepage:
- Size: 18.5 MB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Dynamic Links com Firebase no React Native
Rotina de Compartilhamento #9 - Liven
## š Dynamic Links
O Dynamic link Ć© um recurso que permite definir o comportamento de um link dependendo da plataforma em que ele for acessado, proporcionando uma melhor experiĆŖncia ao usuĆ”rio.
AtravĆ©s dele, podemos definir qual tela do app nativo deverĆ” ser aberta quando o usuĆ”rio acessar o Dynamic Link por um dispositivo iOS ou Android, qual o comportamento caso o usuĆ”rio nĆ£o possua o app instalado e como ele deverĆ” funcionar caso seja aberto em navegador desktop.
## š Projeto
Esse projeto foi desenvolvido com o intuito de explorar a implementaĆ§Ć£o do Dynamic Links com Firebase em aplicaƧƵes React Native, na Rotina de Compartilhamento #9 da Liven.
O projeto consiste em duas aplicaƧƵes: web e mobile. Enquanto essa primeira busca disponibilizar os dynamic links para acesso, essa segunda tem o intuito de ilustrar o comportamento nativo ao clicar sobre esses links.
- **Web**: a aplicaĆ§Ć£o web foi desenvolvida em [React](https://reactjs.org/) e disponibilizada atravĆ©s do recurso Hosting do Firebase.
- **Mobile**: o aplicativo Android e iOS foi desenvolvido utilizando o framework [React Native](https://reactnative.dev/).
## š§ PrĆ©-requisitos
**Criar o projeto no Firebase**
- Configurar web app e [Firebase Hosting](https://firebase.google.com/docs/hosting/).
- Criar Android e iOS app e seguir as instruƧƵes de configuraĆ§Ć£o do SDK.**React Native Firebase**
- Para iniciar com a lib [React Native Firebase](https://rnfirebase.io/) Ć© necessĆ”rio instalar o mĆ³dulo `app` e realizar o setup na aplicaĆ§Ć£o Android e iOS. Em seguida, para configurar o Dynamic Links no seu projeto, Ć© necessĆ”rio prosseguir com a instalaĆ§Ć£o dos mĆ³dulos `analytics` e `dynamic-links`.## š ConfiguraĆ§Ć£o Firebase Console
No menu `Engajamento`, selecionar a opĆ§Ć£o `Dynamic Links` e clicar em `Vamos comeƧar`.
Definir o domĆnio (Ex: `rotinacompartilhamento.page.link`) e prosseguir com as etapas.
Com o domĆnio criado, Ć© hora de comeƧar a criar os dynamic links. Para isso, clique em `Criar link dinĆ¢mico` e complete as etapas abaixo:
- Configurar seu link de URL curto.
- Configurar seu Dynamic Link.
- Definir o comportamento do link para a Apple.
- Definir o comportamento do link para Android.
## š ConfiguraĆ§Ć£o Android
ApĆ³s realizar o setup do React Native Firebase conforme descrito na seĆ§Ć£o **PrĆ©-requisitos**, Ć© necessĆ”rio realizar apenas uma configuraĆ§Ć£o nativa no Android para garantir que o Dynamic Links vĆ” funcionar no seu projeto.
Para isso, acesse o arquivo `AndroidManifest.xml` localizado no diretĆ³rio `[sua-aplicaĆ§Ć£o]/android/app/src/main/` e insira o trecho a seguir:
```xml
...
...
```
Um objeto [Intent](https://developer.android.com/guide/components/intents-filters) carrega as informaƧƵes que o sistema Android usa para determinar o componente que irĆ” iniciar, alĆ©m de informaƧƵes que o componente receptor usa para realizar a aĆ§Ć£o adequadamente. Dito isso, caso o usuĆ”rio tenha o aplicativo instalado, os links de e-mails ou de outras pĆ”ginas que apontem para esse site deverĆ£o abrir o app Android ao invĆ©s da pĆ”gina web.
## š ConfiguraĆ§Ć£o iOS
Antes de comeƧar com as configuraƧƵes nativas, Ć© importante lembrar que Ć© necessĆ”rio adicionar a opĆ§Ć£o **Associated Domain** no certificado de *provisioning profile* do seu aplicativo iOS no [Apple Developer Console](https://developer.apple.com/account/).
Prosseguindo, faƧa as seguintes inserƧƵes no seu `AppDelegate.m`. Essas alteraƧƵes farĆ£o com que o app seja capaz de ouvir os links vindo de outras aplicaƧƵes.
```objective-c
// Adicionar importaĆ§Ć£o no inĆcio do arquivo
#import// Adicionar trecho dentro de `@implementation AppDelegate`, antes do `@end`:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}```
Em seguida, Ʃ necessƔrio adicionar ao arquivo `Info.plist` o prefixo da URL do seu Dynamic Link conforme configurado no Firebase, para que, ao invocar o Dynamic Link, seu app seja capaz de receber os dados e o link.
```xml
FirebaseDynamicLinksCustomDomains
https://rotinacompartilhamento.page.link
```
Para finalizar as configuraƧƵes, abra seu projeto `.xcworkspace` no Xcode, selecione seu projeto em `TARGETS`, clique na aba `Signing and Capabilities`, `+ Capability` e adicione `Associated Domains`. Em seguida, adicione seu Dynamic Link conforme configurado no Firebase em `Domains`:
Em seguida, acesse a tab `Info` e informe a `URL Schemes`:
## š ConfiguraĆ§Ć£o React Native
Realizada as configuraƧƵes nativas no Android e iOS, basta implementar as configuraƧƵes no projeto React Native e enfim, usufruir do uso do Dynamic Links.
Para comeƧar, Ć© necessĆ”rio criar um objeto e definir os prefixos do seu Dynamic Link e as configuraƧƵes de quais telas deverĆ£o ser abertar dependendo do link recebido:
```javascript
...
export const navigationLinking: LinkingOptions = {
prefixes: [
'rotinacompartilhamento://rotinacompartilhamento',
'https://rotinacompartilhamento.page.link',
],
config: {
screens: {
Example1: 'example1', //Rota: 'link'
Example2: 'example2',
},
},
};```
Em seguida, passe esse objeto como parĆ¢metro para a propriedade `linking` do seu `NavigationContainer` do React Navigation:
```javascript
...
...
```
Para finalizar, adicione a seguinte estrutura:
```javascript
const handleDynamicLink = async (
link: FirebaseDynamicLinksTypes.DynamicLink | null,
) => {
const URL = link?.url.split('/__/')[1];if (URL) {
Linking.openURL(`rotinacompartilhamento://rotinacompartilhamento/${URL}`);
}
};useEffect(() => dynamicLinks().onLink(handleDynamicLink), []);
useEffect(() => {
dynamicLinks().getInitialLink().then(handleDynamicLink);
}, []);```
A funĆ§Ć£o `handleDynamicLink` serĆ” responsĆ”vel por lidar com o link recebido e fazer o direcionamento para determinada tela do app. Enquanto isso, os mĆ©todos `onLink` e `getInitialLink` sĆ£o responsĆ”veis por ouvir os eventos em Foreground (app aberto) e Background/Quit (app em segundo plano ou fechado), respectivamente, e chamar a funĆ§Ć£o handleDynamicLink quando um evento for recebido.
## š InstruƧƵes
Para clonar essa aplicaĆ§Ć£o, execute os seguintes comandos:
```bash
# Clonar o repositĆ³rio
$ git clone https://github.com/isabelamoraes/rotina-de-compartilhamento.git```
Para rodar a aplicaĆ§Ć£o web, execute os comandos a seguir:
```bash
# Instalar as dependĆŖncias
$ yarn# Executar a aplicaĆ§Ć£o web
$ yarn dev# Realizar a build
$ yarn build# Fazer o deploy
firebase deploy --only hosting:rotina-de-compartilhamento```
Para rodar a aplicaĆ§Ć£o mobile, execute os seguintes comandos:
```bash
# Instalar as dependĆŖncias
$ yarn# Inicializar a aplicaĆ§Ć£o
yarn start# Executar para Android
yarn android# Executar para iOS
yarn ios```
## š ReferĆŖncias
Esse conteĆŗdo foi criado com base nas documentaƧƵes abaixo:
- [React Native Firebase - Dynamic Links](https://rnfirebase.io/dynamic-links/usage)
- [Firebase - Dynamic Links](https://firebase.google.com/docs/dynamic-links)
- [React Navigation - Deep Linking](https://reactnavigation.org/docs/deep-linking#set-up-with-bare-react-native-projects)