Work in progress!
react-native-cognito
provides a React Native module for integrating with AWS Cognito.
Features currently supported:
- dataset:synchronize
Roadmap:
- dataset:subscribe
- dataset:unsubscrib
- proper callbacks + events
- promises
- twitter auth support
- google auth support
- custom login support
Currently the following identity providers are supported:
In development:
react-native-cognito
does not handle authentication with identity providers such as Facebook. You have to use react-native-facebook-login or similar to get a valid access token to use with react-native-cognito
.
Make sure you install the AWS Mobile SDK. https://aws.amazon.com/mobile/sdk/.
import React from 'react-native';
import Cognito from 'react-native-cognito';
import LoginStore from '../stores/LoginStore';
let region = 'eu-west-1';
let identityPoolId = 'your_cognito_identity_pool_id';
class Demo extends React.Component {
constructor() {
// Load login credentials from flux store.
this.state = LoginStore.getState();
// Provide credentials to Cognito.
Cognito.initCredentialsProvider(
identityPoolId,
this.state.credentials.token, // <- Facebook access token
region);
// Get Cognito Id (Returns Promise)
Cognito.getCognitoId().then(cognitoId => {
alert(cognitoId);
});
//You can also use await or async on getCognitoId();
// Sync data
Cognito.syncData('testDataset', 'hello', 'world', (err) => {
// callback
// handle errors etc
});
}
}
First, install via npm:
$ npm install --save react-native-cognito
Add RCTCognito.xcodeproj to Libraries and add libRCTCognito.a to Link Binary With Libraries under Build Phases. More info and screenshots about how to do this is available in the React Native documentation.
Next, select RCTCognito.xcodeproj and add your AWS SDK path to Framework Search Paths under Build Settings.
Disclaimer: experimental i.e., don't use
Edit android/settings.gradle
and add the following lines:
...
include ':react-native-cognito'
project(':react-native-cognito').projectDir = new File(rootProject.projectDir, '../node-modules/react-native-cognito/android')
Edit android/app/build.gradle
:
...
dependencies {
...
compile project(':react-native-cognito')
}
Edit android/app/src/main/java/com/myApp/MainActivity.java
.
// Import package
import com.morcmarc.rctcognito.ReactCognitoPackage;
...
public class MainActivity extends Activity implements DefaultHardwareBackBtnHandler {
...
// declare package
private ReactCognitoPackage mReactCognitoPackage;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
...
// Instantiate package
mReactCognitoPackage = new ReactCognitoPackage(this);
...
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModuleName("index.android")
// Register the package
.addPackage(mReactCognitoPackage)
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
...
}
}
You might have to add the following permission to your AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET" />