Ingo SDK version: 7.1.5
Deployment Target: iOS 13.0
Ingo Money Mobile SDK version 7.1.5 has a new dependency structure and a new API compared to previous versions. It is recommended to completely remove all references to older Ingo Money Mobile SDK dependencies from both the build scripts and from source code before attempting to integrate Ingo Money SDK version 7.1.5.
Mobile Check Cashing SDK Enrollment API
in order to perform the server to server authentication that provides the necessary inputs for the native Mobile SDK.IngoSharedSdk.xcframework
IngoSdk.xcframework
IngoSdkUx.xcframework
IngoMaterialComponents.xcframework
FraudForce.xcframework
MiSnap.xcframework
MiSnapCamera.xcframework
MiSnapUX.xcframework
MiSnapCore.xcframework
MiSnapAssetManager.xcframework
MiSnapBarcodeScanner.xcframework
MiSnapScience.xcframework
MobileFlow.xcframework
Invocation of the Ingo Money SDK is comprised of 4 steps
The Ingo Money Mobile SDK requires an authorization token and customer identifier to interact with the Ingo Money service, both of which are securely retrieved via a server to server authentication mechanism. Please refer to the Ingo Money Mobile Check Cashing SDK Enrollment API
documentation for details on enrolling and authenticating an end user in the Ingo Money Service. Once the implementing application retrieves these values from its own API, the Ingo Money Mobile SDK can be configured and launched.
The Ingo Money Mobile SDK requires a device specific identifier generated by the TransUnion Device Risk SDK in order to interact with Ingo Money Service. The Ingo Money Mobile SDK does not rely on a specific version of this libary in order to prevent API conflicts, and it is the implementing application's responsibility to maintain this dependency.
In your AppDelegate import Fraudforce:
import FraudForce
In the didFinishLaunchingWithOptions
method in your AppDelegate add:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FraudForce.start()
return true
}
Create the following method in the viewController where the Ingo SDK will be launched:
func generateBlackBox() -> String {
return FraudForce.blackbox()
}
Launch the Ingo Money Mobile SDK with the arguments generated in steps 1 and 2, the base URL for the Ingo Money API in the desired environment (UAT/Production), and provide additional UX customizations as desired.
NOTE: Do not launch the SDK multiple times with the same authorization token, as subseqent invocations it will result in a 403 Forbidden
error.
Add the the following method to the class where the Ingo SDK will be launched from:
func launchIngoSdk() {
let customTheme = IngoSharedSdk.IngoSdkTheme.init(light: ingoSdkLightThemeHelper(), dark: ingoSdkDarkThemeHelper())
let analytics = YOUR_ANALYTICS_IMPLEMENTATION
let ingoSession = IngoSessionBuilder(viewController: self, delegate: self)
.setBaseUrl(baseUrl)
.setIsLoggingEnabled(false)
.setCustomerId(customerId ?? "")
.setSdkAuthorizationToken(sessionToken ?? "")
.setFraudForceBlackBox(generateBlackBox())
.setTheme(customTheme)
.setAnalytics(analytics)
.build()
ingoSession.start { failure in
// HANDLE LAUNCH FAILURE
}
}
baseUrl
customerId
customerId
value returned from the server to server register customer API call.sdkAuthorizationToken
sessionToken
is the sessionID
header value returned from the server to server AuthenticatePartner API call.fraudForceBlackBox
generateBlackbox()
function.theme
launchIngoSdk()
function.isLoggingEnabled
selectedAccountIdentifier
selectedAccountIdentifier
paramenter.analytics
final public class MyAnaltyicsImplementation: IngoAnalytics {
public func trackEvent(name: String, properties: [String : String]?) {
// Invoke your own analytics solution here for an event named `name` with additional properties `properties`
}
}
If a custom theme is needed the SDK can be configured with the following keys:
Each key supports a light and dark value to facilitate device settings.
The Ingo SDK supports both compile time and run time theming.
If you desire to set the theme values via .plist instead of via code, modify the values in the Theme
dictionary inside of the IngoConfig.plist
file. In order for the Ingo SDK to read the theme values in the IngoConfig.plist
, comment out or delete the theme
launch paramenter set in Step 3 (Launching Ingo Money Mobile SDK).
The Ingo SDK theme is passed into the IngoSdkRootViewController
and the default configuration can be set using ingoSdkTheme()
.
Create the following method in the class where you will be launching the Ingo SDK:
public func ingoSdkLightThemeHelper(
primaryColor: String = "1C1C1E",
secondaryColor: String = "3b7bbf",
tertiaryColor: String = "cccccc",
backgroundColor: String = "FFFFFF",
secondaryBackgroundColor: String = "F6F7F8",
primaryInverseTextColor: String = "FFFFFF",
alertColor: String = "F3CA3E",
errorColor: String = "FF0000") -> IngoSharedSdk.IngoSdkColorTheme {
IngoSharedSdk.IngoSdkColorTheme.init(
primaryColor: primaryColor,
secondaryColor: secondaryColor,
tertiaryColor: tertiaryColor,
backgroundColor: backgroundColor,
secondaryBackgroundColor: secondaryBackgroundColor,
primaryInverseTextColor: primaryInverseTextColor,
alertColor: alertColor,
errorColor: errorColor)
}
public func ingoSdkDarkThemeHelper(
primaryColor: String = "FFFFFF",
secondaryColor: String = "3b7bbf",
tertiaryColor: String = "cccccc",
backgroundColor: String = "1C1C1E",
secondaryBackgroundColor: String = "2C2C2E",
primaryInverseTextColor: String = "1C1C1E",
alertColor: String = "F3CA3E",
errorColor: String = "FF0000") -> IngoSharedSdk.IngoSdkColorTheme {
IngoSharedSdk.IngoSdkColorTheme.init(
primaryColor: primaryColor,
secondaryColor: secondaryColor,
tertiaryColor: tertiaryColor,
backgroundColor: backgroundColor,
secondaryBackgroundColor: secondaryBackgroundColor,
primaryInverseTextColor: primaryInverseTextColor,
alertColor: alertColor,
errorColor: errorColor)
}
For detailed information on how these theming keys are applied to the Ingo Money Mobile SDK UX please reference the Figma file included in the distribution, but a brief overview is as follows:
primaryColor
secondaryColor
tertiaryColor
backgroundColor
secondaryBackgroundColor
primaryInverseTextColor
alertColor
errorColor
Copy the IngoLocalizable.strings
file in the IngoSDK/Resources
folder and add it to your project.
If the IngoLocalizable.strings
strings file is not present in your project the SDK will provide default values.
Strings will default to the provided values:
"capture_check_title" = "Add a check to your account balance";
Simply change the value to your desired copy:
"capture_check_title" = "YOUR_CUSTOM_COPY";
IngoConfig.plist
there is a Boolean key titled: promo_code_entry_enabled
, to enable/disable promo code functionality put your desired value here.promo_code_entry_enabled
- VALUE: YES
IngoConfig.plist
there is a Boolean key titled: multicolor_icons_enabled
, to enable/disable multicolor icon functionality put your desired value here.multicolor_icons_enabled
- VALUE: YES
Copy the provided images from IngoSDK/Resources/Images
into your apps asset catalog. These images are the default values.
Copy IngoConfig.plist
from IngoSDK/Resources
and add it to the project. Inside of IngoConfig.plist
is a dictionary titled Images
. Add the desired image to your projects asset catelog and then copy the image name to the corresponding key.
KEY: alert_status
- VALUE:YOUR_IMAGE_NAME
Create a new directory in your project and add your custom font: Fonts/YOUR_FONT_NAME.otf
In the application Info.plist
create a new entry Fonts provided by application
and add your font name in the Array.
In the IngoConfig.plist
there is a key titled: font_name
, add the custom font name here.
KEY: font_name
- VALUE: YOUR_FONT_NAME
Do Not include .ttf or .otf in this key.
The Ingo Mobile Check Cashing SDK will return an object representing the result of the customer's experience within the SDK so that the implementing application can determine the next steps for the customer UX.
In the class you are launching the Ingo SDK add the follow code:
override func viewDidLoad() {
IngoSdk.BaseViewController.delegate = self
}
extension YOUR_VIEW_CONTROLLER: IngoSdkDelegate {
func ingoSdkExited(result: BaseIngoSdkResult) {
switch result {
case is IngoSdkResult:
print("Handle Customer Exit")
case is LegalDocumentsPendingAcceptanceResult:
print("Handle When User Declined Legal Documents")
default:
print("default")
}
}
}
To serialize the result provided from the Ingo SDK Delegate, use the following convenience method:
let serializedIngoSdkResultString = IngoSdkResultSerializer().serialize(input: result)
All SDK result objects have the following attributes:
Field Name | Type | Validations | Description |
---|---|---|---|
exitCode | String | Not Null | The reason the SDK exited (e.g. CUSTOMER_EXIT_SDK , SESSION_TIMEOUT ) |
exitOnUTC | Long | Not Null | The UTC time at SDK Exit |
customerIdentifier | String | Not Null | The Ingo customer identifier associated with the SDK session |
transactionReferenceNumber | String | Nullable | The Ingo transaction reference number associated to the SDK session if available |
title | String | Not Null | Human readable title of the result event |
detail | String | Not Null | Human readable details of the result event |
lastModule | String | Not Null | Last screen / module displayed to the user |
Some exit cases will have additional fields and details to further describe exit conditions.
- The following is an example of what data will be passed to the track event fuction when the Front Check Button is pressed on the Cash a Check Screen:
```
- name: FrontImagePressed
- properties:
▿ Optional<Dictionary<String, String>>
▿ some : 4 elements
▿ 0 : 2 elements
- key : "SystemTime"
- value : "1.722377450146875E9"
▿ 1 : 2 elements
- key : "CustomerId"
- value : ""
▿ 2 : 2 elements
- key : "ScreenName"
- value : "CaptureCheckImages"
▿ 3 : 2 elements
- key : "SessionId"
- value : ""
```
- The following Screen Names, Events, Properties and Properties Values are tracked by the Ingo SDK:
- IScreenNames:
- Authorization
- AcceptLegalDocuments
- Registration
- AccountSelection
- Menu
- TransactionList
- TransactionDetails
- PrivacyPolicyWebView
- TermsWebView
- CustomerSupport
- CaptureCheckImages
- ConfirmAmount
- EnterAmount
- FundsTimingSelection
- ConfirmTransactionDetails
- VoidDisclaimer
- CaptureVoidImage
- TransactionFunded
- TransactionDeclined
- TransactionLoadFailure
- CaptureKYCDocuments
- KYCInProgress
- KYCFailure
- TransactionRequiresVoid
- TransactionInReview
- MiSnapTimeout
- IEventNames:
- Launch
- Exit
- ScreenDisplayed
- ApiRequestStart
- ApiRequestEnd
- ApiFailure
- AppForeground
- AppBackground
- HardwareBackButtonClicked
- CancellationException
- UseCaseException
- NavigationPressed
- MenuPressed
- RegistrationSubmitted
- LegalDocumentAccepted
- LegalDocumentDeclined
- AccountItemSelected
- AccountConfirmed
- FrontImagePressed
- BackImagePressed
- FeesInfoDisplayed
- FeesInfoClosed
- SubmitCheckImages
- CheckStatusPressed
- TransactionListItemSelected
- PrivacyPolicyWebViewPressed
- TermsWebViewPressed
- CustomerSupportPressed
- ChatNowPressed
- SupportEmailPressed
- SupportPhonePressed
- ConfirmAmountPressed
- ChangeAmountPressed
- CheckAmountChanged
- InMinutesFundsTimingSelected
- InDaysFundsTimingSelected
- FundsTimingConfirmed
- PromoCodeInputDisplayed
- PromoCodeInputClosed
- ApplyPromoCodePressed
- PromoCodeSuccessfullyAdded
- PromoCodeRejected
- ConfirmCheckOptionsPressed
- VoidDisclaimerAccepted
- CaptureVoidFrontImagePressed
- SubmitVoidedCheck
- ResumeVoidRequiredTransaction
- KYCIdFrontPressed
- KYCIdBackPressed
- KYCSelfiePressed
- SubmitKYCDocuments
- MiSnapCaptureCancelled
- MiSnapCaptureSuccess
- MiSnapLicenseFailure
- MiSnapTimeout
- MiSnapTimeoutManualPressed
- MiSnapTimeoutRetryPressed
- MiSnapCameraError
- MiSnapAnalysisError
- MiSnapPermissionError
- MiSnapError
- DialogRetryPressed
- DialogDismissPressed
- DialogExitPressed
- LocationAuthorized
- LocationAuthorizationRequired
- PreciseLocationDenied
- SystemSettingsOpened
- IPropertyNames:
- ApplicationId
- Platform
- SystemTime
- SessionId
- CustomerId
- Module
- Url
- HttpStatus
- ExceptionMessage
- TransactionId
- ScreenName
- ApiRequestDuration
- AccountId
- DocumentId
- DocumentType
- PromoCode
- FundsTiming
- IPropertyValues:
- IdFront
- IdBack
- CheckFront
- CheckBack
- FundsInMinutes
- FundsInDays
Ingo Money provides a sample application in order to illustrate the integration, configuration, and launching of the Ingo Money SDK.
In order to run the sample application and enable the MiTek camera experience the Bundle Identifier
of the sample application must be updated in the project settings file to match the Bundle Identifier
that will be used in production to pass MiTek license verification.