Commit f5b57e30 authored by Javokhir's avatar Javokhir
Browse files

Updated documentation

parent dd14ef54
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
<profile-state>
<expanded-state>
<State />
<State>
<id>Android Lint: Correctness</id>
</State>
<State>
<id>Android Lint: Security</id>
</State>
<State>
<id>Declaration redundancyJava</id>
</State>
<State>
<id>JVM languages</id>
</State>
<State>
<id>Java</id>
</State>
<State>
<id>Java 9Java language level migration aidsJava</id>
</State>
<State>
<id>Java language level migration aidsJava</id>
</State>
<State>
<id>VisibilityJava</id>
</State>
</expanded-state>
<selected-state>
<State>
<id>Android</id>
</State>
</selected-state>
</profile-state>
</entry>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/myid-ios-sdk.iml" filepath="$PROJECT_DIR$/.idea/myid-ios-sdk.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
# CHANGELOG
## [3.1.3] - 1 Dec, 2025
- 🔥 New flow
- 🔐 Added new security enhancements for data protection
- 🔥 Improved overall performance and stability.
## [2.4.92] - 23 October, 2025
- 🔨 Resolved problem of iOS 26 Navigation controller
......
# MyID iOS SDK
## Table of contents
This repository contains **two supported SDK flows**.
- [Changelog](CHANGELOG.md)
- [Getting started](#getting-started)
- [Before you begin](#11-before-you-begin)
- [Add the SDK dependency](#12-add-the-sdk-dependency)
- [Permissions](#13-permissions)
- [Usage](#usage)
- [Options](#21-options)
- [Handling callbacks](#22-handling-callbacks)
- [SDK error codes](#sdk-error-codes)
- [UI customization](CUSTOMIZATION.md)
## Getting started
### 1.1 Before you begin
Install or update Xcode to its latest version.
The SDK supports iOS 13+. The SDK has been built on Xcode 14.1 using Swift 5.8
### 1.2 Add the SDK dependency
#### Using Swift Package Manager
The SDK is available with Swift Package Manager, and you can include it in your project by adding the following package
repository URL:
##### Swift
```swift
dependencies: [
.package(url: "https://gitlab.myid.uz/myid-public-code/myid-ios-sdk.git", .branch("master"))
]
```
#### Using Cocoapods
The SDK is available on Cocoapods and you can include it in your projects by adding the following to your Podfile:
```ruby
pod 'MyIdSDK', '~> 2.4.92'
```
Run `pod install` to get the SDK.
#### [Manual installation](MANUAL_INSTALLATION.md)
### 1.3 Permissions
The SDK uses the device camera. You're required to have the following keys in your application's `Info.plist` file:
* `NSCameraUsageDescription`
```xml
<key>NSCameraUsageDescription</key>
<string>Required for document and facial capture</string>
```
**Note**: All keys will be required for app submission.
## Usage
``` swift
import UIKit
import MyIdSDK
Choose the flow that matches your integration scenario.
class ViewController : UIViewController {
---
override func viewDidLoad() {
super.viewDidLoad()
}
private func startMyId() {
let config = MyIdConfig()
config.clientId = /* Your Client ID */
config.clientHash = /* Your Client Hash */
config.clientHashId = /* Your Client Hash ID */
config.passportData = passportData
config.dateOfBirth = dateOfBirth
config.environment = .production
MyIdClient.start(withConfig: config, withDelegate: self)
}
}
## New Flow (Default) — SDK 3.1.3
extension ViewController: MyIdClientDelegate {
func onSuccess(result: MyIdResult) {
// Get face bitmap and result code
Use this flow if you are integrating MyID **for the first time**
or starting a **new backend session-based flow**.
print(result.code)
print(result.comparisonValue)
if let image = result.image {
print(img)
}
}
func onError(exception: MyIdException) {
// Get error message and code
- Docs: [New Flow documentation](docs/new/README.md)
- Customization: [Customization](docs/CUSTOMIZATION.md)
print(exception.code)
print(exception.message)
}
---
func onUserExited() {
// User left the SDK
}
}
```
### 2.1 Options
## Old Flow — SDK 2.4.92
Option | Notes | Default
--- | --- | ---
`clientId` | Client ID | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`clientHash` | Client Hash | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`clientHashId` | Client Hash ID | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`passportData` | Passport serial number or PINFL data | Optional
`dateOfBirth` | Date of birth in. Format: `dd.MM.yyyy` | Optional
`minAge` | To set a specific minimum age to use MyID service | 16
`sdkHash` | 32 characters long string (Note 1.2) | Optional
`externalId` | 36 characters long. Should match with UUID4 regex (Note 1.3) | Optional
`threshold` | The value can be in the range of `0.55` - `0.99` | 0.55
`environment` | Environment mode (Note 1.4) | MyIdEnvironment.production
`entryType` | Customizing the SDK entry types (Note 1.5) | MyIdEntryType.identification
`residency` | To set a specific residency type | MyIdResidency.resident
`locale` | To set a specific locale | MyIdLocale.uzbek
`cameraShape` | To set a specific camera shape (Note 1.6) | MyIdCameraShape.circle
Use this flow if you already have an existing
**clientId-based integration** in production.
**Note 1.1.** You can customize the screen for entering passport data and date of birth in your
application, in which case you can pass these parameters during initialization to the SDK, otherwise
the SDK requires the input of passport data and date of birth for user identification.
- Docs: [Old Flow documentation](docs/old/README.md)
- Customization: [Customization](docs/CUSTOMIZATION.md)
**Note 1.2.** If the `sdkHash` is empty, blank or string with length other than 32 has been
provided, we will continue showing the credentials screen.
---
**Note 1.3.** If the `externalId` is not empty, has a length of 36 characters and corresponds to the
regular expression UUID4, we will not display a [recommendation](images/screen01.jpg) screen. If a certain number of unsuccessful identification attempts (currently set to 5) occur in MyID within one hour and the `externalId` is not empty, SDK returns to the parent app error message as `message` in `MyIdException`.
## Changelog
**Note 1.4.** `MyIdEnvironment` contains **debug** and **production** modes.
- **debug** is used to sandbox.
- **production** is used to production.
**Note 1.5.** `MyIdEntryType` contains **identification** and **faceDetection** types.
- **identification** is used to identify the user through the MyID services.
- **faceDetection** is used to detect a face and returns a picture (bitmap).
**Note 1.6.** `MyIdCameraShape` contains **[circle](images/screen03.jpg)**
and **[ellipse](images/screen04.jpg)** types.
**Note 1.7.** If the user sends a **passport data** to the SDK, the **residency** must be handled by the **client**. If `residency = MyIdResidency.userDefined` is sent, the SDK will treat the user as **Non-Resident**.
**Note 1.8.** If the SDK **does not receive a passport data** and receives `residency = MyIdResidency.userDefined`, the SDK displays the **MyID passport input screen**. If the user enters a **PINFL**, the screen will show a **checkbox** allowing the user to select **Resident** or **Non-Resident**.
### 2.2 MyIdClientDelegate
```swift
extension ViewController: MyIdClientDelegate {
func onSuccess(result: MyIdResult) {
// Get face bitmap and result code
print(result.code)
print(result.comparisonValue)
if let image = result.image {
print(img)
}
}
func onError(exception: MyIdException) {
// Get error message and code
print(exception.code)
print(exception.message)
}
func onUserExited() {
// User left the SDK
}
}
```
| Method | Notes |
| -----|-------|
| `onSuccess` | `MyIdResult` contains information about the face captures made during the flow, result code and comparison value. |
| `onError` | Some error happened. `MyIdException` contains information about the error message and code |
| `onUserExited` | User left the SDK flow without completing it. |
## SDK error codes
You can view the full list of SDK error codes at:
👉 [Error Codes Documentation](https://docs.myid.uz/#/ru/embedded?id=javob-kodlar-uz-result_code)
The error code in the following list may appear during the call of SDK. The list below is for your
reference.
| Code | Error message
|:----------:|:-------------
| 102 | Camera access denied
| 103 | Error while retrieving data from server or SDK
| 122 | User banned
- [Changelog](CHANGELOG.md)
......@@ -60,7 +60,7 @@ appearance.buttonCornerRadius = <DESIRED_FLOAT_RADIUS_HERE>
#
![Screenshot](images/frame_1.jpg)
![Screenshot](images/frame_2.jpg)
![Screenshot](images/frame_3.jpg)
![Screenshot](images/frame_4.jpg)
![Screenshot](../images/frame_1.jpg)
![Screenshot](../images/frame_2.jpg)
![Screenshot](../images/frame_3.jpg)
![Screenshot](../images/frame_4.jpg)
### Manual Installation
![Xcode manual installation steps](images/xcode_manual_installation.png)
![Xcode manual installation steps](../images/xcode_manual_installation.png)
1. Select your project in Xcode.
......
# MyID iOS SDK
## Table of contents
- [Getting started](#getting-started)
- [Before you begin](#11-before-you-begin)
- [Add the SDK dependency](#12-add-the-sdk-dependency)
- [Permissions](#13-permissions)
- [Usage](#usage)
- [Options](#21-options)
- [Handling callbacks](#22-handling-callbacks)
- [SDK error codes](#sdk-error-codes)
## Getting started
### 1.1 Before you begin
Install or update Xcode to its latest version.
The SDK supports iOS 13+. The SDK has been built on Xcode 14.1 using Swift 5.8
### 1.2 Add the SDK dependency
#### Using Swift Package Manager
The SDK is available with Swift Package Manager, and you can include it in your project by adding the following package
repository URL:
##### Swift
```swift
dependencies: [
.package(url: "https://gitlab.myid.uz/myid-public-code/myid-ios-sdk.git", from: "3.1.3")
]
```
#### Using Cocoapods
The SDK is available on Cocoapods and you can include it in your projects by adding the following to your Podfile:
```ruby
pod 'MyIdSDK', '~> 3.1.3'
```
Run `pod install` to get the SDK.
### 1.3 Permissions
The SDK uses the device camera. You're required to have the following keys in your application's `Info.plist` file:
* `NSCameraUsageDescription`
```xml
<key>NSCameraUsageDescription</key>
<string>Required for document and facial capture</string>
```
**Note**: All keys will be required for app submission.
## Usage
``` swift
import UIKit
import MyIdSDK
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
private func startMyId() {
let config = MyIdConfig()
config.sessionId = /* Your Session ID */
config.clientHash = /* Your Client Hash */
config.clientHashId = /* Your Client Hash ID */
config.environment = .production
MyIdClient.start(withConfig: config, withDelegate: self)
}
}
extension ViewController: MyIdClientDelegate {
func onSuccess(result: MyIdResult) {
if let code = result.code {
print(code)
}
if let image = result.image {
print(img)
}
}
func onError(exception: MyIdException) {
print(exception.code)
print(exception.message)
}
func onUserExited() {
print("User exited")
}
func onEvent(event: MyIdEvent) {
print("Event: \(event.rawValue)")
}
}
```
### 2.1 Options
Option | Notes | Default
--- | --- | ---
`sessionId` | Session ID | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`clientHash` | Client Hash | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`clientHashId` | Client Hash ID | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`minAge` | To set a specific minimum age to use MyID service | 16
`environment` | Environment mode (Note 1.4) | MyIdEnvironment.production
`entryType` | Customizing the SDK entry types (Note 1.5) | MyIdEntryType.identification
`residency` | To set a specific residency type | MyIdResidency.resident
`locale` | To set a specific locale | MyIdLocale.uzbek
`cameraShape` | To set a specific camera shape (Note 1.6) | MyIdCameraShape.circle
`showErrorScreen` | To show error screen in case of an error | true
**Note 1.1.** `MyIdEnvironment` contains **debug** and **production** modes.
- **debug** is used to sandbox.
- **production** is used to production.
**Note 1.2.** `MyIdEntryType` contains **identification** and **faceDetection** types.
- **identification** is used to identify the user through the MyID services.
- **faceDetection** is used to detect a face and returns a picture (bitmap).
**Note 1.3.** `MyIdCameraShape` contains **[circle](images/screen03.jpg)**
and **[ellipse](images/screen04.jpg)** types.
**Note 1.4.** If the SDK **does not receive a passport data** and receives `residency = MyIdResidency.userDefined`, the SDK displays the **MyID passport input screen**. If the user enters a **PINFL**, the screen will show a **checkbox** allowing the user to select **Resident** or **Non-Resident**.
### 2.2 MyIdClientDelegate
```swift
extension ViewController: MyIdClientDelegate {
func onSuccess(result: MyIdResult) {
// Get face bitmap and result code
if let code = result.code {
print(code)
}
if let image = result.image {
print(img)
}
}
func onError(exception: MyIdException) {
// Get error message and code
print(exception.code)
print(exception.message)
}
func onUserExited() {
// User left the SDK
}
func onEvent(event: MyIdEvent) {
// Handle any events that may occur during the flow
}
}
```
| Method | Notes |
| -----|-------|
| `onSuccess` | `MyIdResult` contains information about the face captures made during the flow, result code and comparison value. |
| `onError` | Some error happened. `MyIdException` contains information about the error message and code |
| `onUserExited` | User left the SDK flow without completing it. |
| `onEvent` | This method is called when an event occurs during the flow. |
## SDK error codes
You can view the full list of SDK error codes at:
👉 [Error Codes Documentation](https://docs.myid.uz/#/ru/embedded?id=javob-kodlar-uz-result_code)
The error code in the following list may appear during the call of SDK. The list below is for your
reference.
| Code | Error message
|:----------:|:-------------
| 102 | Camera access denied
| 103 | Error while retrieving data from server or SDK
| 122 | User banned
# MyID iOS SDK
## Table of contents
- [Changelog](CHANGELOG.md)
- [Getting started](#getting-started)
- [Before you begin](#11-before-you-begin)
- [Add the SDK dependency](#12-add-the-sdk-dependency)
- [Permissions](#13-permissions)
- [Usage](#usage)
- [Options](#21-options)
- [Handling callbacks](#22-handling-callbacks)
- [SDK error codes](#sdk-error-codes)
## Getting started
### 1.1 Before you begin
Install or update Xcode to its latest version.
The SDK supports iOS 13+. The SDK has been built on Xcode 14.1 using Swift 5.8
### 1.2 Add the SDK dependency
#### Using Swift Package Manager
The SDK is available with Swift Package Manager, and you can include it in your project by adding the following package
repository URL:
##### Swift
```swift
dependencies: [
.package(url: "https://gitlab.myid.uz/myid-public-code/myid-ios-sdk.git", .branch("master"))
]
```
#### Using Cocoapods
The SDK is available on Cocoapods and you can include it in your projects by adding the following to your Podfile:
```ruby
pod 'MyIdSDK', '~> 2.4.92'
```
Run `pod install` to get the SDK.
#### [Manual installation](MANUAL_INSTALLATION.md)
### 1.3 Permissions
The SDK uses the device camera. You're required to have the following keys in your application's `Info.plist` file:
* `NSCameraUsageDescription`
```xml
<key>NSCameraUsageDescription</key>
<string>Required for document and facial capture</string>
```
**Note**: All keys will be required for app submission.
## Usage
``` swift
import UIKit
import MyIdSDK
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
private func startMyId() {
let config = MyIdConfig()
config.clientId = /* Your Client ID */
config.clientHash = /* Your Client Hash */
config.clientHashId = /* Your Client Hash ID */
config.passportData = passportData
config.dateOfBirth = dateOfBirth
config.environment = .production
MyIdClient.start(withConfig: config, withDelegate: self)
}
}
extension ViewController: MyIdClientDelegate {
func onSuccess(result: MyIdResult) {
// Get face bitmap and result code
print(result.code)
print(result.comparisonValue)
if let image = result.image {
print(img)
}
}
func onError(exception: MyIdException) {
// Get error message and code
print(exception.code)
print(exception.message)
}
func onUserExited() {
// User left the SDK
}
}
```
### 2.1 Options
Option | Notes | Default
--- | --- | ---
`clientId` | Client ID | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`clientHash` | Client Hash | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`clientHashId` | Client Hash ID | Provided by MyID sales team. Mandatory, if using entryType = MyIdEntryType.identification
`passportData` | Passport serial number or PINFL data | Optional
`dateOfBirth` | Date of birth in. Format: `dd.MM.yyyy` | Optional
`minAge` | To set a specific minimum age to use MyID service | 16
`sdkHash` | 32 characters long string (Note 1.2) | Optional
`externalId` | 36 characters long. Should match with UUID4 regex (Note 1.3) | Optional
`threshold` | The value can be in the range of `0.55` - `0.99` | 0.55
`environment` | Environment mode (Note 1.4) | MyIdEnvironment.production
`entryType` | Customizing the SDK entry types (Note 1.5) | MyIdEntryType.identification
`residency` | To set a specific residency type | MyIdResidency.resident
`locale` | To set a specific locale | MyIdLocale.uzbek
`cameraShape` | To set a specific camera shape (Note 1.6) | MyIdCameraShape.circle
**Note 1.1.** You can customize the screen for entering passport data and date of birth in your
application, in which case you can pass these parameters during initialization to the SDK, otherwise
the SDK requires the input of passport data and date of birth for user identification.
**Note 1.2.** If the `sdkHash` is empty, blank or string with length other than 32 has been
provided, we will continue showing the credentials screen.
**Note 1.3.** If the `externalId` is not empty, has a length of 36 characters and corresponds to the
regular expression UUID4, we will not display a [recommendation](images/screen01.jpg) screen. If a certain number of unsuccessful identification attempts (currently set to 5) occur in MyID within one hour and the `externalId` is not empty, SDK returns to the parent app error message as `message` in `MyIdException`.
**Note 1.4.** `MyIdEnvironment` contains **debug** and **production** modes.
- **debug** is used to sandbox.
- **production** is used to production.
**Note 1.5.** `MyIdEntryType` contains **identification** and **faceDetection** types.
- **identification** is used to identify the user through the MyID services.
- **faceDetection** is used to detect a face and returns a picture (bitmap).
**Note 1.6.** `MyIdCameraShape` contains **[circle](images/screen03.jpg)**
and **[ellipse](images/screen04.jpg)** types.
**Note 1.7.** If the user sends a **passport data** to the SDK, the **residency** must be handled by the **client**. If `residency = MyIdResidency.userDefined` is sent, the SDK will treat the user as **Non-Resident**.
**Note 1.8.** If the SDK **does not receive a passport data** and receives `residency = MyIdResidency.userDefined`, the SDK displays the **MyID passport input screen**. If the user enters a **PINFL**, the screen will show a **checkbox** allowing the user to select **Resident** or **Non-Resident**.
### 2.2 MyIdClientDelegate
```swift
extension ViewController: MyIdClientDelegate {
func onSuccess(result: MyIdResult) {
// Get face bitmap and result code
print(result.code)
print(result.comparisonValue)
if let image = result.image {
print(img)
}
}
func onError(exception: MyIdException) {
// Get error message and code
print(exception.code)
print(exception.message)
}
func onUserExited() {
// User left the SDK
}
}
```
| Method | Notes |
| -----|-------|
| `onSuccess` | `MyIdResult` contains information about the face captures made during the flow, result code and comparison value. |
| `onError` | Some error happened. `MyIdException` contains information about the error message and code |
| `onUserExited` | User left the SDK flow without completing it. |
## SDK error codes
You can view the full list of SDK error codes at:
👉 [Error Codes Documentation](https://docs.myid.uz/#/ru/embedded?id=javob-kodlar-uz-result_code)
The error code in the following list may appear during the call of SDK. The list below is for your
reference.
| Code | Error message
|:----------:|:-------------
| 102 | Camera access denied
| 103 | Error while retrieving data from server or SDK
| 122 | User banned
......@@ -30,8 +30,6 @@
/* Begin PBXFileSystemSynchronizedRootGroup section */
7EE673D52D6309D700E08D7D /* myid-ios-parent */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
path = "myid-ios-parent";
sourceTree = "<group>";
};
......@@ -376,8 +374,8 @@
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://gitlab.myid.uz/myid-public-code/myid-ios-sdk.git";
requirement = {
branch = master;
kind = branch;
kind = exactVersion;
version = 3.1.3;
};
};
/* End XCRemoteSwiftPackageReference section */
......
......@@ -67,20 +67,12 @@ struct FormSection: View {
spacing: 16
) {
Group {
TextField("Passport Data", text: $viewModel.passportData)
TextField("Date of Birth", text: $viewModel.dateOfBirth)
TextField("External ID", text: $viewModel.externalId)
TextField("Session ID", text: $viewModel.sessionId)
}
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding(.horizontal)
Group {
Picker("Residency", selection: $viewModel.residency) {
Text("Resident").tag(MyIdResidency.resident)
Text("Non-Resident").tag(MyIdResidency.nonResident)
Text("User defined").tag(MyIdResidency.userDefined)
}
Picker("Environment", selection: $viewModel.environment) {
Text("Production").tag(MyIdEnvironment.production)
Text("Debug").tag(MyIdEnvironment.debug)
......
......@@ -8,10 +8,7 @@ import MyIdSDK
@objc public class ViewModel: NSObject, ObservableObject {
@Published var passportData: String = ""
@Published var dateOfBirth: String = ""
@Published var externalId: String = ""
@Published var residency: MyIdResidency = .resident
@Published var sessionId: String = ""
@Published var environment: MyIdEnvironment = .debug
@Published var entryType: MyIdEntryType = .identification
@Published var locale: MyIdLocale = .uzbek
......@@ -21,22 +18,18 @@ import MyIdSDK
@Published var message: String = ""
@objc public func startMyId() {
let devClientId = "your_dev_client_id"
let devSessionId = "your_dev_session_id"
let devClientHash = "your_dev_client_hash"
let devClientHashId = "your_dev_client_hash_id"
let prodClientId = "your_prod_client_id"
let prodSessionId = "your_prod_session_id"
let prodClientHash = "your_prod_client_hash"
let prodClientHashId = "your_prod_client_hash_id"
let config = MyIdConfig()
config.clientId = environment == .production ? prodClientId : devClientId
config.sessionId = environment == .production ? prodSessionId : devSessionId
config.clientHash = environment == .production ? prodClientHash : devClientHash
config.clientHashId = environment == .production ? prodClientHashId : devClientHashId
config.passportData = passportData
config.dateOfBirth = dateOfBirth
config.externalId = externalId
config.residency = residency
config.environment = environment
config.entryType = entryType
config.locale = locale
......@@ -50,12 +43,12 @@ import MyIdSDK
@objc extension ViewModel: MyIdClientDelegate {
public func onSuccess(result: MyIdResult) {
message = result.code ?? ""
message = result.code
image = result.image
}
public func onError(exception: MyIdException) {
message = exception.message ?? ""
message = exception.message
image = nil
}
......@@ -63,4 +56,7 @@ import MyIdSDK
message = "User exited"
image = nil
}
public func onEvent(event: MyIdEvent) {
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment