{"id":19146558,"url":"https://github.com/gini/gini-mobile-xamarin","last_synced_at":"2025-09-08T22:32:31.236Z","repository":{"id":42521041,"uuid":"424551491","full_name":"gini/gini-mobile-xamarin","owner":"gini","description":"Monorepo for Gini Xamarin Bindings","archived":true,"fork":false,"pushed_at":"2023-02-07T22:12:54.000Z","size":83975,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-22T19:49:54.497Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-04T10:16:51.000Z","updated_at":"2024-11-11T16:04:40.000Z","dependencies_parsed_at":"2023-02-14T01:31:01.445Z","dependency_job_id":null,"html_url":"https://github.com/gini/gini-mobile-xamarin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gini/gini-mobile-xamarin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-xamarin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-xamarin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-xamarin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-xamarin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gini","download_url":"https://codeload.github.com/gini/gini-mobile-xamarin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gini%2Fgini-mobile-xamarin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274231444,"owners_count":25245659,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T07:44:38.851Z","updated_at":"2025-09-08T22:32:28.519Z","avatar_url":"https://github.com/gini.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gini Bank SDK Xamarin Bindings and Examples\n\nThis repository contains projects to help you use the Android and iOS Gini Bank SDK with Xamarin.\n\n**Important:** If you are using the Gini Vision Library please consult the [Migrate from\ngini-vision-lib-xamarin](#migrate-from-gini-vision-lib-xamarin) section to update to the Gini Bank SDK.\n\n- [Gini Bank SDK Xamarin Bindings and Examples](#gini-bank-sdk-xamarin-bindings-and-examples)\n  - [New SDKs](#new-sdks)\n    - [Gini Bank SDK](#gini-bank-sdk)\n    - [Gini Capture SDK](#gini-capture-sdk)\n    - [Gini Bank API Library](#gini-bank-api-library)\n  - [Requirements](#requirements)\n    - [Visual Studio Community 2019 for Mac](#visual-studio-community-2019-for-mac)\n    - [iOS](#ios)\n    - [Android](#android)\n  - [Migrate from gini-vision-lib-xamarin](#migrate-from-gini-vision-lib-xamarin)\n    - [Android](#android-1)\n    - [iOS](#ios-1)\n  - [Android](#android-2)\n    - [Documentation](#documentation)\n    - [How to use in a new project](#how-to-use-in-a-new-project)\n    - [Customization](#customization)\n    - [Example Project](#example-project)\n    - [Troubleshooting](#troubleshooting)\n    - [Updating the bindings](#updating-the-bindings)\n  - [iOS](#ios-2)\n    - [Example app](#example-app)\n    - [Prerequisits](#prerequisits)\n    - [Usage](#usage)\n    - [Customization](#customization-1)\n      - [Strings](#strings)\n      - [Buttons](#buttons)\n      - [Navigation Bar](#navigation-bar)\n      - [Onboarding Pages](#onboarding-pages)\n    - [Troubleshooting](#troubleshooting-1)\n    - [Updating the `GiniBank.iOS.dll`](#updating-the-ginibankiosdll)\n\n## New SDKs\n\nWe introduced three new SDKs: Gini Bank SDK, Gini Capture SDK, Gini Bank API Library.\n\n### Gini Bank SDK\n\nThe Gini Bank SDK ([iOS](https://developer.gini.net/gini-mobile-ios/GiniBankSDK/),\n[Android](http://developer.gini.net/gini-mobile-android/bank-sdk/sdk/html/index.html)) builds upon the Gini Capture SDK\nand Gini Bank API Library to enable the photo payment feature while offering additional features like Gini Pay Connect\nand Return Assistant.\n\nThe Gini Bank SDK is the main entry point. You should only interact with the other SDKs through the Gini Bank SDK.\n\n### Gini Capture SDK\n\nThe Gini Capture SDK ([iOS](https://developer.gini.net/gini-mobile-ios/GiniCaptureSDK/index.html),\n[Android](http://developer.gini.net/gini-mobile-android/capture-sdk/sdk/html/)) supersedes the Gini Vision Library\n([iOS](https://developer.gini.net/gini-vision-lib-ios/docs/),\n[Android](https://developer.gini.net/gini-vision-lib-android/html/)). We will often refer to the Gini Capture SDK\nbecause it is used to fulfill the same functionality as the Gini Vision Library did.\n\n### Gini Bank API Library\n\nThe Gini Bank API Library ([iOS](https://developer.gini.net/gini-mobile-ios/GiniBankAPILibrary/),\n[Android](https://developer.gini.net/gini-mobile-android/bank-api-library/library/html/)) supersedes the Gini API SDK\n([iOS](http://developer.gini.net/gini-ios/docs/), [Android](http://developer.gini.net/gini-sdk-android/)).\n\nYou will only need to directly interact with the Gini Bank API Library if you implement a custom networking layer. If\nyou use the default networking implementation you don’t need to interact with it.\n\n## Requirements\n\n### Visual Studio Community 2019 for Mac\n* Version \u003e=8.10.13\n* Mono Framework Runtime \u003e=6.12.0.140\n\n### iOS\n* Xcode \u003e=13.3\n* [Objective Sharpie](https://docs.microsoft.com/en-us/xamarin/cross-platform/macios/binding/objective-sharpie/get-started) \u003e=3.5 \n \n### Android\n* SDK Tools Version: 26.1.1\n* SDK Platform Tools Version: 31.0.3\n* SDK Build Tools Version: 31.0.0\n* Microsoft JDK \u003e=11.0.12\n\n## Migrate from gini-vision-lib-xamarin\n\nIf you are using the bindings from the [gini-vision-lib-xamarin](https://github.com/gini/gini-vision-lib-xamarin)\nrepository then please consult the following instructions to migrate to the new bindings provided in this repository.\n\n### Android\n\nTo add the new bindings to your project follow the steps described in [How to use in a new\nproject](#how-to-use-in-a-new-project).\n\nThe public API of the Gini Bank SDK bindings is equivalent to the native public API. Therefore please consult the native\nGini Bank SDK [migration\nguide](http://developer.gini.net/gini-mobile-android/bank-sdk/sdk/html/migrating-from-gvl.html).\n\nPlease also check out the `ExampleAndroidApp` project to see how the new Android bindings are used.\n\n### iOS\n\nTo add the new iOS binding DLL follow the instructions described in [iOS](#ios-2).\n\nThe `GVLProxy` has been replaced by the `GiniCaptureProxy`. Please consult the `GiniBankSDKHelper.cs` in the\n`ExampleiOSApp` project to see how it is used.\n\nWe added another proxy called `GiniSDKProxy` which is used for the Gini Pay Connect feature. You can view how it's used\nin the `GiniBankSDKHelper.cs` file.\n\n## Android\n\n### Documentation\n\nTake a look at the [Documentation](https://developer.gini.net/gini-mobile-android/bank-sdk/sdk/html/index.html) to see\nhow to use GiniBank SDK for Android.\n\n### How to use in a new project\n\n1. Set Target Android version to: Android 11 (API Level 30)\n2. Add references to the following projects:\n   ```\n   GiniBank.Xamarin.Android\n   GiniBankApi.Xamarin.Android\n   GiniCapture.Xamarin.Android\n   GiniCaptureNetwork.Xamarin.Android\n   GiniInternalCore.Xamarin.Android\n   TrustKit.Xamarin.Android\n   Volley.Xamarin.Android\n   ```\n3. Add the following NuGet library:  \n   ```\n   Xamarin.GooglePlayServices\n   ```\n4. Add Camera permission to AndroidManifest.xml:  \n   ```\n   \u003cuses-permission android:name=\"android.permission.CAMERA\" /\n   ```\n\n### Customization\n\nCustomization of the Views is provided via overriding of app resources: dimensions, strings, colors, texts, etc. Take a\nlook at the [Customization Guide](https://developer.gini.net/gini-mobile-android/bank-sdk/sdk/html/customization.html)\nto see which resources can be overridden.\n\n### Example Project\n\nYou can see how to work with GiniBank SDK in the `ExampleAndroidApp` project.\n\n### Troubleshooting\n\n* Error AMM0000: \t\n   ```\n   Attribute application@label value=(....) from AndroidManifest.xml\n   is also present at AndroidManifest.xmlvalue=(@string/app_name).\"\n   ```\n   Suggestion: add 'tools:replace=\"android:label\"' to \u003capplication\u003e element at AndroidManifest.xml\n* Error APT2260: \n   ```\n   style attribute 'attr/colorOnPrimary (aka gini.exampleandroidapp:attr/colorOnPrimary)' not found. ...\"\n   ```\n   Suggestion: it can happen after installing the `Xamarin.GooglePlayServices.Vision` NuGet package. Just update all\n   other Nugets to the latest versions.\n* Other errors: try removing all `.vs`, `bin/` and `obj/` folders and restart Visual Studio.\n\n\n### Updating the bindings\n\nTo update the bindings project to the latest version of our [native Android Gini Bank SDK](https://github.com/gini/gini-mobile-android/tree/main/bank-sdk) do the following steps:\n\n1. Download latest version of the Android Gini Bank SDK and its dependencies from Maven Central:  \n   For example to update to version 1.7.0 go\n   [here](https://search.maven.org/artifact/net.gini.android/gini-bank-sdk/1.4.1/aar), click on `Downloads` and select\n   `aar`.  \n   Copy the aar to the `GiniBank.Xamarin.Android/Jars/` folder and it to the `GiniBank.Xamarin.Android` project in Visual Studio.  \n   **Important**: don't forget to remove the old aar from the project.\n\n   Do the same steps for all bindings\u003cbr /\u003e\n   * GiniBank.Xamarin.Android -\u003e https://search.maven.org/artifact/net.gini.android/gini-bank-sdk\n   * GiniBankApi.Xamarin.Android -\u003e https://search.maven.org/artifact/net.gini.android/gini-bank-api-lib\n   * GiniCapture.Xamarin.Android -\u003e https://search.maven.org/artifact/net.gini.android/gini-capture-sdk\n   * GiniCaptureNetwork.Xamarin.Android -\u003e https://search.maven.org/artifact/net.gini.android/gini-capture-sdk-default-network\n   * GiniInternalCore.Xamarin.Android -\u003e https://search.maven.org/artifact/net.gini.android/gini-internal-core-api-lib\n   * TrustKit.Xamarin.Android -\u003e https://search.maven.org/artifact/com.datatheorem.android.trustkit/trustkit\n   * Volley.Xamarin.Android -\u003e https://search.maven.org/artifact/com.android.volley/volley\n\n**Note**: If after updating you see errors, please take check the Xamarin java binding [trooubleshooting\npage](https://docs.microsoft.com/en-us/xamarin/android/platform/binding-java-library/troubleshooting-bindings).\n\n## iOS\n\nGiniBank SDK for iOS is provided as a DLL file called `GiniBank.iOS.dll` located in `ExampleiOSApp`. It needs to be added to your project as a reference.\n\nThe API for the iOS integration is provided through a proxy library (`GiniBank.iOS.Proxy`) and it's a limited version of\nwhat's available natively. \n\nPlease contact Gini if you need to access any functionality that isn't exposed. Only the `Screen API` is supported at\nthis point. \n\nAlternatively you may propose changes via pull requests and we'll gladly review them. You may consult our native\n[Documentation](https://developer.gini.net/gini-mobile-ios/GiniBankSDK/) to see all the available features and how to\nuse them.\n\n### Example app\n\nIn order to run the example app on iOS, first add your `domain`, `id`, and `secret` to the `Credentials.plist`. Then you can run the app and test the extraction. The extractions are written to the console.\n\nThe example app is meant to provide a sample code to show how the GiniBank SDK can be used. Please see the `GiniBankSDKHelper.cs` in the `ExampleiOSApp` project to get you started.\n\n### Prerequisits\n\nIn order to use the GiniBank SDK please ensure your project supplies the following:\n\n* Keychan capability should be enabled in Entitlements.plist\n* Camera Usage Description provided in the Info.plist\n* Photo Library Usage Description provided in the Info.plist (if you want to enable loading photographs from the user's Photo app)\n\nThe app will crash at various points of execution if the above are not provided.\n\n### Usage\n\nInstantiate the `GiniCaptureProxy` and present the view controller accessible from the `ViewController` property:\n\n```\nGiniCaptureProxy gcProxy = new GiniCaptureProxy(domain, id, secret, _gConfiguration, _gcDelegate);\nvar gcViewController = gcProxy.ViewController;\n_gcDelegate.GCViewController = gcViewController;\n```\n\nThe `GiniCaptureProxy` initialiser takes your credentials (`domain`, `id`, and `secret`), a `GiniConfigurationProxy`\ninstance, and a `GiniCaptureDelegate` instance. \n\nThe `GiniConfigurationProxy` allows you to configure different aspects of GiniBank SDK such as whether you want to\ndisplay a flash toggle button, or what tint should the navigation bar have. Please refer to the example app to see the\ncurrently available options and to the native documentation for explanation of the options.\n\nImplement the `GiniCaptureProxyDelegate` protocol in order to receive callbacks from GiniBank SDK with extraction\nresults or to be informed about lack of thereof.\n\n### Customization\n\nComponents can be customized either through the `GiniConfiguration`, the `Localizable.strings` file or through the\nassets. Take a look at the [Customization\nGuide](https://developer.gini.net/gini-mobile-ios/GiniBankSDK/customization-guide.html) to see which resources can be\ncustomized.\n\n#### Strings\n\nString customization is possible by adding GiniBank SDK's localized string keys with you own values to your\n`Localizable.strings` files.\n\nThe example adds `ginicapture.navigationbar.camera.title`, `ginicapture.camera.qrCodeDetectedPopup.message` and\n`ginicapture.camera.qrCodeDetectedPopup.buttonTitle` localized string keys and own values to both the German and the\nEnglish `Localizable.strings` file.\n\n#### Buttons\n\nSome buttons in the GiniBank SDK UI can be customized by setting their title or image. To do that, set a property on\nyout `GiniConfigurationProxy` instance to a `SimplePreferredButtonResource`. The initaliser of\n`SimplePreferredButtonResource` takes two agruments: `preferredImage` and `preferredText`. If you want the button to\nhave an icon, pass a `UIKit.UIImage` instance as the `preferredImage` and `null` as the `preferredText`. Pass your\ndesired button title as `preferredText` if you want the button to have a text title.\n\nFor instance in order to set the close button to have a text title instead of the default cross icon:\n\n```\nGiniConfigurationProxy gConfiguration = new GiniConfigurationProxy();\n...\ngConfiguration.CloseButtonResource = new SimplePreferredButtonResource(null, \"Close please\");\n```\n\n#### Navigation Bar\n\nTo configure the look of the navigation bars in Gini Bank SDK you should use the `GiniConfiguration` instead of\n`UIAppearance`. This allows GiniBank SDK to prevent issues with the navigation bar colors in the\n`UIDocumentPickerViewController`.\n\nIf you use `UIAppearance` you should reset navigation bar related customizations before launching GiniBank SDK and\nrestore them after GiniBank SDK has exited.\n\nYou can customize the following navigation bar and item properties:\n\n```\nGiniConfigurationProxy gConfiguration = new GiniConfigurationProxy\n{\n    NavigationBarItemTintColor = UIColor...,\n    NavigationBarTintColor = UIColor...,\n    NavigationBarTitleColor = UIColor...,\n    NavigationBarItemFont = UIFont...,\n    NavigationBarTitleFont = UIFont...,\n    DocumentPickerNavigationBarTintColor = UIColor...,\n};\n```\n\n#### Onboarding Pages\n\nYou can change the onboarding pages in two ways:\n1. By adding your array of custom `UIView`s to `gConfiguration.OnboardingPages`.\n2. By retrieving the default pages from `gConfiguration.OnboardingPages` then altering the order of the pages or\n   remove/add pages. Pass the modified array to `gConfiguration.OnboardingPages`.\n\nThe buttons currently available for customization are:\n\n| Asset name in native documentation | `GiniConfigurationProxy` property |\n| ---------------------------------- | --------------------------------- |\n| `navigationCameraClose`            | `CloseButtonResource`             |\n| `navigationCameraHelp`             | `HelpButtonResource`              |\n| `navigationReviewBack`             | `BackToCameraButtonResource`      |\n| `navigationReviewBack`             | `BackToMenuButtonResource`        |\n| `navigationReviewContinue`         | `NextButtonResource`              |\n| `navigationAnalysisBack`           | `CancelButtonResource`            |\n\n### Troubleshooting\n* The app crashes at various points without an informative error message: please make sure that you have enabled all\n  capabilities and provided all usage strings in your `Info.plist` file. \n* Document picker navigation bar buttons are not visible: please apply navigation bar customizations using the\n  `GiniConfiguration` and reset your `UIAppearance` customizations related to navigation bars before launching GiniBank\n  SDK. After GiniBank SDK has finished you can restore your `UIAppearance` customizations. \n  \n### Updating the `GiniBank.iOS.dll`\n  \n1. Open `GiniBankProxy.xcodeproj` in XCode and build in 'Any iOS device' and 'iOS simulator' modes for release.\n2. Go to `/Users/{username}/Library/Developer/Xcode/DerivedData` (you can also go to Xcode-\u003ePreferences-\u003eLocations-Derived Data to find the folder).\n3. Copy the `Release-iphoneos` and `Release-iphonesimulator` folders from `.../DerivedData/GiniBankProxy(...)/Build/Products/` to `GiniBank.iOS.Proxy/build/`.\n4. Run `./build-ios.sh`.\n5. The new `GiniBank.iOS.dll` will be generated and copied to the `ExampleiOSApp` folder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgini%2Fgini-mobile-xamarin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgini%2Fgini-mobile-xamarin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgini%2Fgini-mobile-xamarin/lists"}