Reactivation (Forgot PIN)
After Activation if user forgets their pin then by Reactivation the user can generate a new pin by providing a new activation code and pin - where the activation code can be generated on the SSMS portal. See the test case description on how to do that.
Reactivation flow consists of these events.
Reactivation event flow-diagram
The following diagram shows the working of reactivation.
iOS/Swift
The user needs to trigger a ReactivationEvent, so for Swift you can trigger that by this snippet:
Triggering ReactivationEvent Event (Swift)
    static func performReactivateUser(reactivateRequest: ReactivateUserRequest, completion: @escaping (ActionResult) -> Void) {
        
        let userIdentifier = KsUserIdentifier(tenantId: reactivateRequest.tenantId,
                                              userId: reactivateRequest.userId)
        let reactivateEvent = KSMReactivationEvent(userIdentifier: userIdentifier,
                                             activationCode: reactivateRequest.activationCode,
                                             pin: reactivateRequest.pin,
                                             enableAutoLogin: reactivateRequest.enableAutoLogin)
        
        let time = CallTimer(event: reactivateEvent)
        MasterControllerAdapter.sharedInstance.sendEvent2MasterController(event: reactivateEvent) { event in
            let duration = time.stop()
            let actionResult: ActionResult
            if let resultEvent = event as? KSMReactivationResultEvent {
                
                let result = handleReactivateUserStatus(status: resultEvent.reactivationStatus)
                actionResult = ActionResult(title: "reactivationModel.title".localized(table: localizedTable),
                                            success: result.success,
                                            error: result.errorText?.localized(table: localizedTable),
                                            duration: duration,
                                            event: event)
            } else if let resultEvent = event as? KSMLoginResultEvent {
                let result = handleReactivateUserStatus(status: resultEvent.loginStatus)
                actionResult = ActionResult(title: "reactivationModel.title".localized(table: localizedTable),
                                            success: result.success,
                                            error: result.errorText?.localized(table: localizedTable),
                                            duration: duration,
                                            event: event)
            } else {
                actionResult = ActionResult(title: "reactivationModel.title".localized(table: localizedTable),
                                                success: false,
                                                error: "reactivationModel.status.unexpectedEvent".localized(table: localizedTable),
                                                duration: duration,
                                                event: nil)
            }
            
            EventLogObject(actionResult: actionResult,
                           component: localizedTable)
            completion(actionResult)
        }
    }
Android/Kotlin
Triggering ReactivationEvent Event (Kotlin)
fun triggerReactivationEvent(
    userIdentifier: UserIdentifier,
    activationCode: String,
    pin: String,
    autoLogin: Boolean
) {
    val reactivationEvent = ReactivationEvent(userIdentifier, activationCode, pin, autoLogin)
    synchronousEventHandler.postEvent(reactivationEvent)?.then {
        // handle result
    }
}
All Platforms
As response to ReactivationEvent the Master Controller sends a ReactivationResultEvent with appropriate status.