Skip to main content

Using PnP iOS SDK

Logging in a User

To login in a user, you can use the login method. It will trigger login flow will navigate the user to a browser model allowing the user to login into the service. You can pass in the supported providers to the login method for specific social logins such as GOOGLE, APPLE, FACEBOOK, etc., and do whitelabel login.

Parameters

The login method accepts W3ALoginParams as a required parameter.

ParameterDescription
loginProviderIt sets the OAuth login method to be used. You can use any of the supported values are GOOGLE, FACEBOOK, REDDIT, DISCORD, TWITCH, APPLE, LINE, GITHUB, KAKAO, LINKEDIN, TWITTER, WEIBO, WECHAT, EMAIL_PASSWORDLESS, SMS_PASSWORDLESS, and FARCASTER.
extraLoginOptions?It can be used to set the OAuth login options for corresponding loginProvider. For instance, you'll need to pass user's email address as. Default value for the field is nil, and it accepts ExtraLoginOptions as a value.
redirectUrl?Url where user will be redirected after successfull login. By default user will be redirected to same page where login will be initiated. Default value for the field is nil, and accepts URL as a value.
appState?It can be used to keep track of the app state when user will be redirected to app after login. Default is nil, and accepts String as a value.
mfaLevel?Customize the MFA screen shown to the user during OAuth authentication. Default value for field is MFALevel.DEFAULT, which shows MFA screen every 3rd login. It accepts MFALevel as a value.
dappShare?Custom verifier logins can get a dapp share returned to them post successful login. This is useful if the dapps want to use this share to allow users to login seamlessly. It accepts String as a value.
curve?It will be used to determine the public key encoded in the jwt token which returned in getUserInfo function after user login. This parameter won't change format of private key returned by We3Auth. Private key returned by getPrivKey is always secp256k1. To get the ed25519 key you can use getEd25519PrivKey method. The default value is SUPPORTED_KEY_CURVES.SECP256K1.

Usage

import Web3Auth

let web3auth = try await Web3Auth(W3AInitParams(
clientId: "YOUR_WEB3AUTH_CLIENT_ID",
network: .sapphire_mainnet,
redirectUrl: "bundleId://auth"
))

let result = try await web3Auth.login(W3ALoginParams(loginProvider: .GOOGLE))

Examples

import Web3Auth

let web3auth = try await Web3Auth(W3AInitParams(
clientId: "YOUR_WEB3AUTH_CLIENT_ID",
network: .sapphire_mainnet,
redirectUrl: "bundleId://auth"
))

let result = try await web3Auth.login(W3ALoginParams(loginProvider: .GOOGLE))

Retrieve Private Key

Web3Auth supports two widely used cryptographic curves, Secp256k1 and Ed25519, making it chain-agnostic and compatible with multiple blockchain networks. Learn more about how to connect different blockchains.

Secp256k1 Private Key

To retrieve the secp256k1 private key of the user, use getPrivkey method. The method returns an EVM compatible private key which can be used to sign transactions on EVM compatible chains.

let privateKey = web3Auth.getPrivKey();

Ed25519 Private Key

To retrieve the secp256k1 private key of the user., use getEd25519PrivKey method. This private key can be used to sign transactions on Solana.

let privateKey = web3Auth.getEd25519PrivKey();

Retrive User Information

You can use the getUserInfo method to retrieve various details about the user, such as their login type, whether multi-factor authentication (MFA) is enabled, profile image, name, and other relevant information.

Usage

let web3AuthUserInfo = web3Auth.getUserInfo();

UserInfo Response

{
"userInfo": {
"email": "w3a-heroes@web3auth.com",
"name": "Web3Auth Heroes",
"profileImage": "https://lh3.googleusercontent.com/a/Ajjjsdsmdjmnm...",
"verifier": "torus",
"verifierId": "w3a-heroes@web3auth.com",
"typeOfLogin": "google",
"aggregateVerifier": "w3a-google-sapphire",
"dappShare": "", // 24 words of 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
"isMfaEnabled": false // Returns whether the user has enabled MFA or not
}
}

Session Management

The Session Management feature allows you to check the existing sessions with Web3Auth. The Web3AuthState will allow users to remain authenticated with Web3Auth for 1 day by default, or a maximum of 7 days, or until the user logout or session data is cleared.

The W3AInitParams initialization accepts a sessionTime parameter.

Usage

import Web3Auth

let web3auth = try await Web3Auth(W3AInitParams(
clientId: "YOUR_WEB3AUTH_CLIENT_ID",
network: .sapphire_mainnet,
redirectUrl: "bundleId://auth",
sessionTime: 86400 // 1 Day
))

Logging out a user

To logout the user and remove the session id from the device you can use the logout method. The user will need to login again to use the dApp next time the dApp is opened.

try await web3auth.logout()

Enable MFA for a user

The enableMFA method is used to trigger MFA setup flow for users. The method takes W3ALoginParams which will used during custom verifiers. If you are using default login providers, you don't need to pass W3ALoginParams. If you are using custom jwt verifiers, you need to pass the valid JWT token in W3ALoginParams as well.

do {
let isMFAEnabled = try await web3Auth.enableMFA()
} catch {
print(error.localizedDescription)
// Handle Error
}

Launch Wallet Services

The launchWalletServices method launches a WebView which allows you to use the templated wallet UI services. The method takes ChainConfig as the required input. Wallet Services is currently only available for EVM chains.

note

Access to Wallet Services is gated. You can use this feature in sapphire_devnet for free. The minimum pricing plan to use this feature in a production environment is the Scale Plan.

Wallet Services

Parameters

ParameterDescription
chainNamespaceCustom configuration for your preferred blockchain. As of now only EVM supported. Default value is ChainNamespace.eip155.
decimals?Number of decimals for the currency ticker. Default value is 18, and accepts Int as value.
blockExplorerUrl?Blockchain's explorer URL. (eg: https://etherscan.io)
chainIdThe chain id of the selected blockchain String.
displayName?Display Name for the chain.
logo?Logo for the selected chainNamespace & chainId.
rpcTargetRPC Target URL for the selected chainNamespace & chainId.
ticker?Default currency ticker of the network (e.g: ETH)
tickerName?Name for currency ticker (e.g: Ethereum)

Usage

do {
try await web3Auth!.launchWalletServices(
chainConfig: ChainConfig(
chainId: "11155111",
rpcTarget: "https://eth-sepolia.public.blastapi.io"
)
)
} catch {
print(error.localizedDescription)
// Handle error
}

Request signature

The request method facilitates the use of templated transaction screens for signing transactions. Upon successful completion, you can retrieve the signature for the request using the getSignResponse static method.

Please check the list of JSON RPC methods, noting that the request method currently supports only the signing methods.

Request Method

Parameters

ParameterDescription
chainConfigDefines the chain to be used for signature.
methodJSON RPC method name in String. Currently, the request method only supports the singing methods.
requestParamsParameters for the corresponding method. The parameters should be in the list and correct sequence. Take a look at RPC methods to know more.

Usage

do {
var params = [Any]()
// Message to be signed
params.append("Hello, Web3Auth from iOS!")
// User's EOA address
params.append(address)

try await self.web3Auth?.request(
chainConfig: ChainConfig(
chainId: "11155111",
rpcTarget: "https://eth-sepolia.public.blastapi.io"
),
method: "personal_sign",
requestParams: params
)

let response = try Web3Auth.getSignResponse()

if response!.success {
print(response!.result!)
} else {
// Handle Error
print(response!.error!)
}
} catch {
print(error.localizedDescription)
// Handle error
}