From e472987f08ecf23b143d10b640d2207c657fd8f3 Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Mon, 26 Feb 2024 18:51:58 +0100 Subject: [PATCH 01/12] [WIP] Structuring README --- .gitignore | 1 + LICENSE.md | 48 +++++++ Nuget Packages/iProov.NET.Android/README.md | 118 ++++++++++++++++++ .../iProov.NET.Android.9.0.3.nupkg | Bin .../iProov.NET.MAUI.1.0.0.nupkg | Bin Nuget Packages/iProov.NET.iOS/README.md | 60 +++++++++ .../iProov.NET.iOS.11.0.3.nupkg | Bin README.md | 118 ++++++++++++++++++ 8 files changed, 345 insertions(+) create mode 100644 Nuget Packages/iProov.NET.Android/README.md rename Nuget Packages/{ => iProov.NET.Android}/iProov.NET.Android.9.0.3.nupkg (100%) rename Nuget Packages/{ => iProov.NET.MAUI}/iProov.NET.MAUI.1.0.0.nupkg (100%) create mode 100644 Nuget Packages/iProov.NET.iOS/README.md rename Nuget Packages/{ => iProov.NET.iOS}/iProov.NET.iOS.11.0.3.nupkg (100%) diff --git a/.gitignore b/.gitignore index 67db5ed..75017b8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ test-results/ # Credentials file ExampleAppMAUI/Credentials.cs +ExampleAppMAUI/Credentials.example.cs # Mac bundle stuff *.dmg diff --git a/LICENSE.md b/LICENSE.md index 8b13789..845f9e8 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1 +1,49 @@ +# iProov.NET.iOS +Please refer to the iOS Biometrics SDK license [here](https://github.com/iProov/ios/blob/master/LICENSE.md). + +# iProov.NET.Android + +Please refer to the Android Biometrics SDK license [here](https://github.com/iProov/android/blob/master/LICENSE.md). + +# iProov.NET.MAUI +Please refer to the aformentioned [Android](https://github.com/iProov/android/blob/master/LICENSE.md) and [iOS](https://github.com/iProov/ios/blob/master/LICENSE.md) licenses. + +# API Client/Sample Code + +Copyright 2021 iProov Limited + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +This library makes use of the following third party libraries: + +### Newtonsoft.Json + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Nuget Packages/iProov.NET.Android/README.md b/Nuget Packages/iProov.NET.Android/README.md new file mode 100644 index 0000000..1456d41 --- /dev/null +++ b/Nuget Packages/iProov.NET.Android/README.md @@ -0,0 +1,118 @@ +# iProov.NET.Android NuGet + +## Introduction + +The iProov.NET.Android NuGet enables you to integrate iProov's SDK into your .NET Android projects. + +This NuGet wraps iProov's existing native [Android](https://github.com/iProov/android) SDK behind a .NET interface for use from within your .NET app. + + +## How to use it + +1. Using the NuGet Package Manager, add the [iProov.NET.Android](https://www.nuget.org/packages/iProov.Android/) package to your project. For further instructions on how to install and manage packages, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). + +2. Import the package into your project with `using iProov.NET.Android;` + +3. Create an instance of IProovCallbackLauncher + + ```csharp + IProovCallbackLauncher iProovLauncher = new IProovCallbackLauncher(); + ``` + +4. Create a private class which implements `IProovCallbackLauncher.IListener` to handle the callbacks from the Android SDK: + + ```csharp + private IProovListener listener = new IProovListener(); + + private class IProovListener : Java.Lang.Object, IProov.IListener + { + + public void OnConnected() + { + // Called when the SDK is connecting to the server. You should provide an indeterminate + // progress indication to let the user know that the connection is being established. + } + + public void OnConnecting() + { + // The SDK has connected, and the iProov user interface will now be displayed. You + // should hide any progress indication at this point. + } + + public void OnCanceled(IProov.Canceler canceler) + { + // Either the user canceled iProov by pressing the Close button at the top right or + // the Home button (canceler == USER) + // Or the app canceled using Session.cancel() (canceler = APP). + // You should use this to determine the next step in your flow. + } + + public void OnError(IProovException error) + { + // The user was not successfully verified/enrolled due to an error (e.g. lost internet connection) + // along with an IProovException. + // It will be called once, or never. + } + + public void OnFailure(IProov.FailureResult result) + { + // The user was not successfully verified/enrolled, as their identity could not be verified, + // or there was another issue with their verification/enrollment. A reason (as a string resource id) + // is provided as to why the claim failed, along with a feedback code from the back-end. + + var feedbackCode = result.FeedbackCode; + var reason = result.Reason.Description; + } + + public void OnProcessing(double progress, string message) + { + // The SDK will update your app with the progress of streaming to the server and authenticating + // the user. This will be called multiple time as the progress updates. + } + + public void OnSuccess(IProov.SuccessResult result) + { + // The user was successfully verified/enrolled and the token has been validated. + // You must always independently validate the token server-side (using the /validate API call) + // before performing any authenticated user actions. + } + + } + + ``` + + > Alternatively you could just implement `IProov.IListener` on your `Activity` class. + +5. You must register the iProov listener when your Activity is created: + + ```csharp + + IProovCallbackLauncher iProovLauncher = new IProovCallbackLauncher(); + IProovListener listener = new IProovListener(); + + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + iProovLauncher.Listener = listener; + + // ...continue your activity setup ... + } + ``` + + ...and unregister it when destroyed: + + ```csharp + protected override void OnDestroy() + { + iProovLauncher.Listener = null; + base.OnDestroy(); + } + ``` + +5. You can now launch iProov by calling: + + ```csharp + iProovLauncher.Launch(this, "wss://eu.rp.secure.iproov.me/ws", token, new IProov.Options()); // Substitute the streaming URL as appropriate + ``` + +👉 You should now familiarise yourself with the [iProov Android SDK documentation](https://github.com/iProov/android) which provides comprehensive details about the available customization options and other important details regarding the iOS SDK usage. diff --git a/Nuget Packages/iProov.NET.Android.9.0.3.nupkg b/Nuget Packages/iProov.NET.Android/iProov.NET.Android.9.0.3.nupkg similarity index 100% rename from Nuget Packages/iProov.NET.Android.9.0.3.nupkg rename to Nuget Packages/iProov.NET.Android/iProov.NET.Android.9.0.3.nupkg diff --git a/Nuget Packages/iProov.NET.MAUI.1.0.0.nupkg b/Nuget Packages/iProov.NET.MAUI/iProov.NET.MAUI.1.0.0.nupkg similarity index 100% rename from Nuget Packages/iProov.NET.MAUI.1.0.0.nupkg rename to Nuget Packages/iProov.NET.MAUI/iProov.NET.MAUI.1.0.0.nupkg diff --git a/Nuget Packages/iProov.NET.iOS/README.md b/Nuget Packages/iProov.NET.iOS/README.md new file mode 100644 index 0000000..62464ef --- /dev/null +++ b/Nuget Packages/iProov.NET.iOS/README.md @@ -0,0 +1,60 @@ +## Xamarin.iOS + +1. Using the NuGet Package Manager, add the [iProov.iOS](https://www.nuget.org/packages/iProov.iOS/) package to your Xamarin project. For further instructions on how to do this, [see here](https://docs.microsoft.com/en-us/visualstudio/mac/nuget-walkthrough?toc=%2Fnuget%2Ftoc.json&view=vsmac-2019#find-and-install-a-package). + +2. Add a "Privacy - Camera Usage Description" entry to your Info.plist file with the reason why your app requires camera access (e.g. "To iProov you in order to verify your identity.") + +3. Import the package into your project with `using iProov.iOS;`. + +4. Once you have obtained a token (either via the .NET API Client or other means), you can launch the iProov iOS SDK as follows: + + ```csharp + IProov.LaunchWithStreamingURL("wss://eu.rp.secure.iproov.me/ws", token, new IPOptions(), // Substitute streaming URL as appropriate + connecting: () => + { + // 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: () => + { + // The SDK has connected, and the iProov user interface will now be displayed. You should hide + // any progress indication at this point. + }, + processing: (progress, message) => + { + // The SDK will update your app with the progress of streaming to the server and authenticating + // the user. This will be called multiple time as the progress updates. + }, + success: (result) => + { + // The user was successfully verified/enrolled and the token has been validated. + // You can access the following properties: + var token = result.Token; // The token passed back will be the same as the one passed in to the original call + var frame = result.Frame; // An optional image containing a single frame of the user, if enabled for your service provider + }, + canceled: (canceler) => + { + // Either the user canceled iProov by pressing the Close button at the top left or sending + // the app to the background. (canceler == USER) + // Or the app canceled using Session.cancel() (canceler == APP). + // You should use this to determine the next step in your flow. + }, + failure: (result) => + { + // The user was not successfully verified/enrolled, as their identity could not be verified, + // or there was another issue with their verification/enrollment. A reason (as a string) + // is provided as to why the claim failed, along with a feedback code from the back-end. + var reason = result.Reason + var description = result.LocalizedDescription; + }, + error: (error) => + { + // The user was not successfully verified/enrolled due to an error (e.g. lost internet connection). + // You will be provided with an NSError. You can check the error code against the IPErrorCode constants + // to determine the type of error. + // It will be called once, or never. + } + ); + ``` + +👉 You should now familiarise yourself with the [iProov iOS SDK documentation](https://github.com/iProov/ios) which provides comprehensive details about the available customization options and other important details regarding the iOS SDK usage. \ No newline at end of file diff --git a/Nuget Packages/iProov.NET.iOS.11.0.3.nupkg b/Nuget Packages/iProov.NET.iOS/iProov.NET.iOS.11.0.3.nupkg similarity index 100% rename from Nuget Packages/iProov.NET.iOS.11.0.3.nupkg rename to Nuget Packages/iProov.NET.iOS/iProov.NET.iOS.11.0.3.nupkg diff --git a/README.md b/README.md index 8b13789..189586e 100644 --- a/README.md +++ b/README.md @@ -1 +1,119 @@ +![iProov: Flexible authentication for identity assurance](images/banner.jpg) +# iProov Biometrics .NET SDK + +## Table of contents + +- [Introduction](#introduction) +- [Repository contents](#repository-contents) +- [Upgrading from earlier versions](#upgrading-from-earlier-versions) +- [Registration](#registration) +- [Xamarin.iOS](#xamarin--ios) +- [Xamarin.Android](#xamarin--android) +- [API Client](#api-client) +- [Sample code](#sample-code) + +## Introduction + +The iProov .NET SDK enables you to integrate iProov into your .NET Android / iOS / MAUI projects. The iProov's native SDK for [iOS](https://github.com/iProov/ios) (Swift) and [Android](https://github.com/iProov/android) (Java / Kotlin) are wrapped behind a .NET interface for their use within .NET apps. Given the differences in the implementation between these .NET interfaces, the iProov.NET.MAUI wraps both interfaces into a unified .NET version of the iProov API to ease the integration of the iProov Biometric SDKs in MAUI developments. + +We also provide a .NET API Client written in C# to call our [REST API v2](https://eu.rp.secure.iproov.me/docs.html) from a .NET Standard Library, which can be used from your Xamarin app to request tokens directly from the iProov API (note that this is not a secure way of getting tokens, and should only be used for demo/debugging purposes). + +This documentation is focused on the **iProov.NET.MAUI** package. There's nuget-specific documentation available for [iProov.NET.Android](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.Android/) and [iProov.NET.iOS](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.iOS/) packages. + +## iProov.NET.MAUI + + + +## Repository contents + +The iProov Xamarin SDK is provided via this repository, which contains the following: + +- **README.md** - This document +- **NuGet Packages** - Directory containing the NuGet packages for Xamarin.iOS & Xamarin.Android +- **APIClient** - C# project with the source code for the .NET API Client +- **Example** - Sample code demonstrating use of the Xamarin.iOS & Xamarin.Android bindings together with the .NET API Client + +## Upgrading from earlier versions + +If you're already using an older version of the Xamarin SDK, consult the [Upgrade Guide](https://github.com/iProov/xamarin/wiki/Upgrade-Guide) for detailed information about how to upgrade your app. + +## Registration + +You can obtain API credentials by registering on the [iProov Partner Portal](https://www.iproov.net). + + +## API Client + +The .NET API client provides a convenient wrapper to call iProov's REST API v2 from a .NET Standard Library. It is a useful tool to assist with testing, debugging and demos, but should not be used in production mobile apps. You could also adapt this code to run on your back-end to perform server-to-server calls. + +> ⚠️ **SECURITY NOTICE:** Use of the .NET API Client requires providing it with your API secret. **You should never embed your API secret within a production app.** + +### Functionality + +The .NET API Client supports the following functionality: + +- `GetToken()` - Get an enrol/verify token +- `EnrolPhoto()` - Perform a photo enrolment (either from an electronic or optical image). The image must be provided in JPEG format. +- `Validate()` - Validate an existing token against the provided User ID. +- `EnrolPhotoAndGetVerifyToken()` - A convenience method which first gets an enrolment token, then enrols the photo against that token, and then gets a verify token for the user to iProov against. + +### Installation + +To add the .NET API Client to your project, add it as a sub-project to your solution, and then [add a reference](https://docs.microsoft.com/en-us/visualstudio/mac/managing-references-in-a-project?view=vsmac-2019) to the **APIClient** project from your app project. + +You will also need to [add](https://docs.microsoft.com/en-us/visualstudio/mac/nuget-walkthrough?view=vsmac-2019) the **Newtonsoft.Json** NuGet package to your project as well. + +You can now import the API Client with `using iProov.APIClient;`. + +### Usage examples + +We will now run through a couple of common use-cases with the API Client. All the API Client source code is provided, so you can understand how it works and adapt it accordingly. + +#### Getting a token + +The most basic thing you can do with the API Client is get a token to either enrol or verify a user, using either iProov's Genuine Presence Assurance or Liveness Assurance. + +This is achieved as follows: + +```csharp +var token = await apiClient.GetToken(AssuranceType.GenuinePresence, ClaimType.Enrol, "{{ user id }}"); +``` + +You can then launch the iProov SDK with this token. + +#### Performing a photo enrol (on iOS) + +To photo enrol a user, you would first generate an enrolment token, then enrol the photo against the user, then generate a verification token. + +Fortunately the .NET API Client provides a helper method which wraps all three calls into one convenience method. + +The first thing you will need to do is convert your iOS native `UIImage` into a .NET `byte[]` which can be handled by the cross-platform API Client: + +```csharp +var uiImage = UIImage.FromBundle("image.png"); // (For example) +var jpegData = uiImage.AsJPEG(); +byte[] jpegBytes = new byte[jpegData.Length]; +Marshal.Copy(jpegData.Bytes, jpegBytes, 0, Convert.ToInt32(jpegData.Length)); +``` + +You can now pass the `jpegBytes` to the `EnrolPhotoAndGetVerifyToken()` method: + +```csharp +string token = await apiClient.EnrolPhotoAndGetVerifyToken(guid, jpegBytes, PhotoSource.oid); +``` + +You can now launch the iProov SDK with this token to complete the photo enrolment. + +## Sample code + +For a simple iProov experience that is ready to run out-of-the-box, check out the [Example project](https://github.com/iProov/xamarin/tree/master/Example) for Xamarin.iOS and Xamarin.Android which also makes use of the .NET API Client. + +### Usage + +1. Copy the file _Shared/Credentials.example.cs_ to _Shared/Credentials.cs_ and provide your API key & secret. +2. Open the Example solution in Visual Studio. +3. Right click the root project and "Restore NuGet Packages" to ensure all NuGet packages are ready for usage. +4. Run the iOSExample or AndroidExample project on a supported iOS or Android device respectively. + +> NOTE: iProov is not supported on the iOS or Android simulator, you must use a physical device in order to iProov. \ No newline at end of file From b011f502f92d231cf4e901037cbcdcc2fdcda30b Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Mon, 26 Feb 2024 19:11:41 +0100 Subject: [PATCH 02/12] Adjusted Android/iOS README. Got structure from flutter --- Nuget Packages/iProov.NET.Android/README.md | 2 +- Nuget Packages/iProov.NET.iOS/README.md | 18 ++- README.md | 117 ++++++++++++++++++-- 3 files changed, 125 insertions(+), 12 deletions(-) diff --git a/Nuget Packages/iProov.NET.Android/README.md b/Nuget Packages/iProov.NET.Android/README.md index 1456d41..b9bcdb5 100644 --- a/Nuget Packages/iProov.NET.Android/README.md +++ b/Nuget Packages/iProov.NET.Android/README.md @@ -9,7 +9,7 @@ This NuGet wraps iProov's existing native [Android](https://github.com/iProov/an ## How to use it -1. Using the NuGet Package Manager, add the [iProov.NET.Android](https://www.nuget.org/packages/iProov.Android/) package to your project. For further instructions on how to install and manage packages, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). +1. Using the NuGet Package Manager, add the [iProov.NET.Android](https://www.nuget.org/packages/iProov.NET.Android/) package to your project. For further instructions on how to install and manage packages, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). 2. Import the package into your project with `using iProov.NET.Android;` diff --git a/Nuget Packages/iProov.NET.iOS/README.md b/Nuget Packages/iProov.NET.iOS/README.md index 62464ef..db62697 100644 --- a/Nuget Packages/iProov.NET.iOS/README.md +++ b/Nuget Packages/iProov.NET.iOS/README.md @@ -1,15 +1,24 @@ -## Xamarin.iOS +# iProov.NET.iOS Nuget -1. Using the NuGet Package Manager, add the [iProov.iOS](https://www.nuget.org/packages/iProov.iOS/) package to your Xamarin project. For further instructions on how to do this, [see here](https://docs.microsoft.com/en-us/visualstudio/mac/nuget-walkthrough?toc=%2Fnuget%2Ftoc.json&view=vsmac-2019#find-and-install-a-package). +## Introduction + +The iProov.NET.iOS NuGet enables you to integrate iProov's SDK into your .NET iOS projects. + +This NuGet wraps iProov's existing native [iOS](https://github.com/iProov/ios) SDK behind a .NET interface for use from within your .NET app. + + +## How to use it + +1. Using the NuGet Package Manager, add the [iProov.NET.iOS](https://www.nuget.org/packages/iProov.NET.iOS/) package to your Xamarin project. For further instructions on how to do this, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). 2. Add a "Privacy - Camera Usage Description" entry to your Info.plist file with the reason why your app requires camera access (e.g. "To iProov you in order to verify your identity.") -3. Import the package into your project with `using iProov.iOS;`. +3. Import the package into your project with `using iProov.NET.iOS;` 4. Once you have obtained a token (either via the .NET API Client or other means), you can launch the iProov iOS SDK as follows: ```csharp - IProov.LaunchWithStreamingURL("wss://eu.rp.secure.iproov.me/ws", token, new IPOptions(), // Substitute streaming URL as appropriate + IProov.LaunchWithStreamingURL(new NSUrl("wss://eu.rp.secure.iproov.me/ws"), token, new IPOptions(), // Substitute streaming URL as appropriate connecting: () => { // The SDK is connecting to the server. You should provide an indeterminate progress indicator @@ -56,5 +65,6 @@ } ); ``` +> Note that the launch method requires the url to be passed as a **NSURL** 👉 You should now familiarise yourself with the [iProov iOS SDK documentation](https://github.com/iProov/ios) which provides comprehensive details about the available customization options and other important details regarding the iOS SDK usage. \ No newline at end of file diff --git a/README.md b/README.md index 189586e..9f6baab 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,11 @@ We also provide a .NET API Client written in C# to call our [REST API v2](https: This documentation is focused on the **iProov.NET.MAUI** package. There's nuget-specific documentation available for [iProov.NET.Android](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.Android/) and [iProov.NET.iOS](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.iOS/) packages. -## iProov.NET.MAUI +### Requirements +- NET 8 (net8-android;net8-ios) +- iOS 12 and above +- Android API Level 21 (Android 5 Lollipop) and above ## Repository contents @@ -30,19 +33,119 @@ This documentation is focused on the **iProov.NET.MAUI** package. There's nuget- The iProov Xamarin SDK is provided via this repository, which contains the following: - **README.md** - This document -- **NuGet Packages** - Directory containing the NuGet packages for Xamarin.iOS & Xamarin.Android +- **NuGet Packages** - Directory containing the NuGet packages for iProov.NET.Android, iProov.NET.iOS & iProov.NET.MAUI - **APIClient** - C# project with the source code for the .NET API Client -- **Example** - Sample code demonstrating use of the Xamarin.iOS & Xamarin.Android bindings together with the .NET API Client - -## Upgrading from earlier versions - -If you're already using an older version of the Xamarin SDK, consult the [Upgrade Guide](https://github.com/iProov/xamarin/wiki/Upgrade-Guide) for detailed information about how to upgrade your app. +- **ExampleAppMAUI** - Sample code demonstrating use of the iProov.NET.MAUI together with the .NET API Client ## Registration You can obtain API credentials by registering on the [iProov Partner Portal](https://www.iproov.net). +# \ From flutter doc +## Options + +The `Options` class allows iProov to be customized in various ways. These can be specified by passing the optional `options:` named parameter in `IProov.launch()`. + +Most of these options are common to both Android and iOS, however, some are Android-only. + +For full documentation, please read the respective [iOS](https://github.com/iProov/ios#options) and [Android](https://github.com/iProov/android#customize-the-user-experience) native SDK documentation. + +A summary of the support for the various SDK options in Flutter is provided below. All options are nullable and any options not set will default to their platform-defined default value. + +| Option | Type | iOS | Android | +|---|---|---|---| +| `filter` | `Filter?` [(See filter options)](#filter-options)| ✅ | ✅ | +| `titleTextColor` | `Color?` | ✅ | ✅ | +| `promptTextColor` | `Color?` | ✅ | ✅ | +| `closeButtonTintColor` | `Color?` | ✅ | ✅ | +| `closeButtonImage` | `Image?` | ✅ | ✅ | +| `title` | `String?` | ✅ | ✅ | +| `fontPath` (*)| `String?` | ✅ | ✅ | +| `logoImage` | `Image?` | ✅ | ✅ | +| `promptBackgroundColor` | `Color?` | ✅ | ✅ | +| `promptRoundedCorners` | `bool?` | ✅ | ✅ | +| `surroundColor` | `Color?` | ✅ | ✅ | +| `certificates` | `List?` | ✅ | ✅ | +| `timeout` | `Duration?` | ✅ | ✅ | +| `enableScreenshots` | `bool?` | | ✅ | +| `orientation` | `Orientation?` | | ✅ | +| `camera` | `Camera?` | | ✅ | +| `headerBackgroundColor` | `Color?` | ✅ | ✅ | +| `disableExteriorEffects` | `bool?` | ✅ | ✅ | +|**`genuinePresenceAssurance`** | `GenuinePresenceAssuranceOptions?` | | | +| ↳ `readyOvalStrokeColor` | `Color?` | ✅ | ✅ | +| ↳ `notReadyOvalStrokeColor` | `Color?` | ✅ | ✅ | +|**`livenessAssurance`** | `LivenessAssuranceOptions?` | | | +| ↳ `ovalStrokeColor` | `Color?` | ✅ | ✅ | +| ↳ `completedOvalStrokeColor` | `Color?` | ✅ | ✅ | + +(*) Fonts should be added to your Flutter app (TTF or OTF formats are supported). Note that the font filename must match the font name. + +Example: +```dart +const options = Options(fontPath: 'fonts/Lobster-Regula.ttf'); +``` + +### Filter Options + +The SDK supports two different camera filters: + +#### `LineDrawingFilter` + +`LineDrawingFilter` is iProov's traditional "canny" filter, which is available in 3 styles: `.shaded` (default), `.classic` and `.vibrant`. + +The `foregroundColor` and `backgroundColor` can also be customized. + +Example: + +```dart +const options = Options( + filter: LineDrawingFilter( + style: LineDrawingFilterStyle.vibrant, + foregroundColor: Colors.black, + backgroundColor: Colors.white + ), + ); +``` + +#### `NaturalFilter` + +`NaturalFilter` provides a more direct visualization of the user's face and is available in 2 styles: `.clear` (default) and `.blur`. + +Example: + +```dart +const options = Options( + filter: NaturalFilter( + style: NaturalFilterStyle.clear + ), + ); +``` + +> **Note**: `NaturalFilter` is available for Liveness Assurance claims only. Attempts to use `NaturalFilter` for Genuine Presence Assurance claims will result in an error. + +## Handling errors + +All errors from the native SDKs are re-mapped to Flutter exceptions: + +| Exception | iOS | Android | Description | +| --------------------------------- | --- | ------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `CaptureAlreadyActiveException` | ✅ | ✅ | An existing iProov capture is already in progress. Wait until the current capture completes before starting a new one. | +| `NetworkException` | ✅ | ✅ | An error occurred with the video streaming process. Consult the `message` value for more information. | +| `CameraPermissionException` | ✅ | ✅ | The user disallowed access to the camera when prompted. You should direct the user to re-enable camera access. | +| `ServerException` | ✅ | ✅ | A server-side error/token invalidation occurred. The associated `message` will contain further information about the error. | +| `UnexpectedErrorException` | ✅ | ✅ | An unexpected and unrecoverable error has occurred. These errors should be reported to iProov for further investigation. | +| `UnsupportedDeviceException` |✅ | ✅ | Device is not supported.| +| `ListenerNotRegisteredException` | | ✅ | The SDK was launched before a listener was registered. | +| `MultiWindowUnsupportedException` | | ✅ | The user attempted to iProov in split-screen/multi-screen mode, which is not supported. | +| `CameraException` | | ✅ | An error occurred acquiring or using the camera. This could happen when a non-phone is used with/without an external/USB camera. | +| `FaceDetectorException` | | ✅ | An error occurred with the face detector. | +| `InvalidOptionsException` | | ✅ | An error occurred when trying to apply your options.| +| `UserTimeoutException` |✅ | | The user has taken too long to complete the claim.| + +# \<\/Temporary\> + ## API Client The .NET API client provides a convenient wrapper to call iProov's REST API v2 from a .NET Standard Library. It is a useful tool to assist with testing, debugging and demos, but should not be used in production mobile apps. You could also adapt this code to run on your back-end to perform server-to-server calls. From 514b1df2359b9ce9a49273e88315f2bd4c9865d4 Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Tue, 27 Feb 2024 17:24:31 +0100 Subject: [PATCH 03/12] Added launch claim info --- Nuget Packages/iProov.NET.Android/README.md | 4 + README.md | 129 +++++++++++++++++++- 2 files changed, 130 insertions(+), 3 deletions(-) diff --git a/Nuget Packages/iProov.NET.Android/README.md b/Nuget Packages/iProov.NET.Android/README.md index b9bcdb5..ccc4601 100644 --- a/Nuget Packages/iProov.NET.Android/README.md +++ b/Nuget Packages/iProov.NET.Android/README.md @@ -6,6 +6,10 @@ The iProov.NET.Android NuGet enables you to integrate iProov's SDK into your .NE This NuGet wraps iProov's existing native [Android](https://github.com/iProov/android) SDK behind a .NET interface for use from within your .NET app. +### Requirements + +- NET 8 (net8-android) +- Android API Level 21 (Android 5 Lollipop) and above ## How to use it diff --git a/README.md b/README.md index 9f6baab..c50d9bf 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,11 @@ ## Table of contents - [Introduction](#introduction) +- [Requirements](#requirements) - [Repository contents](#repository-contents) -- [Upgrading from earlier versions](#upgrading-from-earlier-versions) - [Registration](#registration) -- [Xamarin.iOS](#xamarin--ios) +- [Installation](#installation) +- [Get Started](#get-started) - [Xamarin.Android](#xamarin--android) - [API Client](#api-client) - [Sample code](#sample-code) @@ -21,7 +22,7 @@ We also provide a .NET API Client written in C# to call our [REST API v2](https: This documentation is focused on the **iProov.NET.MAUI** package. There's nuget-specific documentation available for [iProov.NET.Android](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.Android/) and [iProov.NET.iOS](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.iOS/) packages. -### Requirements +## Requirements - NET 8 (net8-android;net8-ios) - iOS 12 and above @@ -41,6 +42,128 @@ The iProov Xamarin SDK is provided via this repository, which contains the follo You can obtain API credentials by registering on the [iProov Partner Portal](https://www.iproov.net). +## Installation + +The **iProov.NET.MAUI** library is available at [nugets.org](https://www.nuget.org/packages/iProov.NET.MAUI/). Hence, you can add the package to your project either: + +1. Using the NuGet Package Manager, and adding the iProov.NET.MAUI package to your project from there. For further instructions on how to install and manage packages, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). + +> If you want to use the nuget package from a local source, make sure to add the folder where you store the nuget packages as a Nuget source in Visual Studio > Preferences + +2. Edit your `.csproj` file and add the `` to the nuget package + + ``` + + + + ``` + +## Get Started + +### Get a Token + +Obtain these tokens: + +- A **verify** token for logging in an existing user +- An **enrol** token for registering a new user + +See the [REST API documentation](https://secure.iproov.me/docs.html) for details about how to generate tokens. + +> **TIP:** In a production app you typically obtain tokens via a server-to-server back-end call. For demos and testing, iProov provides .NET sample code for obtaining tokens via [iProov API v2](https://eu.rp.secure.iproov.me/docs.html) with our open-source [API Client](https://github.com/iProov/dotnet-maui/tree/master/APIClient). + + +### Launch the SDK + +#### 1. Create and instance of IProovWrapper + + ```csharp + private IProovWrapper wrapper = new IProovWrapper(); + ``` + +#### 2. Listening to IProovStates + +To monitor the progress of an iProov claim and receive the result you need an instance of `IProovWrapper.IStateListener` interface. So, you can either create a private class which implements this interface to handle the callbacks from the SDK, or you can implement the interface in your `Activity` class. + + ```csharp +public class IProovListener: IProovWrapper.IStateListener { + + public void OnConnecting() + { + // Called when the SDK is connecting to the server. You could provide an indeterminate + // progress indication to let the user know that the connection is being established. + } + + public void OnConnected() + { + // The SDK has connected and the iProov user interface is now displayed. You + // could hide any progress indicator at this point. + } + + public void OnProcessing(double progress, string? message) + { + // The SDK updates your app with the streaming progress to the server and the user authentication. + // Called multiple time as the progress updates. You could update a determinate progress indicator. + } + + public void OnCanceled(Canceler canceler) + { + // The user canceled iProov, either by pressing the close button at the top of the screen, or sending + // the app to the background. (canceler == Canceler.User) + // Or, the app canceled (event.canceler == Canceler.App) by canceling the subscription to the + // Stream returned from IProov.launch(). + // You should use this to determine the next step in your flow. + } + + public void OnError(IProovException exception) + { + // The user was not successfully verified/enrolled due to an error (e.g. lost internet connection). + // You will be provided with an Exception (see below). + // It will be called once, or never. + // An IProovException contains a title that describes the exception, and may also contain a message. + string title = exception.title; + string? message = exception.message; + } + + public void OnFailure(IProovFailureResult failure) + { + // The user was not successfully verified/enrolled as their identity could not be verified. + // Or there was another issue with their verification/enrollment. + // You might provide feedback to the user as to how to retry. + // A FailureReason value is provided to identify the reason as to why the claim failed. Some reasons also provide an optional description (as a string). + // When enabled for your service provider, failure.frame contains the bytes of an image containing a single frame of the user + + FailureReason reason = failure.reason; + string? description = failure.description; + byte[]? frame = failure.frame; + } + + public void OnSuccess(byte[]? frame) + { + // The user was successfully verified/enrolled. + // You must always independently validate the token server-side (using the /validate API call) before performing any authenticated user actions. + // When enabled for your service provider, frame contains the bytes of an image containing a single frame of the user + } +} + ``` + +#### 3. Launch a Claim + +To launch a Claim you need to provide a `token`, a `userId`, the websocket url of the service provider you are using and an `IStateListener`. Additionally you can provide an instance of `IProovOptions` (see [below](#options)) to customize the user experience. + + ```csharp + IProovWrapper wrapper = new IProovWrapper(); + IProovListener listener = new IProovListener(); + + private void launchIProov(string token, string userId) + { + var options = new IProovOptions(); + // Here you can customize any IProovOption + + wrapper.LaunchIProov(token, userId, "wss://eu.rp.secure.iproov.me/ws", listener, options); + } + ``` + + # \ From flutter doc ## Options From 1e85d1518275af80d48987ae27caba3eb6501c9e Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Wed, 28 Feb 2024 13:36:38 +0100 Subject: [PATCH 04/12] Options and errors in place --- ExampleAppMAUI/ExampleAppMAUI.csproj | 1 + README.md | 67 +++++++++++----------------- 2 files changed, 28 insertions(+), 40 deletions(-) diff --git a/ExampleAppMAUI/ExampleAppMAUI.csproj b/ExampleAppMAUI/ExampleAppMAUI.csproj index 41be8f0..c564b53 100644 --- a/ExampleAppMAUI/ExampleAppMAUI.csproj +++ b/ExampleAppMAUI/ExampleAppMAUI.csproj @@ -65,6 +65,7 @@ + diff --git a/README.md b/README.md index c50d9bf..fa9b69e 100644 --- a/README.md +++ b/README.md @@ -109,8 +109,7 @@ public class IProovListener: IProovWrapper.IStateListener { { // The user canceled iProov, either by pressing the close button at the top of the screen, or sending // the app to the background. (canceler == Canceler.User) - // Or, the app canceled (event.canceler == Canceler.App) by canceling the subscription to the - // Stream returned from IProov.launch(). + // Or, the app canceled (event.canceler == Canceler.App) by canceling the claim. // You should use this to determine the next step in your flow. } @@ -163,18 +162,15 @@ To launch a Claim you need to provide a `token`, a `userId`, the websocket url o } ``` - - -# \ From flutter doc ## Options -The `Options` class allows iProov to be customized in various ways. These can be specified by passing the optional `options:` named parameter in `IProov.launch()`. +The `Options` class allows iProov to be customized in various ways. These can be specified by passing an instance of `IProovOptions` in the `LaunchIProov()` method. Most of these options are common to both Android and iOS, however, some are Android-only. For full documentation, please read the respective [iOS](https://github.com/iProov/ios#options) and [Android](https://github.com/iProov/android#customize-the-user-experience) native SDK documentation. -A summary of the support for the various SDK options in Flutter is provided below. All options are nullable and any options not set will default to their platform-defined default value. +A summary of the support for the various SDK options in **iProov.NET.MAUI** is provided below. All options are nullable and any options not set will default to their platform-defined default value. | Option | Type | iOS | Android | |---|---|---|---| @@ -182,75 +178,67 @@ A summary of the support for the various SDK options in Flutter is provided belo | `titleTextColor` | `Color?` | ✅ | ✅ | | `promptTextColor` | `Color?` | ✅ | ✅ | | `closeButtonTintColor` | `Color?` | ✅ | ✅ | -| `closeButtonImage` | `Image?` | ✅ | ✅ | -| `title` | `String?` | ✅ | ✅ | -| `fontPath` (*)| `String?` | ✅ | ✅ | -| `logoImage` | `Image?` | ✅ | ✅ | +| `closeButtonImage` | `byte[]?` | ✅ | ✅ | +| `title` | `string?` | ✅ | ✅ | +| `fontPath` | `string?` | ✅ | ✅ | +| `logoImage` | `byte[]?` | ✅ | ✅ | | `promptBackgroundColor` | `Color?` | ✅ | ✅ | | `promptRoundedCorners` | `bool?` | ✅ | ✅ | | `surroundColor` | `Color?` | ✅ | ✅ | -| `certificates` | `List?` | ✅ | ✅ | -| `timeout` | `Duration?` | ✅ | ✅ | +| `certificates` | `IList?` | ✅ | ✅ | +| `timeout` | `int?` | ✅ | ✅ | | `enableScreenshots` | `bool?` | | ✅ | | `orientation` | `Orientation?` | | ✅ | | `camera` | `Camera?` | | ✅ | | `headerBackgroundColor` | `Color?` | ✅ | ✅ | | `disableExteriorEffects` | `bool?` | ✅ | ✅ | -|**`genuinePresenceAssurance`** | `GenuinePresenceAssuranceOptions?` | | | +| `stringsTable` | `string?` | ✅ | | +| `stringsBundle` | `string?` | ✅ | | +|**`genuinePresenceAssurance`** | `GenuinePresenceAssurance?` | | | | ↳ `readyOvalStrokeColor` | `Color?` | ✅ | ✅ | | ↳ `notReadyOvalStrokeColor` | `Color?` | ✅ | ✅ | -|**`livenessAssurance`** | `LivenessAssuranceOptions?` | | | +|**`livenessAssurance`** | `LivenessAssurance?` | | | | ↳ `ovalStrokeColor` | `Color?` | ✅ | ✅ | | ↳ `completedOvalStrokeColor` | `Color?` | ✅ | ✅ | -(*) Fonts should be added to your Flutter app (TTF or OTF formats are supported). Note that the font filename must match the font name. - -Example: -```dart -const options = Options(fontPath: 'fonts/Lobster-Regula.ttf'); -``` - ### Filter Options The SDK supports two different camera filters: #### `LineDrawingFilter` -`LineDrawingFilter` is iProov's traditional "canny" filter, which is available in 3 styles: `.shaded` (default), `.classic` and `.vibrant`. +`LineDrawingFilter` is iProov's traditional "canny" filter, which is available in 3 styles: `.Shaded` (default), `.Classic` and `.Vibrant`. The `foregroundColor` and `backgroundColor` can also be customized. Example: -```dart -const options = Options( - filter: LineDrawingFilter( - style: LineDrawingFilterStyle.vibrant, - foregroundColor: Colors.black, - backgroundColor: Colors.white - ), - ); +```csharp +var options = IProovOptions(); + +options.filter = new IProovOptions.LineDrawingFilter( + style: LineDrawingFilterStyle.Shaded, + foregroundColor: Colors.Black, + backgroundColor: Colors.White); ``` #### `NaturalFilter` -`NaturalFilter` provides a more direct visualization of the user's face and is available in 2 styles: `.clear` (default) and `.blur`. +`NaturalFilter` provides a more direct visualization of the user's face and is available in 2 styles: `.Clear` (default) and `.Blur`. Example: -```dart -const options = Options( - filter: NaturalFilter( - style: NaturalFilterStyle.clear - ), - ); +```csharp +var options = IProovOptions(); + +options.filter = new IProovOptions.NaturalFilter(style: NaturalFilterStyle.Clear); ``` > **Note**: `NaturalFilter` is available for Liveness Assurance claims only. Attempts to use `NaturalFilter` for Genuine Presence Assurance claims will result in an error. ## Handling errors -All errors from the native SDKs are re-mapped to Flutter exceptions: +All errors from the native SDKs are re-mapped to `IProovException` exceptions: | Exception | iOS | Android | Description | | --------------------------------- | --- | ------- | -------------------------------------------------------------------------------------------------------------------------------- | @@ -267,7 +255,6 @@ All errors from the native SDKs are re-mapped to Flutter exceptions: | `InvalidOptionsException` | | ✅ | An error occurred when trying to apply your options.| | `UserTimeoutException` |✅ | | The user has taken too long to complete the claim.| -# \<\/Temporary\> ## API Client From 4e107b611ad8b97b1710232a709615d5690f6ea4 Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Wed, 28 Feb 2024 15:08:48 +0100 Subject: [PATCH 05/12] Add MAUI Controls to project --- ExampleAppMAUI/ExampleAppMAUI.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ExampleAppMAUI/ExampleAppMAUI.csproj b/ExampleAppMAUI/ExampleAppMAUI.csproj index c564b53..bb37d15 100644 --- a/ExampleAppMAUI/ExampleAppMAUI.csproj +++ b/ExampleAppMAUI/ExampleAppMAUI.csproj @@ -65,7 +65,8 @@ - + + From 11c48ac72e86528ef2be712a3d86b340b1efa621 Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Wed, 28 Feb 2024 16:41:44 +0100 Subject: [PATCH 06/12] Finished READMEs; Added Credentials.cs; Removed Credentials.example.cs --- .gitignore | 4 -- ...{Credentials.example.cs => Credentials.cs} | 0 Nuget Packages/iProov.NET.Android/README.md | 2 +- README.md | 66 ++++++++----------- 4 files changed, 27 insertions(+), 45 deletions(-) rename ExampleAppMAUI/{Credentials.example.cs => Credentials.cs} (100%) diff --git a/.gitignore b/.gitignore index 75017b8..e7e1547 100644 --- a/.gitignore +++ b/.gitignore @@ -11,10 +11,6 @@ autom4te.cache/ tarballs/ test-results/ -# Credentials file -ExampleAppMAUI/Credentials.cs -ExampleAppMAUI/Credentials.example.cs - # Mac bundle stuff *.dmg *.app diff --git a/ExampleAppMAUI/Credentials.example.cs b/ExampleAppMAUI/Credentials.cs similarity index 100% rename from ExampleAppMAUI/Credentials.example.cs rename to ExampleAppMAUI/Credentials.cs diff --git a/Nuget Packages/iProov.NET.Android/README.md b/Nuget Packages/iProov.NET.Android/README.md index ccc4601..e7b6e5a 100644 --- a/Nuget Packages/iProov.NET.Android/README.md +++ b/Nuget Packages/iProov.NET.Android/README.md @@ -119,4 +119,4 @@ This NuGet wraps iProov's existing native [Android](https://github.com/iProov/an iProovLauncher.Launch(this, "wss://eu.rp.secure.iproov.me/ws", token, new IProov.Options()); // Substitute the streaming URL as appropriate ``` -👉 You should now familiarise yourself with the [iProov Android SDK documentation](https://github.com/iProov/android) which provides comprehensive details about the available customization options and other important details regarding the iOS SDK usage. +👉 You should now familiarise yourself with the [iProov Android SDK documentation](https://github.com/iProov/android) which provides comprehensive details about the available customization options and other important details regarding the Android SDK usage. diff --git a/README.md b/README.md index fa9b69e..d353760 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ - [Registration](#registration) - [Installation](#installation) - [Get Started](#get-started) -- [Xamarin.Android](#xamarin--android) +- [Options](#options) +- [Handling Errors](#handling-errors) - [API Client](#api-client) - [Sample code](#sample-code) @@ -18,23 +19,22 @@ The iProov .NET SDK enables you to integrate iProov into your .NET Android / iOS / MAUI projects. The iProov's native SDK for [iOS](https://github.com/iProov/ios) (Swift) and [Android](https://github.com/iProov/android) (Java / Kotlin) are wrapped behind a .NET interface for their use within .NET apps. Given the differences in the implementation between these .NET interfaces, the iProov.NET.MAUI wraps both interfaces into a unified .NET version of the iProov API to ease the integration of the iProov Biometric SDKs in MAUI developments. -We also provide a .NET API Client written in C# to call our [REST API v2](https://eu.rp.secure.iproov.me/docs.html) from a .NET Standard Library, which can be used from your Xamarin app to request tokens directly from the iProov API (note that this is not a secure way of getting tokens, and should only be used for demo/debugging purposes). +We also provide a .NET API Client written in C# to call our [REST API v2](https://eu.rp.secure.iproov.me/docs.html) from a .NET Standard Library, which can be used from your .NET app to request tokens directly from the iProov API (note that this is not a secure way of getting tokens, and should only be used for demo/debugging purposes). -This documentation is focused on the **iProov.NET.MAUI** package. There's nuget-specific documentation available for [iProov.NET.Android](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.Android/) and [iProov.NET.iOS](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.iOS/) packages. +This documentation is focused on the **iProov.NET.MAUI** package. There's also documentation available for [iProov.NET.Android](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.Android/) and [iProov.NET.iOS](https://github.com/iProov/dotnet-maui/tree/master/Nuget%20Packages/iProov.NET.iOS/) packages. ## Requirements -- NET 8 (net8-android;net8-ios) +- NET 8 (net8-android & net8-ios) - iOS 12 and above - Android API Level 21 (Android 5 Lollipop) and above - ## Repository contents -The iProov Xamarin SDK is provided via this repository, which contains the following: +The iProov .NET MAUI SDK is provided via this repository, which contains the following: - **README.md** - This document -- **NuGet Packages** - Directory containing the NuGet packages for iProov.NET.Android, iProov.NET.iOS & iProov.NET.MAUI +- **NuGet Packages** - Folder containing the NuGet packages for iProov.NET.Android, iProov.NET.iOS & iProov.NET.MAUI - **APIClient** - C# project with the source code for the .NET API Client - **ExampleAppMAUI** - Sample code demonstrating use of the iProov.NET.MAUI together with the .NET API Client @@ -50,7 +50,7 @@ The **iProov.NET.MAUI** library is available at [nugets.org](https://www.nuget.o > If you want to use the nuget package from a local source, make sure to add the folder where you store the nuget packages as a Nuget source in Visual Studio > Preferences -2. Edit your `.csproj` file and add the `` to the nuget package +2. Or edit your `.csproj` file and add the `` to the `iProov.NET.MAUI` package ``` @@ -62,7 +62,7 @@ The **iProov.NET.MAUI** library is available at [nugets.org](https://www.nuget.o ### Get a Token -Obtain these tokens: +There are two types of tokens: - A **verify** token for logging in an existing user - An **enrol** token for registering a new user @@ -82,7 +82,7 @@ See the [REST API documentation](https://secure.iproov.me/docs.html) for details #### 2. Listening to IProovStates -To monitor the progress of an iProov claim and receive the result you need an instance of `IProovWrapper.IStateListener` interface. So, you can either create a private class which implements this interface to handle the callbacks from the SDK, or you can implement the interface in your `Activity` class. +To monitor the progress of an iProov claim and receive the result you need an instance of `IProovWrapper.IStateListener` interface. So, you will have to implement this interface in one of your classes, or create a new one, as shown in the following example. ```csharp public class IProovListener: IProovWrapper.IStateListener { @@ -147,7 +147,7 @@ public class IProovListener: IProovWrapper.IStateListener { #### 3. Launch a Claim -To launch a Claim you need to provide a `token`, a `userId`, the websocket url of the service provider you are using and an `IStateListener`. Additionally you can provide an instance of `IProovOptions` (see [below](#options)) to customize the user experience. +To launch a Claim you need to provide a `token`, a `userId`, the websocket url of the service provider you are using and an `IStateListener` instance. Additionally you can provide an instance of `IProovOptions` (see [below](#options)) to customize the user experience. ```csharp IProovWrapper wrapper = new IProovWrapper(); @@ -162,6 +162,11 @@ To launch a Claim you need to provide a `token`, a `userId`, the websocket url o } ``` +#### _\** Running on iOS_ + +For iProov to work on iOS devices, you need to add a `Privacy - Camera Usage Description` entry to your Info.plist file (`/Platforms/iOS/Info.plist`) with the reason why your app requires camera access (e.g. "To iProov you in order to verify your identity.") + + ## Options The `Options` class allows iProov to be customized in various ways. These can be specified by passing an instance of `IProovOptions` in the `LaunchIProov()` method. @@ -275,8 +280,6 @@ The .NET API Client supports the following functionality: To add the .NET API Client to your project, add it as a sub-project to your solution, and then [add a reference](https://docs.microsoft.com/en-us/visualstudio/mac/managing-references-in-a-project?view=vsmac-2019) to the **APIClient** project from your app project. -You will also need to [add](https://docs.microsoft.com/en-us/visualstudio/mac/nuget-walkthrough?view=vsmac-2019) the **Newtonsoft.Json** NuGet package to your project as well. - You can now import the API Client with `using iProov.APIClient;`. ### Usage examples @@ -290,43 +293,26 @@ The most basic thing you can do with the API Client is get a token to either enr This is achieved as follows: ```csharp +ApiClient apiClient = new ApiClient( + "https://beta.rp.secure.iproov.me/api/v2", + "{{ apiKey }}", + "{{ secret }}", + "com.iproov.ExampleAppMAUI"); + var token = await apiClient.GetToken(AssuranceType.GenuinePresence, ClaimType.Enrol, "{{ user id }}"); ``` You can then launch the iProov SDK with this token. -#### Performing a photo enrol (on iOS) - -To photo enrol a user, you would first generate an enrolment token, then enrol the photo against the user, then generate a verification token. - -Fortunately the .NET API Client provides a helper method which wraps all three calls into one convenience method. - -The first thing you will need to do is convert your iOS native `UIImage` into a .NET `byte[]` which can be handled by the cross-platform API Client: - -```csharp -var uiImage = UIImage.FromBundle("image.png"); // (For example) -var jpegData = uiImage.AsJPEG(); -byte[] jpegBytes = new byte[jpegData.Length]; -Marshal.Copy(jpegData.Bytes, jpegBytes, 0, Convert.ToInt32(jpegData.Length)); -``` - -You can now pass the `jpegBytes` to the `EnrolPhotoAndGetVerifyToken()` method: - -```csharp -string token = await apiClient.EnrolPhotoAndGetVerifyToken(guid, jpegBytes, PhotoSource.oid); -``` - -You can now launch the iProov SDK with this token to complete the photo enrolment. - ## Sample code -For a simple iProov experience that is ready to run out-of-the-box, check out the [Example project](https://github.com/iProov/xamarin/tree/master/Example) for Xamarin.iOS and Xamarin.Android which also makes use of the .NET API Client. +For a simple iProov experience that is ready to run out-of-the-box, check out the [ExampleAppMAUI project](https://github.com/iProov/xamarin/tree/master/ExampleAppMAUI) for a .NET MAUI app that uses `iProov.NET.MAUI` and also makes use of the .NET API Client. ### Usage -1. Copy the file _Shared/Credentials.example.cs_ to _Shared/Credentials.cs_ and provide your API key & secret. -2. Open the Example solution in Visual Studio. +1. Set your API key & secret in the Credentials.cs file. +2. Open the ExampleAppMAUI solution in Visual Studio. 3. Right click the root project and "Restore NuGet Packages" to ensure all NuGet packages are ready for usage. -4. Run the iOSExample or AndroidExample project on a supported iOS or Android device respectively. +4. Run the ExampleAppMAUI project on a supported iOS or Android device. > NOTE: iProov is not supported on the iOS or Android simulator, you must use a physical device in order to iProov. \ No newline at end of file From 6d62e8b0a148872ad8d61c40f16a67a269ae6ee1 Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Wed, 28 Feb 2024 16:45:28 +0100 Subject: [PATCH 07/12] Set iOS requirements in README --- Nuget Packages/iProov.NET.iOS/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Nuget Packages/iProov.NET.iOS/README.md b/Nuget Packages/iProov.NET.iOS/README.md index db62697..1f29d13 100644 --- a/Nuget Packages/iProov.NET.iOS/README.md +++ b/Nuget Packages/iProov.NET.iOS/README.md @@ -6,6 +6,11 @@ The iProov.NET.iOS NuGet enables you to integrate iProov's SDK into your .NET iO This NuGet wraps iProov's existing native [iOS](https://github.com/iProov/ios) SDK behind a .NET interface for use from within your .NET app. +### Requirements + +- NET 8 (net8-ios) +- iOS 12 and above + ## How to use it From 8ee0f25ff32c9e1618ca0afb015790747a0e6d0c Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Wed, 28 Feb 2024 16:53:24 +0100 Subject: [PATCH 08/12] Update MAUI nuget with latest changes --- .../iProov.NET.MAUI.1.0.0.nupkg | Bin 16324 -> 16161 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Nuget Packages/iProov.NET.MAUI/iProov.NET.MAUI.1.0.0.nupkg b/Nuget Packages/iProov.NET.MAUI/iProov.NET.MAUI.1.0.0.nupkg index b84b4f274bb5c888defe299f3abb2fa7807dd0d1..a92f6b755782e47f50d0bab996e339a5929f5549 100644 GIT binary patch delta 14910 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

6d%BVm z-Uck}VXgc+4jsr>&kIhf=ay-`89%7Q|OSA7Zz?yQ&ZsrdRje*~V67J#>T z&26XmmTqpHs7LhT{l=rmgj)@Sj(XPE@uoetM&h9J)Pgkc8A3yDiJ#8Io~R zw)ViEda0@XZf|%_-H-J+T+>hy3m<;w{M#5M8M$~FP$+Yh1%{}3tQY;A*!K!tkBR3w z>S{vcwCOusw9d=Q7xlpsf>>6Tg@=das@X$ja%u%hp|;hUVN|Wqsw=12*Z{Q&!*X;Z!{=L^hyOY~PxE~FHw+JFX9-kbW`@OJB+i##MY_*b4dmJVi z(tgy8JFjmvP42Kv9It&#XY?dJ)r|Gj50zgwg&@p>p5@CtydrOG+=ra}nnO4^4Gw`D z7W=`qoR8W}d9oJg5>csm!FBvABWM#e?6$VkbCr4;?8omM;mH@YuQU5r?`PaDvJKZf zTwova^XaX}?UViguu1=^CmZ6pAVIJLHHlU@&BZ+YWdK>3J4Q42`Lh;_~8DpNIw5txXYQ4%Y~jm&;P$6K7L%V qQ?3L}ep;UYpBU-v9IcHE?c^jOfBdHf1%djn{Q(038RPjM>wf|GbCJ6M delta 15114 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 Date: Fri, 1 Mar 2024 11:20:01 +0100 Subject: [PATCH 09/12] Fix typos and done rewording --- Nuget Packages/iProov.NET.Android/README.md | 8 ++++---- Nuget Packages/iProov.NET.iOS/README.md | 6 +++--- README.md | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Nuget Packages/iProov.NET.Android/README.md b/Nuget Packages/iProov.NET.Android/README.md index e7b6e5a..4029214 100644 --- a/Nuget Packages/iProov.NET.Android/README.md +++ b/Nuget Packages/iProov.NET.Android/README.md @@ -6,7 +6,7 @@ The iProov.NET.Android NuGet enables you to integrate iProov's SDK into your .NE This NuGet wraps iProov's existing native [Android](https://github.com/iProov/android) SDK behind a .NET interface for use from within your .NET app. -### Requirements +## Requirements - NET 8 (net8-android) - Android API Level 21 (Android 5 Lollipop) and above @@ -47,7 +47,7 @@ This NuGet wraps iProov's existing native [Android](https://github.com/iProov/an { // Either the user canceled iProov by pressing the Close button at the top right or // the Home button (canceler == USER) - // Or the app canceled using Session.cancel() (canceler = APP). + // Or the app canceled using Session.cancel() (canceler == APP). // You should use this to determine the next step in your flow. } @@ -71,7 +71,7 @@ This NuGet wraps iProov's existing native [Android](https://github.com/iProov/an public void OnProcessing(double progress, string message) { // The SDK will update your app with the progress of streaming to the server and authenticating - // the user. This will be called multiple time as the progress updates. + // the user. This will be called multiple times as the progress updates. } public void OnSuccess(IProov.SuccessResult result) @@ -113,7 +113,7 @@ This NuGet wraps iProov's existing native [Android](https://github.com/iProov/an } ``` -5. You can now launch iProov by calling: +6. Once you have obtained a token (either via the [.NET API Client](https://github.com/iProov/dotnet-maui/tree/master/APIClient) or other means), you can now launch iProov by calling: ```csharp iProovLauncher.Launch(this, "wss://eu.rp.secure.iproov.me/ws", token, new IProov.Options()); // Substitute the streaming URL as appropriate diff --git a/Nuget Packages/iProov.NET.iOS/README.md b/Nuget Packages/iProov.NET.iOS/README.md index 1f29d13..166ab62 100644 --- a/Nuget Packages/iProov.NET.iOS/README.md +++ b/Nuget Packages/iProov.NET.iOS/README.md @@ -6,7 +6,7 @@ The iProov.NET.iOS NuGet enables you to integrate iProov's SDK into your .NET iO This NuGet wraps iProov's existing native [iOS](https://github.com/iProov/ios) SDK behind a .NET interface for use from within your .NET app. -### Requirements +## Requirements - NET 8 (net8-ios) - iOS 12 and above @@ -14,13 +14,13 @@ This NuGet wraps iProov's existing native [iOS](https://github.com/iProov/ios) S ## How to use it -1. Using the NuGet Package Manager, add the [iProov.NET.iOS](https://www.nuget.org/packages/iProov.NET.iOS/) package to your Xamarin project. For further instructions on how to do this, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). +1. Using the NuGet Package Manager, add the [iProov.NET.iOS](https://www.nuget.org/packages/iProov.NET.iOS/) package to your project. For further instructions on how to do this, [see here](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio). 2. Add a "Privacy - Camera Usage Description" entry to your Info.plist file with the reason why your app requires camera access (e.g. "To iProov you in order to verify your identity.") 3. Import the package into your project with `using iProov.NET.iOS;` -4. Once you have obtained a token (either via the .NET API Client or other means), you can launch the iProov iOS SDK as follows: +4. Once you have obtained a token (either via the [.NET API Client](https://github.com/iProov/dotnet-maui/tree/master/APIClient) or other means), you can launch the iProov iOS SDK as follows: ```csharp IProov.LaunchWithStreamingURL(new NSUrl("wss://eu.rp.secure.iproov.me/ws"), token, new IPOptions(), // Substitute streaming URL as appropriate diff --git a/README.md b/README.md index d353760..8eb8359 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![iProov: Flexible authentication for identity assurance](images/banner.jpg) -# iProov Biometrics .NET SDK +# iProov Biometrics .NET MAUI SDK ## Table of contents @@ -17,7 +17,7 @@ ## Introduction -The iProov .NET SDK enables you to integrate iProov into your .NET Android / iOS / MAUI projects. The iProov's native SDK for [iOS](https://github.com/iProov/ios) (Swift) and [Android](https://github.com/iProov/android) (Java / Kotlin) are wrapped behind a .NET interface for their use within .NET apps. Given the differences in the implementation between these .NET interfaces, the iProov.NET.MAUI wraps both interfaces into a unified .NET version of the iProov API to ease the integration of the iProov Biometric SDKs in MAUI developments. +The iProov .NET MAUI SDK enables you to integrate iProov into your .NET Android / iOS / MAUI projects. The iProov's native SDK for [iOS](https://github.com/iProov/ios) (Swift) and [Android](https://github.com/iProov/android) (Java / Kotlin) are wrapped behind a .NET interface for their use within .NET apps. Given the differences in the implementation between these .NET interfaces, the iProov.NET.MAUI wraps both interfaces into a unified .NET version of the iProov API to ease the integration of the iProov Biometric SDKs in MAUI developments. We also provide a .NET API Client written in C# to call our [REST API v2](https://eu.rp.secure.iproov.me/docs.html) from a .NET Standard Library, which can be used from your .NET app to request tokens directly from the iProov API (note that this is not a secure way of getting tokens, and should only be used for demo/debugging purposes). @@ -102,7 +102,7 @@ public class IProovListener: IProovWrapper.IStateListener { public void OnProcessing(double progress, string? message) { // The SDK updates your app with the streaming progress to the server and the user authentication. - // Called multiple time as the progress updates. You could update a determinate progress indicator. + // Called multiple times as the progress updates. You could update a determinate progress indicator. } public void OnCanceled(Canceler canceler) @@ -147,7 +147,7 @@ public class IProovListener: IProovWrapper.IStateListener { #### 3. Launch a Claim -To launch a Claim you need to provide a `token`, a `userId`, the websocket url of the service provider you are using and an `IStateListener` instance. Additionally you can provide an instance of `IProovOptions` (see [below](#options)) to customize the user experience. +To launch a claim you need to provide a `token`, a `userId`, the websocket url of the service provider you are using and an `IStateListener` instance. Additionally you can provide an instance of `IProovOptions` (see [below](#options)) to customize the user experience. ```csharp IProovWrapper wrapper = new IProovWrapper(); @@ -171,7 +171,7 @@ For iProov to work on iOS devices, you need to add a `Privacy - Camera Usage Des The `Options` class allows iProov to be customized in various ways. These can be specified by passing an instance of `IProovOptions` in the `LaunchIProov()` method. -Most of these options are common to both Android and iOS, however, some are Android-only. +Most of these options are common to both Android and iOS, however, there are some options that are platform-specific. For full documentation, please read the respective [iOS](https://github.com/iProov/ios#options) and [Android](https://github.com/iProov/android#customize-the-user-experience) native SDK documentation. From c2d04ab8cb9b617d86cfbd54ab5638011fcc257b Mon Sep 17 00:00:00 2001 From: Miquel Martinez Date: Fri, 1 Mar 2024 14:00:26 +0100 Subject: [PATCH 10/12] Update NuGet packages --- .../iProov.NET.Android.9.0.3.nupkg | Bin 4429982 -> 4430236 bytes .../iProov.NET.MAUI.1.0.0.nupkg | Bin 16161 -> 20535 bytes .../iProov.NET.iOS.11.0.3.nupkg | Bin 3951083 -> 3951137 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Nuget Packages/iProov.NET.Android/iProov.NET.Android.9.0.3.nupkg b/Nuget Packages/iProov.NET.Android/iProov.NET.Android.9.0.3.nupkg index 51b700e1af03bc27484744c703b5f1f2590540b1..68e3e6206400484245b25138b5f5435b710bbefb 100644 GIT binary patch delta 27209 zcmZ5{18`+g*JbQXwNyqBgw$(9i(6OC#?2c`xW83Q3HYfdk|4hwH)qc9~-LubL zd#!cq)x9UHCK@cGE*cE@E&~pM4gvxK1M+HXs4<~*8BGid0`mI#fd4$I?__G@%*6Qb zIWcbC3XBC={K6+Z)+?dB5|5#>wh^v_M$FsahE-E^97!ti{tPc1vJib`)NmiaGe)y= z^9)v(m~uxqg07btjH-jx&f<#aKH2ji^M{or zgGuf;OqFLnm>pzzf;#^nXm{!I$V}qB7YMo*mCsrWt=n>lZ1YU@yUYi9_C-FMvXYW& z!wwbAC!Fo2M8)GaY-Me_Z>o+`7oE+|5Fj8QAK)PWFO=>tY-4N*TA);b9U2Sz`U4$( zRf&LyEUz$|a-n5xPOb<;jvc{^ypic^?3pE+Zxm#9AJZ0d0=r=lG2M&cq`;!Y`_r3* zZ-*j>C)7dVG~{_41liOYOi2o)orp`?-;-<7rpT&g)bC>po!w=~r`pm2`u;{))Wexq zMQ}gy#8%gq{O%Jr{3vOF`KYGu;Q@FZJ>o<<7}@G>S8?`2>OCs+F}9X$A4)Waj5yNb z>GgrOs}UBdA>v}MI>cJa^2i(Akc{&)PA!=)E8uY2@Q{@zh|L*Y*%RkP=HJ938GV1f z_0R7`=fa5@I4A^DrREkItj*I^EzB>=89T+uOYh3MBf{NT0 zrNM#Y*SpPW#jRE3?38|%;*f{V--tD*m-AWvDUa+C7L>}kp)Fd z#uO+P;^}db&a_yXFl@-Omo;q~Ef`L91vE#|wp%tSbV|D)olE#>{>00Iw_~K+($)j_ zu=o)RH>A6S?|(jx%6mis6jar&@o&0smFG(guhL6 z3Afu)^zrXT@p5oe13%tY(F4 zRY8PW+x3R-FdXv2R}pj(KT6B^eF|x%JW3jm*dj|k%2=rRLVrr~-IM|r;1{Kp$V~yP z?d)rp^Zv$qTbYlw*vH4mK}^f0z{A*B8XKFr*#y7q9c#=*TJ98p1D7U2W@Yz_A_AK;%*efpQsN}F3^MI6%P}(UI(7gg9OEL6%sNm zP%oolXh2*T6mJxP-5$sNc!9 z_`OdR;e60<)qRxFc|X$!+=Lk`C>|>3V3o|G1H5v%O#aSSOQYz|tcP`_^^Y|7uPml4 zNndV_t(J{w7maAKxKmG&wc-sTgIE|@#3(nI(6~s z9~2o_&s5a=5dGeXk1+wjSvUGsap=dc5w0T5EzQp_2(rqD>_MI1a+#D5M`7N8UccI( z(lro1hSg@Unv3xQszbsw*JIO?mu0$7xW81nfo7gkpkS4DgPD*y4!x z*iAjIzKpv#_z*V_k6MK+T08^3FO7Ht!m%hci}YCvE|X*e!LguB>K<|FDWz_<=Z$ zh+c{!K{f%oEsJa(z^(jE0Y$*)PWkk_2WM*)YLu2G9%%vO!)6Nh^`-|tDX}qrpk6xu zyOgcU@B>a!D4SRY70o_-e+K0{`;|UvXMOk}leQRdRUR&-Jffpj=g)h@%ei{2`g)sp)=4JoM zW0_YR_OHytU-OBhR<&P0aeAoS7tH$C1VslzZ5Kn1=a(x9KaRm->L1}EOr*DAstN&{ zKfM3p*M;ytV66xCF?WTtJ&BxM(E{`d{)npIrzs*}(*9$;`eovJ{-g(%$gPq@ZsGd} zsTSEMu&{Ydm48jM^+eBtQ~)0C&psV?;goC2>}kpDk*-M9o1ZD4Rt$3dYm|meBj~$w z;3s$^V3fCY9$?jkvm&0M+49qXtg7n6jO z-*$_N>!?8RCn*eF^{7l;3G2q>c~_-G|F0&>-Lg-!xmKFLdDb@Ft?f8f7O!Y4s0qJr z+^xlPYy_! zORiV}MRrWm0yhKKT& zP;*i6BS&8qm9N0#rrr*DXToF07NAqdDV?i0C1*`V{Ubnxs>fqzg=Sk8<$#oX*19;1 zO)ewsq(u#@3K05BvEY1Wn#UCA`_gaB*nfDUW_)NKl;^5&6o60TPEX@Tg53Y- zcxmu6jH6koa%0$v1==#|G{?6GyVgFl(`h-CkDMw!A=tI9chYKGpK-JBmbCI{3#!kv zai`JJYpmLAodC8J=9VW^zNUB5OXZVdnhEy)w14ETWhfZNoH2n{DElW$h-tKcdK9~z z)ppk&LpBfQHr1AzP>UD+)a{+NhkoUzXPA$z&y8AEX$p78)|?KPFw3V0qE9P-6Z$mz zPZ;slWXQfU>?z5#AnS_$aAxoj?sG&v(Ax%N(ae8wvwfPAu9}3?@o&m7SJZWFw=l7) z+0c9x^MB+oK5>7mwk;UujIWMjCut4-EI>Z5!Iu9W{nJfuZaHbO{_9?mv2~fdHpQs6 zRMu3{3EcmROjs@PX}U@3XTK^A6Z+?GrhJlr2ojS&yKwkrgN!ni4G_-w=Ubiafu3~R zI-QkfR7Z6QD~<;gt~*fw+eEV{J%1hIs;B*~8kZEeT*fF@ zUNK<*h?TdTC37mowd9Yex#pH! zk0FN;Z1XjlhDctM)cz6mwr_k#-gKM~twI4l*PqW0e`>w;lv3IY%~I?iqqwGrTxTiN zJUbE|<+mSDyRcr}bcGzzsuC>WGK;4Eb;2yflAK5O8c8_{<)07SLi|GuMORJX>O_ht z&pOl<^^Cl=Da$I|A^cIfFZ+KQ_%j2l(%c99ZX{UdwBf|d|HXa^z?IB~nhE)5I5hkJ z2<05dZ5m|)9#tSkmK6HQ6ALoSdG|0&E?HzC;4xv#dpo$6QhN29WjZy(KNWqpVSQEB zC+*VdhT{GYUTWa%m}A)6AfoHmbJX2e+x(6_)R)VFXG~hGLv_x3FuJn*?ulcmZH2~5 zk9#BdY;%CA>GR!ooXqL)@o4uR$LS%(f|4=xhMqEzxQoAc7Qg7VLyej*zM=lzD{~nX}yz)!k9KJ}Sm0pToCS58>F~@#N@ji z)IRpVujuI3ZWQ--v(1DMY`r7BJke$X2U?R{^o%GPT(^Q(Jh$W;I=a~!6m#_WV7+th zNiSy`Qv5edOu6)px+)vMu@>jS+m1c$i&j8<09|zV8avcx*Hy6`VAXW1xUq(Drs4z@ zcxkeA&GGRPxRhHxV?5^jnNTTnO4OteQMuI9%2bojciN5RHV6K2dI~An$Ofm=Il3Ww z<|MsEfw?p<^W%bMV_R{{%T*55{2IOCj>hUlx&7?4n5ibkZ65r?#*N8gI7)F#+dcy# zYt8wJy#ed6>|PJ*{chtB=U2a7p{FYva1XZ|pB5t1=rt7Ho}yv0X}X2>l8WSGmAx)u z>BDc<5i@vtca?faYgrkuTVkS4yR0gt1pw&oFYi)YWG_r$LR}wDLVHUJJYT*?gYygG z6=)IcdcP1KEFvl4G{~IByqx&EKzsUkf-6SZD3Bp3e?~t3o6f=S>=S<2*Ac)!!nYJu zD8^%X(zw=;@P@Vem>6Eis2FL*|3W~6C`Sq6H##V-n4bw$3A!+?SgbVYYfNBDph`G# zlF?6T7Lh`3w=kYB%l`KKDoC%rxf{-NzYg5T4tWTjukmAW5dEEJ$sIQ3u>70We(-!_ z6(v`uO5+_yxXChw7Iak>xP%6{?!W+NW%TC5OY-XXOR=rPzoUln$ds@s@yNNn_TXJ%Zcdg7_IWN->CN?{-L+7zSf{x?U-+lLBhBG?`Xh0DyCC&BCtYoh zu-Rd(J)oYShl~e*Ee;;-ro&razud(;>n8hDpT05E<@o^hrA$;p_a=v4d;0N#U2R_5 zaQHb1U2BMp@q?ZbI3VY`^^$(iS=a0%ddbO$m_zerubkw5tY@!mp~FRqn;#I{1T8NstH43T2Tpe6Ug$!|cd zs@yJJk9?r*<2Il@*2Rf-8+f0Ht0sp-+}{#wA#I-Wv^D(%CanrOW(J;XMhi}9eaUA^!n=T=`u3w2xo1~$ptiZKV?braXK)zAC zHH{#?RU>fMNWLVbL54~rnpAaKx%o~F=KlgID`D+JUl5#iCEW_1a?ZN6swyk zzBD_-bMK}U`W9GFcTm9mLPgW7mngn0Bx8I!IOB0|Kg0bJbSr+ZedKzdJwtFBGm|++ z*%g*F>{dhJl&Crq+0iVkIkGeYM8W%SMD58uUCc1*{t^P#_sjgi;TQTu;1g~>Zay~q zKbrOyLBY$o8C%1577y@m?&exN*AZEKX8OBwS(Oh@oiZy|l>F2vBHT=1Y&C1#EbRoW z|BT4Gr1Sjfw0>vhgL#GhTLqgo2cttxK>zg@_2@_PUe)?cd@iM!g@G6yaLJdh#WwV0 zYl`Jyp{pLut*`9>=dKGWVTv(0trUH+)a@8>cuX6eUH-QjfE?83a>Os?PZGXHs@lK% za5GJ_s;zuQl<{D?G!3oWDP0{3mbk9{+r)qk`A+k9JYAfv;4R|h9E4HZMFNze!Lnz) zJ73ivQcw4fOLN*~L1u~op!Fob6;`$Z?fsK`kn?(KXVLLFr0Q0MEn9$Q^% z0M28J*dofoFhcxfk`I~jVI5?B=oI;;iimcuN2jG2Vg}ud+CZ&0P<3dk_`C5yDGw1x z+q@@SR^XvWZcQy)=SiM+J%+Wf{ywfQNl4G?J~5`^1?O^Et_$p4`RF3~SBIJEGEs8T zF<)L+!6-$_6I}{7P?vRZU2*3;ZjB}79(1XbR!i?As~B=5LX@xcVMQ?5zh{cGOV6mE zL2~;r%GR(?CVSWdum=7dbGeQl;WB~g_&YL>LoQ^n+bJlT(f7QTO0s{7%ctJRA=5Fe zu|p#}KwAaT9LNB1-dCzTz-xzc$-I!uy5JPykEjtiqA|(<&0GDRSd-O;>keV9fKxU$ z|FwL}ueka+v1UOBi9Z6Pc+9THQ+Z&-nd}l#!+Au*#}29#(6ApVCn}RmL;MPlLpPK8 zRcIlN6>mWL^JiW}%s*9&B3+J246r?i>A|8*TnXu9)1pMl(mGIDhcy21`r8`~`nw4; zrHN@me+z~5=ula{@5^2atJIO-!^u6eegKR*bI@LTv%AvU|M|9?_k4gmxYsx44$5{3nTt z(&WgX(*#BZ;a??oiRWkDIYnbwXd`$KFGHh#n>GMGeAk$+p0b zD7M%|j!X?oZjB9EZqW>a*uiz^-w>L=c|tbpJVQDJ-O_DIA8~b;6{!1{6>Nf5#p!`p zCcnei)!Ctg0&Fur-ILO2-BblH{@DqHAij#8$d439hFd9xZeU%c9e9r%M*`jUk{95D zWF17@3_i$@4>KYDAJhV1uSK`impn)L-3Nt(ew#@}eoWFt(7p=KL02n|g0O_sz%zG(RU=IRN$$@`J zv_h!tn)`D;rFWw~d2E3_X?F)*!*?q^wRJl^d3D1*y>$0qBl*kh5`m_SFoC8FGl5qn z0|@1b0GJNNBuG^p0Hwpw1*Svx0oJVcj&Z5=#MSL`UG}x@mCx?%+PeE>_hWm3@dH$Y z;sXV6@1P%MU8Sb$wrYWB7Sn@SqfG&|-V^KQZNYCA)k9dLVS+qQNCAHsrSpg0E%S%o zQ|};sShwmI$O%SPbP5%vkB7|Nwx|1 z{Ds&v;S}nP^4|+60i@A=TnFpNn*`ILmkGvg$JeoM*C2;YAS`IZxQ9((ruU2)n^zkb{%;%n(E;g;BwPj~U|19*0V5RA9p zJM(4su7uxaJQ3u($UF6=`n7TQ<`AIVt-kk37SVU|%ZKZoubNNn-xUSn>uIvVlc}?z z8I?Lg+LfM2t971Ot3{q@9cr%09n!AR9a^qkw&3>gx|2rOFKPEs9g?o;FLC$MyXQx4 zx;aLg{7w?F{1)jpAvbcoV^$llee708kXi)jgtqU?+acD9+7Z?&U$L8Io&Z>fCe}Y^ znol@Q=6e`hBzsuh>52NF=}DU)1S4f@jY*r1t7>}Sgv##`+O^lvTjL`{pToq1d8wfr zG%11cm(W9GDUJ9QCy8~lN%LHm*J3|HnbJ&E&_mzT()knaS>-5bLbl6kBH}A8fW3|I zZdKRn{oVYw34*U$2^~#?2lyW(;chk8;<$&@Vz?J8LAOgRe`!}=hV`zi#e2jwMRE{X zhW7r>1L7^o1L3W~gYb%02>NJO2>a;U5Bloo1o0@`5BnPHg#UOTolaUK;g5Zm^ks?& zvNuH04$4==5mcz;7UV;k2i9AM2l2Ju3G)$WPi@N_gXd(R}uHv!j#Q$k?9 zWr`cnuj+em-PzPc0K~h>6Z0j;9?Di1T?`md;*I`Dx5u(ol|-{;pBMuU6nmpO`64AQ zTaWDIe4tUYnZ2-oul2#CUKNB^vB`#BvC#)%toA|CuzF#w9=liF!f2%OkFZey#aiwB z!Xx9C%4D+%(t!}#X`Bw#0T!BN)CQqr>xJ1oa4)x|wR+PH+%?*hOt^f#MOlUK#$9#u zPq*0ww`=qv(y)FZaY#9n=w5G3@#9+2gF3Hy!*1TZM>FWKg<3Lr!Kt3UhpQgGhc~D@ zQ}4!HwfB>-tpdwz+ysqT{^U#38&>uDJ@kgM4FGY!M2;u!n-0crNe7x$!vJx=GU7+L zN@|c@fqw`zFhJd}CWE~-?sXfkN*i>$axhzHL*my|Kn2@a`?uN>FdJzj;WyZVL@!rD zXEoVEM6X);HLY@jUsT&dZdjIqZ0Pm{%`}BzNV0Ff4DGk>rKSJ^R;b_1Z`st zZ+|>t+UO4oVNv$Ih?qL@4}4)r9bavUHwJGD;HagmaVqWgtc0^JrY+y&G`_1(Bk14h zb4HkSYfcdFyq&C*Ku!M#w;&vtVVN}-{uKAV9#Q6pV)4JENj)iY6p$M zQ(yuJk+KBey*P(@LL~ZUW6VJ&i3t%WZHH`OVu&W0vp}+lvrzaCE`MGgy7#)1hVq1K z7`so9EpTUXkuIEtxq>n8%=si)eLUsTvmos5mOFhJg=4KK7&=gJ3fyYx4F4YC zcMiu+!VRy$U*TA??LR%OD)!BgX27W+=F|#5iOG zwww?F->$ZKvN^|?5+6~mB_E|TzT6Vy(7@99T5-5$F)vO?(H=<+_}|etdVmXgIVAY` zLaxD5737*8o21*IQEuFy&pzHdD8BC)7)H(eW>4|Nd$HRBECd)N&n5%dRZeA(Xj!GI>9v0m$ zM8ic-PDH1pr&(+oM!PKaod>w+YC_LAdqsnzTO_DDoMI+iEUzryVN~SNmSN77?m~rZ z4iofIXK1>}b(qxqM$-j!;mEj!t6t+{^`0nTn^{^3)Cc(lw5T@}JKE_WdhP0D9895{ z!l3o!ufWc;zBc~#H^&_&jEISl%QEEH&5fHO2G6SIEN%74st(D#MgY8~>a1dvH>+HN zd@8hv3i&WkjVFq>E<^PZZ|o*Eb$2{92r6yip5L(l7;br

X5`vsVp`TnJBM)LT#O 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 XDo+Qn{C_JJ1k45yAObT0(6Iji|KW(g diff --git a/Nuget Packages/iProov.NET.MAUI/iProov.NET.MAUI.1.0.0.nupkg b/Nuget Packages/iProov.NET.MAUI/iProov.NET.MAUI.1.0.0.nupkg index a92f6b755782e47f50d0bab996e339a5929f5549..154990cf5c4bad699a2168b5c161d8da7ce253d5 100644 GIT binary patch delta 19657 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 N<*vAFNpILM?>|TsG&}$R delta 15233 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 diff --git a/Nuget Packages/iProov.NET.iOS/iProov.NET.iOS.11.0.3.nupkg b/Nuget Packages/iProov.NET.iOS/iProov.NET.iOS.11.0.3.nupkg index 2106339d45bd60f5ce04c92a5c88bdb72e4b3eb5..0e1e4778de7c9bbf5de26583c9acf0db15980430 100644 GIT binary patch delta 20621 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 From 3612c3a3619c5abe86ed7dd9873849694bd01948 Mon Sep 17 00:00:00 2001 From: Emre Sari Date: Fri, 1 Mar 2024 14:09:33 +0000 Subject: [PATCH 11/12] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8eb8359..c4ef4b8 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ See the [REST API documentation](https://secure.iproov.me/docs.html) for details ### Launch the SDK -#### 1. Create and instance of IProovWrapper +#### 1. Create an instance of IProovWrapper ```csharp private IProovWrapper wrapper = new IProovWrapper(); From d913a682af6bfe9b1c3ac721523318e3638e4048 Mon Sep 17 00:00:00 2001 From: Emre Sari Date: Fri, 1 Mar 2024 14:14:39 +0000 Subject: [PATCH 12/12] Update NuGets --- .../iProov.NET.Android.9.0.3.nupkg | Bin 4430236 -> 4430227 bytes .../iProov.NET.MAUI.1.0.0.nupkg | Bin 20535 -> 20532 bytes .../iProov.NET.iOS.11.0.3.nupkg | Bin 3951137 -> 3951135 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Nuget Packages/iProov.NET.Android/iProov.NET.Android.9.0.3.nupkg b/Nuget Packages/iProov.NET.Android/iProov.NET.Android.9.0.3.nupkg index 68e3e6206400484245b25138b5f5435b710bbefb..8fc15d06a455c2f9203f6ab408b679069620c2c4 100644 GIT binary patch delta 49561 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