Integrar com React Native CLI
No desenvolvimento de aplicaçÔes mĂłveis, muitas vezes surge a necessidade de exibir conteĂșdo da web dentro da aplicação. Para isso, existem diversas opçÔes, entre as quais se destacam a utilização de Custom Tabs (para Android) e Safari View Controller (para iOS). Essas tecnologias permitem que pĂĄginas da web sejam abertas em um navegador nativo incorporado ĂĄ aplicação, proporcionando uma experiĂȘncia de navegação mais suave e consistente aos usuĂĄrios.
Nesta etapa iremos instalar e configurar as dependĂȘncias necessĂĄrias para implementar o Safari View Controller em seu projeto desenvolvido em React Native.
Uso de InAppBrowser
Client-Side
Com o React Native CLI, recomendamos o uso do React-Native-InAppBrowser, uma dependĂȘncia altamente flexĂvel que oferece uma solução abrangente para integrar um navegador web dentro da sua aplicação React Native. Ao considerar o uso do React-Native-InAppBrowser-Reborn, os seguintes aspectos foram levados em consideração:
- Ă uma dependĂȘncia que permite oferecer uma experiĂȘncia de navegação web integrada e fluĂda dentro da aplicação.
- Possui uma ampla variedade de funçÔes personalizĂĄveis para se adaptar Ă s necessidades especĂficas da aplicação.
- MantĂ©m os usuĂĄrios dentro do contexto da aplicação, aumentando a retenção e a coerĂȘncia da experiĂȘncia.
Para instalĂĄ-la, execute o seguinte comando no seu terminal.
npm install react-native-inappbrowser-reborn --save
yarn add react-native-inappbrowser-reborn
Em seguida, execute o seguinte comando para instalar a dependĂȘncia.
plain
cd ios && pod install && cd ..
Implementação do React-Native-Inappbrowser
Client-Side
Para implementar a dependĂȘncia React-Native-Inappbrowser, siga o exemplo que mostramos abaixo.
JavaScript
import {
Button,
Linking
} from 'react-native';
import InAppBrowser from 'react-native-inappbrowser-reborn';
const ButtonCustomTabs = () => {
const openUrl = async (url) => {
if (await InAppBrowser.isAvailable()) {
InAppBrowser.open(url, {
// iOS Properties
dismissButtonStyle: 'cancel',
preferredBarTintColor: '#453AA4',
preferredControlTintColor: 'white',
readerMode: false,
animated: true,
modalEnabled: true,
// Android Properties
showTitle: true,
toolbarColor: '#6200EE',
secondaryToolbarColor: 'black',
enableUrlBarHiding: true,
enableDefaultShare: true,
forceCloseOnRedirection: false, // Animation
animations: {
startEnter: 'slide_in_right',
startExit: 'slide_out_left',
endEnter: 'slide_in_left',
endExit: 'slide_out_right',
},
});
} else {
Linking.openURL(url);
}
};
return ( < Button title = "Press Me"
onPress = {
() =>
openUrl('https://url-to-open.com')
}
/> );
};
export default ButtonCustomTabs;
h2
Client-Side
Deep Links, tambĂ©m conhecidos como links diretos, sĂŁo uma forma poderosa de permitir a navegação direta para telas ou seçÔes especĂficas de uma aplicação mĂłvel.
Criar um Deep Link
A partir do nosso checkout, Ă© possĂvel configurar Deep Links para retornar ao sua aplicação, seja clicando em um link "Voltar" ou automaticamente apĂłs concluir um fluxo de pagamento bem-sucedido, redirecionando-o de volta ao sua aplicação.
Para isso, devemos adicionar as propriedades back_urls
e auto_return
ao criar a preferĂȘncia de pagamento, conforme necessĂĄrio.
Para saber mais, vocĂȘ pode acessar a documentação sobre URLs de retorno.
Configuração da aplicação para gerenciar o Deep Link
Client-Side
Para receber e gerenciar o Deep Link, vocĂȘ deve configurar no seu projeto React Native o esquema (scheme) e o caminho (path) que compĂ”em os Deep Links que vocĂȘ recebeu para redirecionar para alguma parte da sua aplicação. Para fazer isso, no Xcode, vĂĄ para as informaçÔes do seu projeto e adicione um novo "URL Types".
Insira o identificador da sua aplicação e os Esquemas de URL do Deep Link.
Isso gerarĂĄ o seguinte cĂłdigo no arquivo ios/appname/Info.plist:
info.plist
<key>CFBundleURLTypes</key>
<array>
<dict> <key>CFBundleURLSchemes
</key>
<array>
<string>myapp</string>
<string>com.test.TestExpoBrowser</string>
</array>
</dict>
</array>
Adicione o seguinte cĂłdigo ao arquivo ios/appname/AppDelegate.mm
AppDelegate.mm
// iOS 9.x or newer
#import < React / RCTLinkingManager.h >
-(BOOL) application: (UIApplication * ) application
openURL: (NSURL * ) url options: (NSDictionary < UIApplicationOpenURLOptionsKey, id > * ) options {
return [RCTLinkingManager application: application openURL: url options: options];
}
Recepção e gerenciamento de Deep Link
Client-Side
Por fim, veremos como podemos configurar nossa aplicação React Native para receber e gerenciar Deep Links. Isso serĂĄ resolvido usando a dependĂȘncia react-native-inappbrowser.
No caso do iOS Ă© necessĂĄrio fechar o Safari View Controller manualmente. Para fazer isso, vocĂȘ precisarĂĄ ouvir o evento de alteração de URL do componente que abre a janela ou o ponto de entrada da aplicação e, em seguida, chamar o mĂ©todo para fechar o Safari View Controller.
Uso do react-native-inappbrowser-reborn
Siga o exemplo abaixo para fechar o Safari View Controller manualmente usando react-native-inappbrowser-reborn.
JavaScript
import {
useEffect
} from 'react';
import React from 'react';
import MainStack from './navigation/MainStack';
import {
Linking
} from 'react-native';
import InAppBrowser from 'react-native-inappbrowser-reborn';
import * as RootNavigation from './RootNavigation';
function App(): JSX.Element {
useEffect(() => {
Linking.addEventListener('url', event => {
const {
url
} = event;
if (url !== null && url.includes('myapp://')) {
InAppBrowser.close();
RootNavigation.navigate('Congrats');
}
});
}, []);
return <MainStack / > ;
}
export default App;