{"id":21478220,"url":"https://github.com/appsflyersdk/xamarinandroidbinding","last_synced_at":"2025-04-30T18:06:14.366Z","repository":{"id":33827783,"uuid":"37526105","full_name":"AppsFlyerSDK/XamarinAndroidBinding","owner":"AppsFlyerSDK","description":"AppsFlyer Xamarin Android Binding project + example app","archived":false,"fork":false,"pushed_at":"2025-01-30T14:23:29.000Z","size":170316,"stargazers_count":6,"open_issues_count":6,"forks_count":9,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-30T18:06:00.688Z","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":"curator-go/curator","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AppsFlyerSDK.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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":"2015-06-16T11:28:57.000Z","updated_at":"2025-01-30T14:23:34.000Z","dependencies_parsed_at":"2024-03-03T15:23:47.987Z","dependency_job_id":"2e221396-f08b-45c9-9c9e-0c1b0e2b2f6d","html_url":"https://github.com/AppsFlyerSDK/XamarinAndroidBinding","commit_stats":{"total_commits":64,"total_committers":9,"mean_commits":7.111111111111111,"dds":0.609375,"last_synced_commit":"50219df70c7c84affcad1ad536c4144c4b73d41f"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2FXamarinAndroidBinding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2FXamarinAndroidBinding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2FXamarinAndroidBinding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2FXamarinAndroidBinding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AppsFlyerSDK","download_url":"https://codeload.github.com/AppsFlyerSDK/XamarinAndroidBinding/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251758162,"owners_count":21638988,"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","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-23T11:17:15.077Z","updated_at":"2025-04-30T18:06:14.358Z","avatar_url":"https://github.com/AppsFlyerSDK.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Xamarin Android Binding\n\n\nXamarin Binding integration guide For Android\nAppsFlyer Xamarin Binding version `v6.15.0`\nBuilt with AppsFlyer Android SDK `v6.15.0`\n\n## \u003ca id=\"v6-breaking-changes\"\u003e ❗ v6 Breaking Changes\n\nWe have renamed some of the APIs. For more details, please check out our [Help Center](https://support.appsflyer.com/hc/en-us/articles/115001256006#methods-removeddeprecated-or-renamed)\n\n\n# 1. Overview\n\nAppsFlyer SDK provides app installation and event logging functionality. We have developed an SDK that is highly robust (7+ billion SDK installations to date), secure, lightweight and very simple to embed.\n\n\n\nYou can measure installs, updates and sessions and also log additional in-app events beyond app installs (including in-app purchases, game levels, etc.) to evaluate ROI and user engagement levels.\n\n---\nAppsFlyer Xamarin binding provides application installation and events logging functionality.\n\nThe API for the binding coincides with the native Android API, which can be found [here](https://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android).\n\n\n\n\n\n## Table of content\n\n- [Nuget](#nuget_install)\n- [Quick Start](#quickStart)\n- [API Methods](#api-methods)\n    -  [SDK Initialization](#sdk_init)\n    -  [Logging In-App Events](#adding_events)\n    -  [Get Conversion Data](#conversion_data)\n    -  [Deep Linking](#deep_linking)\n    - [Measure App Uninstalls](#uninstall_measurement)\n    - [Set Customer User ID](#SetCustomerUserId)\n    - [Set Debug Log](#SetDebugLog)\n    - [Get AppsFlyer UID](#GetAppsFlyerUID)\n    - [Set Min Time Between Sessions](#SetMinTimeBetweenSessions)\n    - [Anonymize User](#AnonymizeUser)\n    -  [Stop](#Stop)\n    -  [Wait For Customer User ID](#WaitForCustomerUserId)\n    - [SetPreinstallAttribution](#SetPreinstallAttribution)\n    - [DMA Consent](#DMAConsent)\n    - [LogAdRevenue](#LogAdRevenue) (added at v6.15.0)\n    - [ValidateAndLogInAppPurchase](#ValidateAndLogInAppPurchase) (added at v6.15.0)\n- [Sample App](#sample_app)\n\n\n\n### \u003ca id=\"nuget_install\"\u003e\n\n\n# Nuget\n\nInstall-Package AppsFlyerXamarinBindingAndroid\n\n\n\nhttps://www.nuget.org/packages/AppsFlyerXamarinBindingAndroid/\n\n\n\n\n\n### \u003ca id=\"quickStart\"\u003e\n\n\n\n# 2.0 Quick Start\n\n\n\n#### 2.1) Adding the Plugin to your Project\n\n    1. Go to Project \u003e Add NuGet Packages...\n    2. Select the `AppsFlyerXamarinBindingAndroid`\n    3. Select under version -  `6.12.2`\n    4. Click `Add Package`\n\n\n\n--------\n\nTo Embed SDK into your Application Manually:\n\n    1. Copy AppsFlyerXamarinBindingAndroid.dll into your project.\n    2. On Xamarin Studio go to References and click on Edit References.\n    3. Go to .Net Assembly tab and click on Browse… button\n    4. Locate AppsFlyerXamarinBindingAndroid.dll and chose it.\n    5. Locate GooglePlayServicesLib.dll and add it as well (for advertising Id)\n\n\n#### 2.2)  Setting the Required Permissions\n\nThe AndroidManifest.xml should include the following permissions:\n\n```xml\n\u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" /\u003e\n\u003c!-- Optional : --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_PHONE_STATE\" /\u003e\n```\n\n\n#### 2.3) Setting the Broadcast Receiver in AndroidManifest.xml\n\n##### 2.3.1 Using Broadcast Receiver (Note: this method of passing the referrer is [deprecated by Google since March 1, 2020](https://android-developers.googleblog.com/2019/11/still-using-installbroadcast-switch-to.html). Please see instructions on how to include install_referrer library below )\n\n*_The following two options are available for implementing the install referrer broadcast receiver:_*\n\nUsing a Single Broadcast Receiver\nIf you do not have a receiver listening on the INSTALL_REFERRER, in the AndroidManifest.xml, add the following receiver within the application tag:\n\n```xml\n\u003creceiver android:name=\"com.appsflyer.SingleInstallBroadcastReceiver\" android:exported=\"true\"\u003e\n\u003cintent-filter\u003e\n\u003caction android:name=\"com.android.vending.INSTALL_REFERRER\" /\u003e\n\u003c/intent-filter\u003e\n\u003c/receiver\u003e\n```\n\nUsing a Multiple Broadcast Receiver\n\nIf you already have a receiver listening on the INSTALL_REFERRER, AppsFlyer provides a solution that broadcasts INSTALL_REFERRER to all other receivers automatically. In the AndroidManifest.xml, add the following receiver as the FIRST receiver for INSTALL_REFERRER, and ensure the receiver tag is within the application tag:\n\n```xml\n\u003creceiver android:name=\"com.appsflyer.MultipleInstallBroadcastReceiver\" android:exported=\"true\"\u003e\n\u003cintent-filter\u003e\n\u003caction android:name=\"com.android.vending.INSTALL_REFERRER\" /\u003e\n\u003c/intent-filter\u003e\n\u003c/receiver\u003e\n```\n\n##### 2.3.2 Using install_referrer library\n\n1. Download aar of the desired version of [com.android.installreferrer](https://mvnrepository.com/artifact/com.android.installreferrer) library from Maven\n2. Add it to your Android Xamarin project, for example under the lib folder\n3. Set Build Action to AndroidAarLibrary\n4. Make sure you can see relevant ItemGroup attribute in the csproj file\n\n![image](https://user-images.githubusercontent.com/50541317/74601819-f9925280-50aa-11ea-9d92-0ff4489bb5d0.png)\n\n### \u003ca id=\"api-methods\"\u003e\n\n\n\n# 3.0 API Methods\n\n\n\n### \u003ca id=\"sdk_init\"\u003e\n\n\n##  SDK Initialization\n\n\n\nGo to your MainActivity.cs and add:\n\n\n\n1) `using Com.Appsflyer;` at the top of the file.\n\n\n\n2) Add the following code to the OnCreate() method:\n\n```c#\nAppsFlyerLib.Instance.Init(\"YOUR_DEV_KEY\", new AppsFlyerConversionDelegate(this), this.Application);\nAppsFlyerLib.Instance.Start(this.Application, \"YOUR_DEV_KEY\");\n\n/* AppsFlyerLib.Instance.SetDebugLog(true); */\n```\n\n\n\n### \u003ca id=\"adding_events\"\u003e\n\n## Logging In-App Events\n\nLogging in-app events is performed by calling `LogEvent` with event name and value parameters. See [In-App Events](https://support.appsflyer.com/hc/en-us/articles/115005544169-AppsFlyer-Rich-In-App-Events-Android-and-iOS) documentation for more details.\n\nPurchase Event Example:\n```c#\nDictionary\u003cstring, Java.Lang.Object\u003e eventValues = new  Dictionary\u003cstring, Java.Lang.Object\u003e();  \neventValues.Add(AFInAppEventParameterName.Price , 2);  \neventValues.Add(AFInAppEventParameterName.Currency, \"USD\");  \neventValues.Add(AFInAppEventParameterName.Quantity, \"1\");  \nAppsFlyerLib.Instance.LogEvent(this.BaseContext, AFInAppEventType.Purchase , eventValues);\n```\n\n\n\n### \u003ca id=\"conversion_data\"\u003e\n\n##  Get Conversion Data\n\n\n\nFor Conversion data your should call this method:\n\n\n```c#\nAppsFlyerLib.RegisterConversionListener (this, new AppsFlyerConversionDelegate ());\n```\n\n\n\nTo access AppsFlyer's conversion data from the Android SDK implement the ConversionDataListener:\n\n```c#\npublic class AppsFlyerConversionDelegate : Java.Lang.Object, IAppsFlyerConversionListener {\n\npublic AppsFlyerConversionDelegate()\n{\nConsole.WriteLine(\"AppsFlyerConversionDelegate called\");\n}\npublic void OnAppOpenAttribution(IDictionary\u003cstring, string\u003e p0)\n{\nConsole.WriteLine(\"OnAppOpenAttribution = \" + p0.ToString());\n}\npublic void OnAttributionFailure(string p0)\n{\nConsole.WriteLine(\"OnAttributionFailure = \" + p0);\n}\npublic void OnInstallConversionDataLoaded(IDictionary\u003cstring, string\u003e p0)\n{\nforeach (var kvp in p0){\nConsole.WriteLine(kvp.Key + \" = \" + kvp.Value);\n}\n}\npublic void OnInstallConversionFailure(string p0)\n{\nConsole.WriteLine(\"OnInstallConversionFailure = \" + p0);\n}\n}\n\n```\n\nAppsFlyerConversionDelegate.cs can be found in the sample app provided with this guide.  \n\n\n### \u003ca id=\"deep_linking\"\u003e\n\n## Deep Linking\n\n1. Add relevant intent filters to the activity.\n\n    a. You can read more about intent filters for deep linking here: https://developer.android.com/training/app-links/deep-linking.html\n    \n    b. You can read more on implementing Android Manifest by adding custom attributed in Xamarin here: https://docs.microsoft.com/en-us/xamarin/android/platform/android-manifest\n    \nExample intent filter attribute implementation:\n```c#\n[Activity(Label = \"appsflyerxamarinandroidsampleapp\", MainLauncher = true, Icon = \"@mipmap/icon\")]\n[IntentFilter(new[] { Android.Content.Intent.ActionView },\n                   AutoVerify = true,\n                   Categories = new[]\n                   {\n                        Android.Content.Intent.CategoryDefault,\n                        Android.Content.Intent.CategoryBrowsable\n                   },\n                   DataScheme = \"https\",\n                   DataHost = \"domain.com\",\n                   DataPathPrefix = \"/path/\")]\npublic class MainActivity : Activity\n{...}\n```\n\nMore information on Deep Linking on Android can be found here: \n\nhttps://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android#5-tracking-deep-linking\n\n\n\n### \u003ca id=\"uninstall_measurement\"\u003e\n\n## Uninstall measurement\n\nAppsFlyer enables you to measure app uninstalls.\n\nTo complete this process fully and correctly, you must [read here](https://support.appsflyer.com/hc/en-us/articles/208004986).\n\n\n\n1. Add the [Xamarin Google Play Services - FCM Nugget](https://docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/remote-notifications-with-fcm) to your project as instructed in the oficial Xamarin documentation.\n\n2. Make sure to add google-services.json into your project\n\n3.1 Developers who first use Firebase for AppsFlyer uninstall measurement\n\nIf a developer integrates FCM for the sole purpose of measurement uninstalls with AppsFlyer, they can make use of the appsFlyer.FirebaseMessagingServiceListener service, included in our SDK. If you already use Firebase Messaging in your app, skip to step 3.2\n\nAdd the following receiver to your AndroidManifest.xml file:\n\n```xml\n\u003capplication\n   \u003c!-- ... --\u003e\n      \u003cservice\n        android:name=\"com.appsflyer.FirebaseMessagingServiceListener\"\u003e\n        \u003cintent-filter\u003e\n          \u003caction android:name=\"com.google.firebase.MESSAGING_EVENT\"/\u003e\n        \u003c/intent-filter\u003e\n      \u003c/service\u003e\n   \u003c!-- ... --\u003e\n\u003c/application\u003e\n```\nThe appsflyer.FirebaseMessagingServiceListener extends Firebase's \u003c\u003eFirebaseMessagingService class, which is used in order to receive Firebase's Device Token.\n\n3.2 Developers who already use Firebase for other third-party platforms\n\nIf a developer intends to use FCM with more than one platform / SDK, they would need to implement a logic that collects the Device Token and passes it to all relevant platforms. This is done by extending a new instance of the FirebaseMessagingService (similar to the service the AppsFlyer SDK extends):\n\n```c#\nusing System;\nusing Android.App;\nusing Com.Appsflyer;\nusing Firebase.Messaging;\n\n\n[Service]\n[IntentFilter(new[] { \"com.google.firebase.MESSAGING_EVENT\" })]\npublic class MyNewFirebaseManager : FirebaseMessagingService\n{\n    public override void OnNewToken(string newToken)\n    {\n        base.OnNewToken(newToken);\n        // Sending new token to AppsFlyer\n        Console.WriteLine(\"MyNewFirebaseManager onNewToken\");\n        AppsFlyerLib.Instance.UpdateServerUninstallToken(ApplicationContext, newToken);\n        // the rest of the code that makes use of the token goes in this method as well\n    }\n}\n```\n\n4. Add your Server Key to AppsFlyer's dashboard.\n\nFor more information regarding how to obtain the Server Key, please review this article : https://support.appsflyer.com/hc/en-us/articles/208004986-Android-Uninstall-Tracking\n\n### \u003ca id=\"SetCustomerUserId\"\u003e\n\n## Set Customer User ID\n\n```c#\nAppsFlyerLib.Instance.SetCustomerUserId(\"custom_id\");\n```\n\n### \u003ca id=\"SetDebugLog\"\u003e\n\n## Set Debug Log\n\n```c#\nAppsFlyerLib.Instance.SetDebugLog(true);\n```\n\n### \u003ca id=\"GetAppsFlyerUID\"\u003e\n\n## Get AppsFlyer UID\n\n```c#\nAppsFlyerLib.Instance.GetAppsFlyerUID(this.BaseContext);\n```\n\n### \u003ca id=\"SetMinTimeBetweenSessions\"\u003e\n\n## Set Min Time Between Sessions\nFor AppsFlyer to count two separate sessions, the default time between each session must be at least 5 seconds. A session commences when the user opens the app. If you want to configure a different time between sessions, use the following API: \n\n```c#\nAppsFlyerLib.Instance.SetMinTimeBetweenSessions(int time);\n```\n\n### \u003ca id=\"AnonymizeUser\"\u003e\n\n## AnonymizeUser\n\n```c#\nAppsFlyerLib.Instance.AnonymizeUser(true);\n```\n\n### \u003ca id=\"Stop\"\u003e\n\n## Stop \nIn some extreme cases you might want to shut down all SDK attribution functions due to legal and privacy compliance. This can be achieved with the Stop() API. Once this API is invoked, our SDK will no longer communicate with our servers and stop functioning.\n\n```c#\nAppsFlyerLib.Instance.Stop(true, this.BaseContext);\n```\n\n### \u003ca id=\"WaitForCustomerUserId\"\u003e\n\n## Wait For Customer User ID\nIt is possible to delay the SDK Initialization until the customerUserID is set. This feature makes sure that the SDK doesn't begin functioning until the customerUserID is provided. If this API is used, all in-app events and any other SDK API calls are discarded, until the customerUserID is provided and logged.\n\n```c#\nAppsFlyerLib.Instance.WaitForCustomerUserId(true);\nAppsFlyerLib.Instance.SetCustomerIdAndLogSession(\"custom_id\", this.BaseContext);\n```\n### \u003ca id=\"SetPreinstallAttribution\"\u003e\n\n## Set Preinstall Attribution\n\n```c#\nAppsFlyerLib.Instance.SetPreinstallAttribution(string mediaSource, string campaign, string siteId);\n```\n### \u003ca id=\"DMAConsent\"\u003e\n\n## DMA Consent\n\nAs part of the EU Digital Marketing Act (DMA) legislation, big tech companies must get consent from European end users before using personal data from third-party services for advertising.\u003cbr\u003e\nRead more [here](https://dev.appsflyer.com/hc/docs/android-send-consent-for-dma-compliance)\n```c#\n//Automatic collection\nAppsFlyerLib.Instance.EnableTCFDataCollection(true);    // When using CMP, the SDK will collect the consent data\n\n// OR\n\n// Manual collection\n// hasConsentForDataUsage (1st argument): Indicates whether the user has consented to use their data for advertising purposes.\n// hasConsentForAdsPersonalization (2nd argument): Indicates whether the user has consented to use their data for personalized advertising purposes.\nAppsFlyerConsent consent = AppsFlyerConsent.ForGDPRUser(true, true);\n// or\n// If GDPR doesn’t apply to the user\nAppsFlyerConsent consent = AppsFlyerConsent.ForNonGDPRUser();\n\nAppsFlyerLib.Instance.SetConsentData(consent);\n...\nAppsFlyerLib.Instance.Start(this.Application, \"xXxXxXx\");\n```\n\n### \u003ca id=\"LogAdRevenue\"\u003e\n\n## Log Ad Revenue\nThe app sends impression revenue data to the SDK which then sends it to AppsFlyer. The revenue data is collected and processed in AppsFlyer, and the revenue is attributed to the original UA source. To learn more about ad revenue see [here](https://support.appsflyer.com/hc/en-us/articles/217490046-ROI360-ad-revenue-attribution-guide#connect-to-ad-revenue-integrated-partners).\n\n### **Usage:**\nTo use the logAdRevenue method, you must:\n\n1. Prepare an instance of `AdRevenueData` with the required information about the ad revenue event.\n1. Call `logAdRevenue` with the `AdRevenueData` instance.\n\n**AdRevenueData Class**\nAdRevenueData is a data class representing all the relevant information about an ad revenue event:\n\n* `monetizationNetwork`: The source network from which the revenue was generated (e.g., AdMob, Unity Ads).\n* `mediationNetwork`: The mediation platform managing the ad (use the MediationNetwork enum to choose supported networks).\n* `currencyIso4217Code`: The ISO 4217 currency code representing the currency of the revenue amount (e.g., \"USD\", \"EUR\").\n* `revenue`: The amount of revenue generated from the ad.\n* `additionalParameters`: Additional parameters related to the ad revenue event (optional, nullable).\n\n### Example:\n```c#\n// Create an instance of AFAdRevenueData\nAFAdRevenueData adRevenueData = new AFAdRevenueData(\n            \"ironsource\",                 // monetizationNetwork\n            MediationNetwork.GoogleAdmob, // mediationNetwork\n            \"USD\",                        // currencyIso4217Code\n            123.45                        // revenue\n    );\n// Optional additional parameters can be added here. This is an example, can be discarded if not needed.\nDictionary\u003cstring, Java.Lang.Object\u003e additionalParameters = new Dictionary\u003cstring, Java.Lang.Object\u003e\n{\n    { AdRevenueScheme.Country, \"US\" },\n    { AdRevenueScheme.AdUnit, \"89b8c0159a50ebd1\" },    \n    { AdRevenueScheme.AdType, \"Banner\" },\n    { AdRevenueScheme.Placement, \"place\" }\n};\n\n// finally log the ad revenue event.\nAppsFlyerLib.Instance.LogAdRevenue(adRevenueData, additionalParameters);\n```\n\n### \u003ca id=\"ValidateAndLogInAppPurchase\"\u003e\n\n## ValidateAndLogInAppPurchase\nThe method validates a purchase event with the store and if the validation is successful, the SDK sends an af_purchase event to AppsFlyer.\n\n### Example:\n```c#\n// AFPurchaseDetails object that encapsulates all data related to the purchase provided to the validateAndLogInAppPurchase method.\nAFPurchaseDetails purchaseDetails = new AFPurchaseDetails(\n    AFPurchaseType.OneTimePurchase,\n    \"purchase_token\",\n    \"productId\",\n    \"40.5\",\n    \"USD\"\n    );\n\n// Optional additional parameters can be added here. This is an example, can be discarded if not needed.\nDictionary\u003cstring, string\u003e customParameters = new Dictionary\u003cstring, string\u003e\n    {\n        { \"Country\", \"US\" },\n        { \"myCustomParam\", \"32423bwdfnsdf\"}\n    };\n\nvar validationCallback = new MyPurchaseValidationCallback();\n\nAppsFlyerLib.Instance.ValidateAndLogInAppPurchase(purchaseDetails, customParameters, validationCallback);\n```\n\nWhen MyPurchaseValidationCallback is actually:\n```c#\nusing System.Collections.Generic;\nusing Com.Appsflyer;\n\nnamespace XamarinSample\n{\n    public class MyPurchaseValidationCallback\n    : Java.Lang.Object, IAppsFlyerInAppPurchaseValidationCallback\n    {\n        void IAppsFlyerInAppPurchaseValidationCallback.OnInAppPurchaseValidationError(IDictionary\u003cstring, Java.Lang.Object\u003e validationError)\n        {\n            // Handle Validation Error Logic\n        }\n\n        void IAppsFlyerInAppPurchaseValidationCallback.OnInAppPurchaseValidationFinished(IDictionary\u003cstring, Java.Lang.Object\u003e validationResult)\n        {\n            // Handle Validation Finished Logic\n        }\n    }\n}\n```\n\n\n### \u003ca id=\"sample_app\"\u003e\n## Sample App \nSample app can be found here:\nhttps://github.com/AppsFlyerSDK/XamarinAndroidBinding/tree/master/samples/Sample.NuGet.Xamarin\n\n\n---\n\nIn order for us to provide optimal support, we would kindly ask you to submit any issues to support@appsflyer.com.\n\n\n\n*_When submitting an issue please specify your AppsFlyer sign-up (account) email, your app ID, production steps, logs, code snippets and any additional relevant information._*\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappsflyersdk%2Fxamarinandroidbinding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappsflyersdk%2Fxamarinandroidbinding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappsflyersdk%2Fxamarinandroidbinding/lists"}