React Native SDK (v4.0+)
Aerosync SDK for use with network user identifier: aeroPassUserUuid.
Aeronetwork SDK: aeroPassUserUuidAll new and future versions of the React Native SDK will require an aeroPassUserUuid in the widget configuration to render the most updated experience. The aeroPassUserUuid can be fetched from the GET /v2/user call.
Introduction
This React Native SDK provides an interface to load Aerosync-UI in React Native application. Securely link your bank account through your bank's website. Log in with a fast, secure, and tokenized connection. Your information is never shared or sold.
1. Install Aerosync React Native SDK (v4.0+)
Add latest verion of aerosync-react-native-sdk library to your project dependencies.
npm install aerosync-react-native-sdk
2. Minimal example to implement Aerosync React Native Sdk
App.tsx
/**
* Integrate AeroSync UI AddBank
*/
/**
* Sample App
* https://github.com/Aeropay-inc/aerosync-react-native-sdk/blob/main/sample/App.tsx
*
* @format
*/
import React, {useState} from 'react';
import BankLink, {
SuccessEventType,
WidgetEventType,
Environment,
} from 'aerosync-react-native-sdk';
import DropDownPicker from 'react-native-dropdown-picker';
import {
StyleSheet,
SafeAreaView,
Text,
View,
Alert,
TextInput,
TouchableOpacity,
} from 'react-native';
function App(): React.JSX.Element {
const [token, settoken] = useState('');
const [isSubmitted, setIsSubmitted] = useState(false);
const [configurationId, setConfigurationId] = useState('');
const [aeroPassUserUuid, setAeroPassUserUuid] = useState('');
const [open, setOpen] = useState(false);
const [value, setValue] = useState('sandbox' as Environment);
const [output, setoutput] = useState('');
const [items, setItems] = useState([
{label: 'DEV', value: 'dev'},
{label: 'SANDBOX', value: 'sandbox'},
{label: 'PRODUCTION', value: 'production'},
]);
const onLoad = () => {
console.log('onLoad');
};
const onClose = () => {
console.log('onClose');
setIsSubmitted(false);
};
const onSuccess = (event: SuccessEventType) => {
setoutput(JSON.stringify(event));
console.log('onSuccess', event);
setIsSubmitted(false);
};
const onEvent = (event: WidgetEventType) => {
console.log('onEvent', event);
};
const onError = (event: string) => {
console.log('onError', event);
};
if (isSubmitted) {
return (
<SafeAreaView>
<BankLink
token={token}
environment={value}
onError={onError}
onClose={onClose}
onEvent={onEvent}
onSuccess={onSuccess}
onLoad={onLoad}
deeplink="testaerosyncsample://"
configurationId={configurationId}
aeroPassUserUuid={aeroPassUserUuid}
style={{
width: '100%',
height: '100%',
opacity: 1,
bgColor: '#FFFFFF',
}}></BankLink>
</SafeAreaView>
);
} else {
return (
<SafeAreaView>
<View style={styles.container}>
<TouchableOpacity>
<Text style={styles.OutputTitle}>{output}</Text>
</TouchableOpacity>
<View style={styles.dropdownView}>
<DropDownPicker
open={open}
value={value}
items={items}
setOpen={setOpen}
setValue={setValue}
setItems={setItems}
placeholder="select environment*"
/>
</View>
<View style={styles.inputView}>
<TextInput
style={styles.TextInput}
placeholder="Enter Aerosync token*"
onChangeText={token => settoken(token)}
placeholderTextColor="#003f5c"
/>
</View>
<View style={styles.inputView}>
<TextInput
style={styles.TextInput}
placeholder="Enter configurationId (optional)"
onChangeText={configurationId =>
setConfigurationId(configurationId)
}
placeholderTextColor="#003f5c"
/>
</View>
<View style={styles.inputView}>
<TextInput
style={styles.TextInput}
placeholder="Enter aeroPassUserUuid (optional)"
onChangeText={aeroPassUserUuid =>
setAeroPassUserUuid(aeroPassUserUuid)
}
placeholderTextColor="#003f5c"
/>
</View>
<TouchableOpacity
style={styles.loginBtn}
onPress={() => setIsSubmitted(true)}>
<Text style={styles.loginText}>Launch Aerosync widget</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
);
}
}
const styles = StyleSheet.create({
container: {
alignItems: 'center',
justifyContent: 'center',
backgroundColor: 'white',
height: '100%',
},
image: {
marginBottom: 40,
width: '25%',
height: '15%',
},
inputView: {
borderWidth: 1,
borderRadius: 5,
width: '70%',
height: 45,
marginBottom: 20,
},
dropdownView: {
width: '70%',
height: 45,
marginBottom: 20,
zIndex: 100,
},
TextInput: {
color: 'black',
height: 50,
flex: 1,
marginLeft: 20,
},
forgot_button: {
height: 30,
marginBottom: 30,
},
OutputTitle: {
color: 'black',
height: 100,
},
loginBtn: {
width: '80%',
borderRadius: 25,
height: 50,
alignItems: 'center',
justifyContent: 'center',
marginTop: 40,
backgroundColor: '#24c3d2',
},
loginText: {
color: 'black',
fontWeight: 'bold',
fontSize: 20,
},
});
export default App;
3. Aerosync Sdk configuration
Parameter | Type | Required | Description |
|---|---|---|---|
token | string | Yes | Request AeroSync Token using GET /v2/aggregatorCredentials endpoint. Reference: https://api-aeropay.readme.io/reference/aggregatorcredentials https://developer.aeropay.com/api/aeropay/doc/ |
environment | string | Yes | Permitted values are [sandbox, production] |
deeplink | string | Yes | Aerosync will redirect to this link on mobile app after authentication to resume the workflow. For more guidance refer to our article here |
configurationId | string | No | Unique ID that represents the client to apply the customization. |
aeropassUserUuid | string | Yes | Aeronetwork user id |
4. Define postMessage events
| Parameter | Type | Required | Description |
|---|---|---|---|
| onLoad | function() | No | This method will be triggered after the contents of a webpage have been loaded. |
| onSuccess | function(event: WidgetEventSuccessType) | Yes | This method will be triggered when a bank is added successfully and the user clicks on "continue" button in the final AeroSync-UI page. |
| onError | function(event: string) | Yes | The method is called if AeroSync-UI dispatches any error events. |
| onClose | function() | Yes | This event will be triggered if the user closes the AeroSync-UI window. |
| onEvent | function(event: WidgetEventType) | No | AeroSync-UI will trigger event on each page load. |
4.1 WidgetEventSuccessType
| Property | Type | Description |
|---|---|---|
| connectionId | string | The unique identifier for the Aerosync |
| clientName | string | The name of the client associated with the session. |
| aeroPassUserUuid | string | UUID of the authenticated AeroPass user. |
4.2 WidgetEventType
| Property | Type | Description |
|---|---|---|
| payload | WidgetEventPayloadType | The payload of the event. |
| type | string | The type of the event. |
4.3 WidgetEventPayloadType
| Property | Type | Description |
|---|---|---|
| pageTitle | string | The identifier of the page. |
| onLoadApi | string | The identifier of the API. |
5. Common Issues:
5.1 If you're getting Invariant Violation: Native component for "RNCWebView does not exist", it means react native autolinking did not work. Try linking it manually using below resources:
Android (link edits 3 files):
Resource: https://engineering.brigad.co/demystifying-react-native-modules-linking-964399ec731b
IOS (link manually)
Explicitly install in the Root project:\
npm i react-native-webview
cd ios; pod installUpdated about 2 months ago
