Skip to main content

Using Web3Auth React Native SDK

mobilereact-nativeandroidioswhitelabelcustom authenticationdapp shareWeb3Auth Team | December 16, 2022

This guide will cover the basics of how to use the Web3Auth React Native SDK in your React Native application.

Live Demo: Android iOS

Repository: https://github.com/Web3Auth/web3auth-pnp-examples/tree/main/react-native/rn-bare-quick-start

Quick Start

npx degit Web3Auth/web3auth-pnp-examples/react-native/rn-bare-example w3a-rn-bare-demo && cd w3a-rn-bare-demo && npm install
# For Android
npm run android
# For iOS
cd ios && pod install && cd .. && npm run ios

How it works?

When integrating Web3Auth React Native SDK with Social Login the flow looks something like this:

Web3Auth Core - Social Login Flow

  • When a user logs in with Google, Google sends a JWT id_token to the app. This JWT token is sent to the Web3Auth SDK's login function.

  • Finally, on successful validation of the JWT token, Web3Auth SDK will generate a private key for the user, in a self-custodial way, resulting in easy onboarding for your user to the application.

Prerequisites

  • For Web Apps: A basic knowledge of JavaScript is required to use Web3Auth SDK.

  • For Mobile Apps: For the Web3Auth Mobile SDKs, you have a choice between iOS, Android, React Native & Flutter. Please refer to the Web3Auth SDK Reference for more information.

  • Create a Web3Auth account on the Web3Auth Dashboard

  • React Native Release 0.71 and above (for Bare React Native Workflow)

  • iOS Platform Target Version 14 and above

  • Android Target SDK Version 31 and above

Setup

Setup your Web3Auth Dashboard

  • Create a Project from the Project Section of the Web3Auth Developer Dashboard.

    Plug n Play Project Creation on Web3Auth Dashboard

    • Enter your desired Project name.

    • Select the Product you want to use. For this guide, we'll be using the Plug n Play product.

    • Select the Platform type you want to use. For this guide, we'll be using the Web Application as the platform.

    • Select the Web3Auth Network as Sapphire Devnet. We recommend creating a project in the sapphire_devnet network during development. While moving to a production environment, make sure to convert your project to sapphire_mainnet or any of the legacy mainnet network mainnet, aqua, or cyan network. Otherwise, you'll end up losing users and keys.

    • Select the blockchain(s) you'll be building this project on. For interoperability with Torus Wallets, you have the option of allowing the user's private key to be used in other applications using Torus Wallets (EVM, Solana, XRPL & Casper).

    • Finally, once you create the project, you have the option to whitelist your URLs for the project. Please whitelist the domains where your project will be hosted.

      Plug n Play Project - Whitelist

  • Add {YOUR_APP_SCHEME}://auth in the Whitelist URL field of the Web3Auth Dashboard.
  • Make sure that the minimum SDK compile version in build.gradle is 31 or more.
android/build.gradle
buildToolsVersion = "31.0.0"
minSdkVersion = 21
compileSdkVersion = 31
targetSdkVersion = 31
  • Add the intent filter with the scheme defined in your AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
# replace with your own scheme
<data android:scheme="web3authrnexample" />
</intent-filter>
  • SDK version 31 requires you to explicitly define android:exported="true" in AndroidManifest.xml, and check whether it is correctly present or not.
android/app/src/main/AndroidManifest.xml
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:exported="true">
  • Your redirectUrl is your defined scheme following some identifier or your choice. For example, if your scheme is web3authrnexample, you can define your redirectUrl as web3authrnexample://openlogin. Make sure you register this redirectUrl in the Web3Auth Developer Dashboard.
App.js
const scheme = "web3authrnbareexample"; // Or your desired app redirection scheme
const resolvedRedirectUrl = `${scheme}://openlogin`;

Using the Web3Auth SDK

To use the Web3Auth SDK, you need to add the dependency of the respective platform SDK of Web3Auth to your project. To know more about the available SDKs, please have a look at this documentation page.

For this guide, we will be talking through the Web3Auth React Native SDK.

Installation

@web3auth/react-native-sdk
npm install --save @web3auth/react-native-sdk

Adding a Web Browser Module

We will also require a WebBrowser implementation to allow our JS-based SDK to interact with the native APIs, and different extra installation steps depending on whether you are using the bare workflow or managed workflow. Since we're using the SDK with a bare workflow React Native app, you have to install a WebBrowser implementation made by us as a port from the Expo Web Browser Module.

@toruslabs/react-native-web-browser
npm install --save @toruslabs/react-native-web-browser

Adding an EncryptedStorage Module

We will also require an EncryptedStorage implementation to allow for session management without storing the private key on the device.

npm install --save react-native-encrypted-storage

Initialization

After Installation, the next step to use Web3Auth is to Initialize the SDK. The Initialization is a two-step process,

Please note that these are the most critical steps where you need to pass on different parameters according to the preference of your project. Additionally, Whitelabeling and Custom Authentication have to be configured within this step, if you wish to customize your Web3Auth Instance.

Importing Web3Auth

You may also import additional types from the SDK to help in the development process.

import Web3Auth, { LOGIN_PROVIDER, OPENLOGIN_NETWORK } from "@web3auth/react-native-sdk";

Importing a WebBrowser implementation

import * as WebBrowser from "@toruslabs/react-native-web-browser";

Importing a EncryptedStorage implementation

import EncryptedStorage from "react-native-encrypted-storage";

Instantiating Web3Auth

It's time to create an instance of Web3Auth in the project.

We need clientId and target Web3Auth network to initialize the web3auth object.

  • You can get your clientId from registering (above) on the Developer Dashboard.

  • network signifies the network on which the deployed Web3Auth nodes are running. For testing purposes, we have a Sapphire Devnet network. For production usage, you can use the Sapphire Mainnet network.

const web3auth = new Web3Auth(WebBrowser, EncryptedStorage, {
clientId,
network: OPENLOGIN_NETWORK.SAPPHIRE_MAINNET, // SAPPHIRE_MAINNET or SAPPHIRE_DEVNET
});
SDK Reference

Authentication

Logging in

Once initialized, you can use the login function of web3auth to navigate the user to the login process. For each login method, you have to select the loginProvider such as google, facebook, twitch, jwt, email_passwordless etc.

JWT

If you are using custom authentication through Auth0 or Custom JWT, you have to use the JWT login provider.

Additionally, in extraLoginOptions you have to provide the details required by that specific method as mentioned here.

Once a user logs in, the user can access the key by web3auth.privKey(). For EVM Blockchains, the secp256k1 private key is used to sign transactions. We can get an ed25519 compatible private key for other blockchains using web3auth.ed25519Key().

await web3auth.login({
redirectUrl: resolvedRedirectUrl,
mfaLevel: "default", // Pass on the MFA level of your choice: default, optional, mandatory, none
loginProvider: "google", // Pass on the login provider of your choice: google, facebook, discord, twitch, twitter, github, linkedin, apple, etc.
});
SDK Reference

If you wish you add Multi Factor Authentication, use dApp Share or select Curve for your React Native application, read the linked documentation.

Get the User Profile

// Assuming the user is logged in, get the user profile from the web3auth object
var userInfo = web3auth.userInfo();

Using the web3Auth.login() function, you can get the details of the logged-in user. Please note that these details are not stored anywhere in Web3Auth network.

Sample userInfo

{
"aggregateVerifier": "tkey-google",
"email": "john@gmail.com",
"name": "John Dash",
"profileImage": "https://lh3.googleusercontent.com/a/Ajjjsdsmdjmnm...",
"typeOfLogin": "google",
"verifier": "torus",
"verifierId": "john@gmail.com",
"dappShare": "<24 words seed phrase>", // will be sent only incase of custom verifiers
"idToken": "<jwtToken issued by Web3Auth>",
"oAuthIdToken": "<jwtToken issued by OAuth Provider>", // will be sent only incase of custom verifiers
"oAuthAccessToken": "<accessToken issued by OAuth Provider>" // will be sent only incase of custom verifiers
}

Logout

Use the logout function of web3auth to log the user out.

web3auth.logout();
SDK Reference

Interacting with the Blockchain

Once a user logs in, the user can access the private key by web3auth.privKey(). For EVM Blockchains, the secp256k1 private key is used to sign transactions. We can get an ed25519 compatible private key for other blockchains using web3auth.ed25519Key(). Similar to how we're using this private key in the ethers.js library in this example, you can connect to any other blockchain of your choice.

connect any blockchain

Please go through the Connect Blockchain Documentation, which contains all the details of the EVM-based blockchain you have selected here.

Example code

The code for the application we developed in this guide can be found in the Web3Auth React Native Example. Check it out and try running it locally yourself!

Questions?

Ask us on Web3Auth's Community Support Portal