Skip to main content

IOS SDK

The Accrue Savings IOS SDK is available as a package for your company to integrate the Accrue Wallet.

It simplifies the integration by combining the Wallet lifecycle and deep linking into a single package.

Installation

Your package is available as a Swift Package Manager package.

The repository URL is https://github.com/accrue-savings/ios-sdk

Swift Package Manager

To add the Accrue Savings SDK to your Xcode project, select File > Swift Packages > Add Package Dependency and enter the repository URL.

Usage

Here is an example of how to embed the widget in a IOS (swift) application:

import SwiftUI
import AccrueIosSDK
import WebKit

struct ContentView: View {
@StateObject private var contextData = AccrueContextData(
userData: AccrueUserData(
// A unique reference id for the user
referenceId: "yourReferenceId",
// User email
email: "email@example.com",
// User US phone number
phoneNumber: "+12125559999"
// Additional data to be attached to the user profile stored with Accrue
additionalData: ["firstName": "John", "lastName": "Doe"]
),
// Optional settings data
settingsData: AccrueSettingsData(
// Should the widget inherit the authentication from the parent app
shouldInheritAuthentication: true
)
)
var body: some View {
AccrueWallet(
// Merchant Id provided by Accrue
merchantId: "yourMerchantId",
// Redirection token for deep linking
redirectionToken: "yourRedirectionToken",
// Sandbox mode
isSandbox: true,
// Context data to be attached to the user profile stored with Accrue
contextData: contextData,
// Callback with actions triggered by the user
onAction: handleOnAction
)
}
// Callback function to handle user actions
func handleOnAction(action: String) {
print("action with data: \(action)")
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

Props

The following props are available for the AccrueWallet component:

merchantId
RequiredYes
TypeString
DescriptionMerchant ID (received from Accrue)
DefaultN/A
Example724a57f2-1670-42de-b1f0-a94425fb60cf
redirectionToken
RequiredNo
TypeString
DescriptionRedirection token for the deep linking. This token will be used to redirect the user to a specific screen within the Accrue Savings Widget
Defaultnil
Example61a77652-14ae-4ed4-9bb3-cdb31312869e
isSandbox
RequiredNo
TypeBool
DescriptionFlag to enable the sandbox mode. If set to true, the widget will use the sandbox environment
Defaulttrue
Exampletrue
contextData
Requiredyes
TypeContextData(userData: AccrueUserData, settingsData: AccrueSettingsData)
DescriptionYour own user data to be attached to the user profile stored with Accrue
Defaultnil
ExampleContextData(userData: AccrueUserData(), settingsData: AccrueSettingsData())
onAction
RequiredNo
Type((String) -> Void)?
DescriptionCallback with actions triggered by the user
Defaultnil
Example{ print("action with data: (action)") }

ContextData

The ContextData struct is used to pass the user data and settings data to the widget.

AccrueUserData

The AccrueUserData struct is used to pass the user data to the widget. The following fields are available:

referenceId
RequiredYes
TypeString
DescriptionA unique reference id for the user
DefaultN/A
Example123e4567-e89b-12d3-a456-426614174000
email
RequiredNo
TypeString
DescriptionUser email
DefaultN/A
Exampleemail@example.com
phoneNumber
RequiredYes
TypeString
DescriptionUser US phone number
DefaultN/A
Example+12125559999
additionalData
RequiredNo
TypeDictionary<String, String>
DescriptionAdditional data to be attached to the user profile stored with Accrue
Defaultnil
Example["firstName": "John", "lastName": "Doe"]

⚠️ Important: The additionalData will accept the following fields:

  • firstName
  • lastName

AccrueSettingsData

The AccrueSettingsData struct is used to pass the settings data to the widget. The following fields are available:

shouldInheritAuthentication
RequiredNo
TypeBool
DescriptionShould the widget inherit the authentication from the parent app
Defaulttrue
Exampletrue

⚠️ Important: Keep in mind that the shouldInheritAuthentication will change the behavior of the widget.

The following UX changes will occur:

  • We will use the phoneNumber passed as props to auto-send the OTP to the user if not already authenticated on the widget.
  • We will use the referenceId passed as the authentication state (on merchant side). If present, we will consider the user as authenticated. Otherwise, we will consider the user as unauthenticated.
  • Once user confirms the OTP, we will consider the user as authenticated on the widget.
  • If referenceId changes, the user will be logged out from the widget.

Considerations:

  • The user would not be able to change the phone number in the widget.
  • The user would not be able to logout from the widget (unless the referenceId changes).
  • The user would not be able to change the email in the widget.
  • All phoneNumber/email changes should be handled on the merchant side.

Actions

Actions are emitted from the webview in the form of a string. The onAction callback will be triggered with the action string as a parameter.

The following actions are available:

  • AccrueWallet::SignInButtonClicked: The user clicked the sign-in button
  • AccrueWallet::RegisterButtonClicked: The user clicked the register button

The string will contain the action key and any additional data in the following format:

{
"action": "AccrueWallet::SignInButtonClicked",
"data": {}
}