Configurazione di React Native
Scarica i file di integrazione React Native da https://github.com/Crowdhandler/ch-react-native-integration/releases/download/1.0.0/ch-react-native-integration.zip e aggiungi la cartella ch-react-native-integration al tuo progetto
In questo esempio useremo CrowdHandler per proteggere determinati prodotti in un'app di e-commerce. La "sala d'attesa" si attiverà per i prodotti selezionati quando l'utente avvierà la navigazione.
1. Configurare il CrowdHandler#
Importa CrowdHandlerProvider nel livello principale della tua app.
App.js
import { CrowdHandlerProvider } from './ch-react-native-integration';
Crea un oggetto all'interno della tua app per gestire gli eventi.
Questi eventi vengono generati da CrowdHandler per consentire di reagire allo stato.
Sono richiesti 2 listener di eventi.
onWait() - Viene chiamato quando CrowdHandler rileva che un utente deve essere reindirizzato alla schermata della sala d'attesa
onRedirect() - Viene chiamato quando CrowdHandler rileva che un utente deve essere reindirizzato alla schermata che stai proteggendo.
Se lo desideri, puoi utilizzare altri due listener di eventi: onRequestStart() e onRequestEnd().
Vengono richiamate prima e dopo l'invio della richiesta a CrowdHandler e sono utili per mostrare all'utente che l'operazione è in corso.
App.js
export default function App() {
const CHEvents = {
navigation: null, // holds the navigation stack so CrowdHandler can redirect the correct screens
onWait: function (ch_response) { // required
launchWaitingRoomScreen(ch_response);
},
onRedirect: function (ch_response) { // required
redirectToScreen(ch_response);
},
onRequestStart: function () {}, //optional
onRequestEnd: function () {} // optional
};
...
e creare funzioni per gestire gli eventi.
Qui stiamo impostando il nome della schermata della sala d'attesa su "CHWaitingRoom".
Assicurati che questo nome corrisponda a quello della schermata presente nella tua pila di navigazione.
Il ch_response restituito dal onWait La funzione contiene una proprietà denominata referer. Lo utilizziamo per stabilire se lo stack di navigazione debba sostituire la cronologia. Se il reindirizzamento proviene dalla sala d'attesa, non vogliamo che l'utente torni alla sala d'attesa quando fa clic sul pulsante "Indietro".
App.js
const launchWaitingRoomScreen = (ch_response) => {
ch_response.navigation.navigate('CHWaitingRoom', { ...ch_response.screen_config });
}
const redirectToScreen = (ch_response) => {
if(ch_response.referer === 'waiting_room') {
ch_response.navigation.replace(ch_response.screen_config.redirect, ch_response.screen_config);
} else {
ch_response.navigation.navigate(ch_response.screen_config.redirect, ch_response.screen_config);
}
}
Avvolgi la tua app con il componente CrowdHandlerProvider passando come prop l'oggetto evento creato in precedenza, CHEvents, e la tua chiave API pubblica. Facoltativamente, puoi aggiungere un valore per timeout in millisecondi. Questo parametro indica a CrowdHandler di reindirizzare alla schermata protetta in caso di timeout dell'API o di richiesta lenta. Se non viene impostato, il valore predefinito è 3000 ms (ovvero 3 secondi)
App.js
<CrowdHandlerProvider
timeout={3000}
chEvents={CHEvents}
apiKey={"04b39378b6abc3d4ee870824371646a9d1e157b1a7720821add4c260108ebd48"}>
<NavigationStack/>
</CrowdHandlerProvider>
2. Aggiungi il CrowdHandler WebView allo stack di navigazione.
Importa il componente CHWebView nel punto in cui stai creando il tuo stack di navigazione
NavigationStack.js
import {CHWebView} from './ch-react-native-integration';
CHWebView è un componente che restituisce un componente WebView e richiede react-native-webview come dipendenza.
Per installare react-native-webview, eseguire il comando
yarn add react-native-webview
oppure
npm install --save react-native-webview
Maggiori informazioni su react-native-webview sono disponibili qui
https://github.com/react-native-webview/react-native-webview/blob/master/docs/Getting-Started.md
Nello stack di navigazione dovrai inserire una schermata dedicata alla “Sala d’attesa”. Imposta la proprietà “name” sullo stesso valore che hai impostato nel <span>launchWaitingRoomScreen</span> Nella funzione sopra riportata, l'abbiamo impostata su CHWaitingRoom.
Importa il componente CHWebView e imposta la proprietà "component" della schermata sul componente CHWebView.
This is the screen that the user will see if they are required to wait so its important that the name of the screen matches the name you specified in the method called by the onWait event in App.js. i.e. <Stack.Screen name="CHWaitingRoom" component={CHWebView} />
NavigationStack.js
...
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen}/>
<Stack.Screen name="Details" component={ProductsScreen}/>
<Stack.Screen name="ProductScreen" component={ProductScreen} />
<Stack.Screen name="CHWaitingRoom" component={CHWebView} />
</Stack.Navigator>
...
3. Intercettazione di navigazione#
Per le pagine che desideri proteggere, devi intercettare l'interazione di navigazione dell'utente e verificare con CrowdHandler prima di mostrargli la schermata desiderata. Per farlo, importa il useCrowdHandler il contesto dal file CrowdHandlerGatekeeper nel componente dello schermo che gestisce l'input di navigazione.
ProductsScreen.js
import { useCrowdHandler } from "./ch-react-native-integration";
quindi inserire il contesto CrowdHandler nel componente dello schermo.
ProductsScreen.js
export const ProductsScreen = ({ navigation }) => {
const crowdhandler_gatekeeper = useCrowdHandler();
// pass a reference of navigation to the gatekeeper
// this allows CrowdHandler to redirect the user to the correct screen
crowdhandler_gatekeeper.setNavigation(navigation);
...
Aggiungi una funzione che gestisca il caso in cui un utente faccia clic su un elemento di navigazione che lo reindirizza a una schermata che desideri proteggere.
È consigliabile verificare se la schermata a cui si sta accedendo dispone di una proprietà "slug" o "url". In caso contrario, non è necessario effettuare la verifica tramite CrowdHandler.
ProductsScreen.js
export const ProductsScreen = ({ navigation }) => {
const crowdhandler_gatekeeper = useCrowdHandler();
// pass a reference of navigation to the gatekeeper
// this allows CrowdHandler to redirect the user to the correct screen
crowdhandler_gatekeeper.setNavigation(navigation);
const handleCheckWithCrowdHandler = async (product) => {
if (product.slug || product.url) {
await crowdhandler_gatekeeper.redirectOrWait(product);
} else {
navigation.navigate(product.redirect, product)
}
}
...
e aggiungi questo gestore all'evento onPress del pulsante.
Crowdhandler può proteggere gli schermi in base allo slug della "Sala d'attesa" o in base all'URL che desideri proteggere.
ProductsScreen.js
// A collection of products
// Minimum requirements are that they have the waiting room slug or URL to protect
// and a screen to redirect to
// Analogous to params that are sent to react-navigator and any
// params that are set here are sent to the navigator on redirect
const products = [
{
slug: '0MAID6M2iMjNW1WZs', // waiting room slug from crowdhander admin
redirect: 'ProductScreen', // the screen to redirect to
title: 'Hiking Boots',
productID: 'pct_000112312'
}, {
url: 'https://example.com/products/protected/page', // URL to protect - set in crowdhander admin
redirect: 'ProductScreen',
// the screen to redirect to
title: 'Head Torch',
productID: 'pct_030112552'
}
]
{products.map((product) => {
return (
<Button
key={product.productID}
onPress = { () => {
handleCheckWithCrowdHandler(product)} // send the data to check
}
>
{product.title}
</Button>
)
})}
...
4. Mettere tutto insieme.
In questa implementazione, quando un utente preme il pulsante, viene chiamata la funzione ` handleCheckWithCrowdHandler() `, alla quale viene passato come argomento l'oggetto `product`, ovvero
{
slug: '0MAID6M2iMjNW1WZs', // waiting room slug from crowdhander admin
redirect: 'ProductScreen', // the screen to redirect to
title: 'Hiking Boots',
productID: 'pct_000112312'
}
CrowdHandler esegue quindi una verifica in base alla proprietà "slug" o alla proprietà "url" dell'oggetto
Se l'utente è costretto ad attendere il onWait() viene chiamato l'evento definito in App.js. Questo viene gestito dal launchWaitingRoom() gestore, definito anche in App.js. Viene visualizzata la schermata CHWaitingRoom e viene caricata la sala d'attesa.
Se l'utente è in grado di accedere alla schermata protetta onRedirect() viene richiamata e l'utente viene reindirizzato alla schermata specificata nell'oggetto prodotto, in questo caso Scheda prodotto