diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bcad80..93cd027 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 30.05.2024 5.2.0 + +## Added +- Enhanced security for Dynamic Liveness (previously GPA). + +## Fixed +- **FireFox Mobile**: Fixed an issue with Firefox Mobile not always accepting given camera video constraints. +- **Landscape Orientation**: Landscape Orientation: Fixed instances where streaming could start while the device was in landscape mode, even though landscape orientation was blocked. +- **Assets**: Fixed issue where double `//` was included in some assets fetched by the Web SDK. +- **Android Chrome Desktop Mode**: Fixed an issue where the SDK would not start in desktop mode with Chrome for Android. +- **iOS SVG Element** Fixed an issue where an SVG element was appended to the body with non-zero dimensions. + ## 08.04.2024 5.1.1 ## Fixed diff --git a/README.md b/README.md index cf2f6da..68d6c31 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![iProov: Biometric Face Verification for Remote Identity Assurance](https://github.com/iProov/web/raw/master/images/banner.png) -# iProov Biometrics Web SDK v5.1.1 +# iProov Biometrics Web SDK v5.2.0 ## 📖 Table of contents @@ -238,7 +238,7 @@ You can customize the look and feel of the main layout by changing the following Color option changes introduced in [v4.0.0](https://github.com/iProov/web/releases/tag/v4.0.0): | Color Option | Description | -| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| ---------------------------------------- |------------------------------------------------------------------------------------------------------------------------------------------------------| | **title_text_color** | Adjusts the color of the text that can be added above the oval (by default there is no text here - see the custom_title option for more information) | | **surround_color** | Adjusts the color of the surroundings to the centre oval. It also affects the color of the mask in Liveness with `clear` or `blur` filter. | | **prompt_text_color** | Adjusts the color of the text visible in the centre prompt of the screen | @@ -449,22 +449,22 @@ To integrate with our localization feature, use special class names in your slot The following is the complete list of slots can be used with the `` web component and have associated [events](#-events): -| Slot | Description | -| -------------------------- | --------------------------------------------------------------------------------------------- | -| **button** \* | Element that a user taps or clicks on to launch into fullscreen and start iProov | -| **camera_selector** \*\* | Label and dropdown populated with available cameras, if multiple cameras are detected. | -| **canceled** | State displayed to the user when they exit fullscreen before iProoving | -| **error** | State displayed to the user in the event of an error | -| **failed** | State displayed to the user when the user failed iProov | -| **grant_button** \* | Element that user taps or clicks to grant camera permission | -| **grant_permission** | State displayed to the user when camera or motion permission is unknown and not blocked | -| **no_camera** | State displayed to the user when there is no camera | -| **passed** | State displayed to the user when the user passed iProov | -| **permission_denied** | State displayed to the user when camera permission has been blocked | -| **progress** | State displayed to the user when streaming has completed and iProov is processing the result | -| **ready** | State displayed to the user when the component is ready to start the main iProov user journey | -| **rotate_portrait** \*\*\* | State displayed to the user when a handheld device is not in portrait orientation | -| **unsupported** | State displayed to the user when their browser is not supported | +| Slot | Description | +| ------------------------ | ---------------------------------------------------------------------------------------------------------- | +| **button** \* | Element that a user taps or clicks on to launch into fullscreen and start iProov | +| **camera_selector** \*\* | Label and dropdown populated with available cameras, if multiple cameras are detected. | +| **canceled** | State displayed to the user when they exit fullscreen before iProoving | +| **error** | State displayed to the user in the event of an error | +| **failed** | State displayed to the user when the user failed iProov | +| **grant_button** \* | Element that user taps or clicks to grant camera permission | +| **grant_permission** | State displayed to the user when camera or motion permission is unknown and not blocked | +| **no_camera** | State displayed to the user when there is no camera | +| **passed** | State displayed to the user when the user passed iProov | +| **permission_denied** | State displayed to the user when camera permission has been blocked | +| **progress** | State displayed to the user when streaming has completed and iProov is processing the result | +| **ready** | State displayed to the user when the component is ready to start the main iProov user journey | +| **rotate_portrait** \*\*\* | State displayed to the user when a handheld device is not in portrait orientation | +| **unsupported** | State displayed to the user when their browser is not supported | > \* Interactive elements such as buttons that start full screen and cameras require a user gesture enforced by the browser. Using JavaScript to apply clicks is not recommended within your user journey and may cause unexpected errors or performance degradation. > See our [User Gestures Wiki](https://github.com/iProov/web/wiki/User-Gestures) for more details. @@ -492,13 +492,13 @@ The available events are detailed below with any extra properties that are suppl | Event | Extra Properties | Description | | ----------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **canceled** | _feedback, reason_ | User has canceled iProov by exiting fullscreen | +| **canceled** | _feedback, reason_ | User has canceled iProov by exiting fullscreen | | **connecting** | None | The SDK is connecting to the server. You should provide an indeterminate progress indicator to let the user know that the connection is taking place. | | **connected** | None | The SDK has connected. You should hide any progress indication at this point. | | **error** | _feedback, reason_ | iProov encountered an error while processing the authentication | | **failed** | _type, passed, feedback, reason_ | Authentication was unsuccessful, the user needs to try again | | **multiple_cameras** \* | _devices, device_selector, slot, label_ | If `enable_camera_selector` is `true` returns an array of devices if more than 1 video device is detected | -| **no_camera** | _feedback, reason_ | No video input was detected on the user's device | +| **no_camera** | _feedback, reason_ | No video input was detected on the user's device | | **passed** | _type, feedback, reason, passed_ | Authentication was successful, the result can now be validated | | **permission** | _reason_ | Camera permission is unknown & not blocked, show permission | | **permission_denied** | _feedback, reason_ | User has blocked access to the camera | @@ -513,20 +513,20 @@ The available events are detailed below with any extra properties that are suppl Properties of the event's **detail** payload: -| Property | Events | Description | -| -------------------- | -------------------------------------- | ---------------------------------------------------------- | -| **token** | All | The token associated with the authentication attempt | -| **type** (†) | _passed, failed_ | The type of authentication (`enrol` or `verify`) | -| **passed** | _passed, failed_ | Boolean value whether the result passed or failed | -| **frame** (†) (\*) | _passed, failed_ | An `ImageData` from the scanning process | -| **progress** | _progress_ | A percentage (between 0 and 100) representing the progress | -| **message** | _progress_ | A user-friendly description of the current progress stage | +| Property | Events | Description | +| -------------------- | --------------------------------------- | ---------------------------------------------------------- | +| **token** | All | The token associated with the authentication attempt | +| **type** (†) | _passed, failed_ | The type of authentication (`enrol` or `verify`) | +| **passed** | _passed, failed_ | Boolean value whether the result passed or failed | +| **frame** (†) (\*) | _passed, failed_ | An `ImageData` from the scanning process | +| **progress** | _progress_ | A percentage (between 0 and 100) representing the progress | +| **message** | _progress_ | A user-friendly description of the current progress stage | | **feedback** | _canceled, failed, error, unsupported_ | A fixed feedback code for making logical decisions | | **reason** | _canceled, failed, error, unsupported_ | An English description of the reason for the event | -| **slot** | _multiple_cameras_ | The relevant slot for the event, for ease of use | -| **devices** | _multiple_cameras_ | Array of suitable `InputDevice`s for imagery capture | -| **device_selector** | _multiple_cameras_ | The multiple camera selection `` element | +| **is_native_bridge** | All | Boolean value if event originates from the native bridge | > - The `frame` property is for UI/UX purposes only and is only available if enabled on your service provider and token configuration. Imagery upon which authentication may later rely must be obtained from the token validate endpoint by a secure server-to-server call. > - The **type** and **frame** properties are not available when running in Native Bridge mode. @@ -563,15 +563,15 @@ In all events, corresponding _reason_ field can be displayed to the user. > ⚠️ This declares support for the new codes in the SDK. It does NOT define when the new codes will be produced by our servers. > This capability will be delivered in the future for Liveness Assurance. -| Feedback | Reason | -| ------------------ | ----------------------------------------------------- | -| **eyes_closed** | Keep your eyes open | -| **multiple_faces** | Ensure only one person is visible | -| **obscured_face** | Remove any face coverings | -| **sunglasses** | Remove sunglasses | -| **too_bright** | Ambient light too strong or screen brightness too low | -| **too_dark** | Your environment appears too dark | -| **unknown** | Try again | +| Feedback | Reason | +| ----------------- | ----------------------------------------------------- | +| **eyes_closed** | Keep your eyes open | +| **multiple_faces**| Ensure only one person is visible | +| **obscured_face** | Remove any face coverings | +| **sunglasses** | Remove sunglasses | +| **too_bright** | Ambient light too strong or screen brightness too low | +| **too_dark** | Your environment appears too dark | +| **unknown** | Try again | ### Error Feedback Codes @@ -971,6 +971,9 @@ The `native_sdk_options` setting accepts a base64 encoded JSON object of iProov // Example shows passing title_text_color and a title to the Native SDK iProovMe.setAttribute("native_sdk_options", btoa(JSON.stringify({ title_text_color: "#2D2D2D", title: "NB Test" }))) ``` + +Note: Native SDK implementations can only accept colour values in `#RRGGBB` and `#AARRGGBB` formats. + #### Filters When configuring the `filter` options, you will need to pass these in as objects via the `native_sdk_options` option. See the related [Android SDK filter docs]([#-filter-options](https://docs.iproov.com/docs/Content/ImplementationGuide/biometric-sdk/android/sdk-android-customize-ui.htm?Highlight=filter)) or [iOS SDK filter docs](https://docs.iproov.com/docs/Content/ImplementationGuide/biometric-sdk/ios/sdk-ios-customize-ui.htm?Highlight=filter) for more details on configuring filters. @@ -985,6 +988,7 @@ Integrations via iframes are supported by the Web SDK but please note that you m **Please note the following:** - Iframe integrations are not supported in iOS versions `14` and lower due to iOS not supporting motion permissions in iframes. All devices attempting to run iProov will be marked as `unsupported`. +- Due to browser policies, it is also required to pass `allowfullscreen="true"` as well as the `allow` attribute. - Its important to ensure the iframe is expanded to 100% width and height. See an example of this below. ```html @@ -992,6 +996,7 @@ Integrations via iframes are supported by the Web SDK but please note that you m style="width: 100vw; height: 100vh; border: 0" src="https://your-iframe-target.example" allow="camera;fullscreen;accelerometer;gyroscope;magnetometer;" + allowfullscreen="true" > ``` @@ -1054,5 +1059,5 @@ For further help with integrating the SDK, please contact [support@iproov.com](m - [Safari 15.0 tab crashes when requesting WebGL context](https://bugs.webkit.org/show_bug.cgi?id=231423) - [Safari 15.0 unable to render webcam to canvas context](https://github.com/mrdoob/three.js/issues/22582#issuecomment-938710902) - Flickering can occur while cropping with `clear` and `blur` SDK filters (only observed on MacBook Pro M2 with an external monitor) - +- Native Bridge integrations can only accept colour inputs in `#RRGGBB` and `#AARRGGBB` formats