React Native SDK (v4.0+)
This react native sdk version is intended for use with the network user identifier: aeropassuuid.
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
AddBank.js
/**
* 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 POST /token_widget endpoint. Reference: |
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. |
configurationId | string | No | Unique ID that represents the client to apply the customization. |
aeropassUserUuid | string | Yes | Aeronetwork user id |
handleMFA | boolean | No | handle the additional MFA for balance refresh workflow |
jobId | string | No | unique identifier for current job Required if handleMFA is true. |
connectionId | string | No | unique identifier for current Aerosync user Required if handleMFA is true. |
manualLinkOnly | boolean | No | User will only be able to link their bank manually. |
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 install
Updated 3 days ago