{"id":37032544,"url":"https://github.com/adobe/xamarin-acpcore","last_synced_at":"2026-01-14T03:59:21.909Z","repository":{"id":43394938,"uuid":"258229003","full_name":"adobe/xamarin-acpcore","owner":"adobe","description":"Adobe Experience Platform - Core plugin for Xamarin apps.","archived":true,"fork":false,"pushed_at":"2023-08-07T22:31:18.000Z","size":177124,"stargazers_count":6,"open_issues_count":0,"forks_count":6,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-12-08T13:55:25.134Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adobe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-23T14:17:16.000Z","updated_at":"2025-02-15T00:22:02.000Z","dependencies_parsed_at":"2022-09-14T11:10:30.103Z","dependency_job_id":null,"html_url":"https://github.com/adobe/xamarin-acpcore","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/adobe/xamarin-acpcore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fxamarin-acpcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fxamarin-acpcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fxamarin-acpcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fxamarin-acpcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adobe","download_url":"https://codeload.github.com/adobe/xamarin-acpcore/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobe%2Fxamarin-acpcore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408928,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":"2026-01-14T03:59:20.937Z","updated_at":"2026-01-14T03:59:21.899Z","avatar_url":"https://github.com/adobe.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Adobe Experience Platform - Core plugin for Xamarin apps\n\n## Notice of deprecation\n\nSince *April 25, 2023*, [Apple has required](https://developer.apple.com/news/?id=jd9wcyov) apps submitted to the App Store to be built with Xcode 14.1 or later. The Experience Platform Mobile SDKs and extensions outlined below were built with prior versions of Xcode and are no longer compatible with iOS and iPadOS given Apple’s current App Store requirements. Consequently, on *August 31, 2023*, Adobe will be deprecating support for the following Experience Platform Mobile SDKs and wrapper extensions:\n\n- [ACP iOS SDK](https://developer.adobe.com/client-sdks/previous-versions/documentation/sdk-versions/#ios)\n- [Cordova](https://developer.adobe.com/client-sdks/previous-versions/documentation/sdk-versions/#cordova)\n- [Flutter for ACP](https://developer.adobe.com/client-sdks/previous-versions/documentation/sdk-versions/#flutter)\n- [React Native for ACP](https://developer.adobe.com/client-sdks/previous-versions/documentation/sdk-versions/#react-native)\n- [Xamarin](https://developer.adobe.com/client-sdks/previous-versions/documentation/sdk-versions/#xamarin)\n\nAfter *August 31, 2023*, applications already submitted to the App Store that contain these SDKs and wrapper extensions will continue to operate, however, Adobe will not be providing security updates or bug fixes, and these SDKs and wrapper extensions will be provided as-is exclusive of any warranty, due to the App Store policy outlined above.\n\nWe encourage all customers to migrate to the latest Adobe Experience Platform versions of the Mobile SDK to ensure continued compatibility and support. Documentation for the latest versions of the Adobe Experience Platform Mobile SDKs can be found [here](https://developer.adobe.com/client-sdks/documentation/current-sdk-versions/). The iOS migration guide can be found [here](https://developer.adobe.com/client-sdks/previous-versions/documentation/migrate-to-swift/).\n\n---\n\n![CI](https://github.com/adobe/xamarin-acpcore/workflows/CI/badge.svg)\n[![ACPCore.Android](https://buildstats.info/nuget/Adobe.ACPCore.Android)](https://www.nuget.org/packages/Adobe.ACPCore.Android/)\n[![ACPIdentity.Android](https://buildstats.info/nuget/Adobe.ACPIdentity.Android)](https://www.nuget.org/packages/Adobe.ACPIdentity.Android/)\n[![ACPLifecycle.Android](https://buildstats.info/nuget/Adobe.ACPLifecycle.Android)](https://www.nuget.org/packages/Adobe.ACPLifecycle.Android/)\n[![ACPSignal.Android](https://buildstats.info/nuget/Adobe.ACPSignal.Android)](https://www.nuget.org/packages/Adobe.ACPSignal.Android/)\n[![ACPCore.iOS](https://buildstats.info/nuget/Adobe.ACPCore.iOS)](https://www.nuget.org/packages/Adobe.ACPCore.iOS/)\n[![ACPCore.tvOS](https://buildstats.info/nuget/Adobe.ACPCore.tvOS)](https://www.nuget.org/packages/Adobe.ACPCore.tvOS/)\n[![GitHub](https://img.shields.io/github/license/adobe/xamarin-acpcore)](https://github.com/adobe/xamarin-acpcore/blob/master/LICENSE)\n\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Running Tests](#running-tests)\n- [Sample App](#sample-app)\n- [Contributing](#contributing)\n- [Licensing](#licensing)\n\n## Prerequisites\n\nXamarin development requires the installation of [Microsoft Visual Studio](https://visualstudio.microsoft.com/downloads/). Information regarding installation for Xamarin development is available for [Mac](https://docs.microsoft.com/en-us/visualstudio/mac/installation?view=vsmac-2019) or [Windows](https://docs.microsoft.com/en-us/visualstudio/install/install-visual-studio?view=vs-2019).\n\n An [Apple developer account](https://developer.apple.com/programs/enroll/) and the latest version of Xcode (available from the App Store) are required if you are [building an iOS or tvOS app](https://docs.microsoft.com/en-us/visualstudio/mac/installation?view=vsmac-2019).\n\n## Installation\n\n**Package Manager Installation**\n\nThe ACPCore Xamarin NuGet package for Android or iOS or tvOS  can be added to your project by right clicking the _\"Packages\"_ folder within the project you are working on then selecting _\"Manage NuGet Packages\"_. In the window that opens, ensure that your selected source is `nuget.org` and search for _\"Adobe.ACP\"_. After selecting the Xamarin AEP SDK packages that are required, click on the _\"Add Packages\"_ button. After exiting the _\"Add Packages\"_ menu, right click the main solution or the _\"Packages\"_ folder and select _\"Restore\"_ to ensure the added packages are downloaded.\n\n**Manual installation**\n\nLocal ACPCore NuGet packages can be created via the included Makefile. If building for the first time, run:\n\n```\nmake setup\n```\n\nfollowed by:\n\n```\nmake release\n```\n\nThe created NuGet packages can be found in the `bin` directory. This directory can be added as a local nuget source and packages within the directory can be added to a Xamarin project following the steps in the \"Package Manager Installation\" above.\n\n## Usage\n\nThe ACPCore binding can be opened by loading the ACPCoreBinding.sln with Visual Studio. The following targets are available in the solution:\n\n- Adobe.ACPCore.iOS - The ACPCore iOS bindings which includes ACPCore, ACPIdentity, ACPLifecycle, and ACPSignal.\n- Adobe.ACPCore.tvOS - The ACPCore tvOS bindings which includes ACPCore, ACPIdentity, ACPLifecycle, and ACPSignal.\n- Adobe.ACPCore.Android - The ACPCore Android binding.\n- Adobe.ACPCoreBridge.Android - The ACPCoreBridge Android binding. This is used by the Xamarin Android ACPGriffon binding to correctly start a Griffon session from within an app activity.\n- Adobe.ACPCIdentity.Android - The ACPIdentity Android binding.\n- Adobe.ACPLifecycle.Android - The ACPLifecycle Android binding.\n- Adobe.ACPSIgnal.Android - The ACPSignal Android binding.\n- ACPCoreTestApp - The Xamarin.Forms base app used by the iOS and Android test apps.\n- ACPCoreTestApp.iOS - The Xamarin.Forms based iOS manual test app.\n- ACPCoreTestApp.tvOS - The Storyboard based tvOS manual test app.\n- ACPCoreTestApp.Android - The Xamarin.Forms based Android manual test app.\n- ACPCoreiOSUnitTests - iOS unit test app.\n- ACPCoreAndroidUnitTests - Android unit test app.\n\n\n### [Core](https://aep-sdks.gitbook.io/docs/using-mobile-extensions/mobile-core)\n\n#### Initialization\n\n**iOS:**\n```c#\n// Import the SDK\nusing Com.Adobe.Marketing.Mobile;\n\npublic override bool FinishedLaunching(UIApplication app, NSDictionary options)\n{\n  global::Xamarin.Forms.Forms.Init();\n  LoadApplication(new App());\n\n  // set the wrapper type\n  ACPCore.SetWrapperType(ACPMobileWrapperType.Xamarin);\n  \n  // set launch config\n  ACPCore.ConfigureWithAppID(\"yourAppId\");\n\n  // register SDK extensions\n  ACPIdentity.RegisterExtension();\n  ACPLifecycle.RegisterExtension();\n  ACPSignal.RegisterExtension();\n\n  // start core\n  ACPCore.Start(null);\n\n  // register dependency service to link interface from App base project\n  DependencyService.Register\u003cIExtensionService, ExtensionService\u003e();\n  return base.FinishedLaunching(app, options);\n}\n```\n\n**Android:**\n\n```c#\n// Import the SDK\nusing Com.Adobe.Marketing.Mobile;\n\nprotected override void OnCreate(Bundle savedInstanceState)\n{\n  TabLayoutResource = Resource.Layout.Tabbar;\n  ToolbarResource = Resource.Layout.Toolbar;\n  \n  base.OnCreate(savedInstanceState);\n\n  global::Xamarin.Forms.Forms.Init(this, savedInstanceState);\n  LoadApplication(new App());\n  \n  // set the wrapper type\n  ACPCore.SetWrapperType(WrapperType.Xamarin);\n  \n  // set launch config\n  ACPCore.ConfigureWithAppID(\"yourAppId\");\n\n  // register SDK extensions\n  ACPCore.Application = this.Application;\n  ACPIdentity.RegisterExtension();\n  ACPLifecycle.RegisterExtension();\n  ACPSignal.RegisterExtension();\n\n  // start core\n  ACPCore.Start(null);\n\n  // register dependency service to link interface from App base project\n  DependencyService.Register\u003cIExtensionService, ExtensionService\u003e();\n}\n```\n\n#### Core methods\n\n##### Getting Core version:\n\n**iOS and Android**\n\n```c#\nConsole.WriteLine(ACPCore.ExtensionVersion());\n```\n\n##### Updating the SDK configuration:\n\n**iOS**\n\n```c#\nvar config = new NSMutableDictionary\u003cNSString, NSObject\u003e\n{\n  [\"someConfigKey\"] = new NSString(\"configValue\")\n};\nACPCore.UpdateConfiguration(config);\n```\n\n**Android**\n\n```c#\nvar config = new Dictionary\u003cstring, Java.Lang.Object\u003e();\nconfig.Add(\"someConfigKey\", \"configValue\");\nACPCore.UpdateConfiguration(config);\n```\n\n##### Controlling the log level of the SDK:\n\n**iOS**\n\n```c#\nACPCore.LogLevel = ACPMobileLogLevel.Error;\nACPCore.LogLevel = ACPMobileLogLevel.Warning;\nACPCore.LogLevel = ACPMobileLogLevel.Debug;\nACPCore.LogLevel = ACPMobileLogLevel.Verbose;\n```\n\n**Android**\n\n```c#\nACPCore.LogLevel = LoggingMode.Error;\nACPCore.LogLevel = LoggingMode.Warning;\nACPCore.LogLevel = LoggingMode.Debug;\nACPCore.LogLevel = LoggingMode.Verbose;\n```\n\n##### Getting the current privacy status:\n\n**iOS**\n\n```c#\nvar callback = new Action\u003cACPMobilePrivacyStatus\u003e(handleCallback);\nACPCore.GetPrivacyStatus(callback);\n\nprivate void handleCallback(ACPMobilePrivacyStatus privacyStatus)\n{\n  Console.WriteLine(\"Privacy status: \" + privacyStatus.ToString());\n}\n```\n\n**Android**\n\n```c#\nACPCore.GetPrivacyStatus(new StringCallback());\n\nclass StringCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object stringContent)\n  {\n    if (stringContent != null)\n    {\n      Console.WriteLine(stringContent);\n    } \n    else \n    {\n      Console.WriteLine(\"null content in string callback\");\n    }\n  }\n}\n```\n\n##### Setting the privacy status:\n\n**iOS**\n\n```c#\nACPCore.SetPrivacyStatus(ACPMobilePrivacyStatus.OptIn);\n```\n\n**Android**\n\n```c#\nACPCore.SetPrivacyStatus(MobilePrivacyStatus.OptIn);\n```\n\n##### Getting the SDK identities:\n\n**iOS**\n\n```c#\nvar callback = new Action\u003cNSString\u003e(handleCallback);\nACPCore.GetSdkIdentities(callback);\n\nprivate void handleCallback(NSString content)\n{\n  Console.WriteLine(\"String callback: \" + content);\n}\n```\n\n**Android**\n\n```c#\nACPCore.GetSdkIdentities(new StringCallback());\n\nclass StringCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object stringContent)\n  {\n    if (stringContent != null)\n    {\n      Console.WriteLine(stringContent);\n    } \n    else \n    {\n      Console.WriteLine(\"null content in string callback\");\n    }\n  }\n}\n```\n\n##### Dispatching an Event Hub event:\n\n**iOS**\n\n```c#\nvar data = new NSMutableDictionary\u003cNSString, NSObject\u003e\n{\n  [\"dispatchResponseEventKey\"] = new NSString(\"dispatchResponseEventValue\")\n};\nACPExtensionEvent sdkEvent = ACPExtensionEvent.ExtensionEventWithName(\"eventName\", \"eventType\", \"eventSource\", data, out _);\nACPCore.DispatchEvent(sdkEvent, out error);\n```\n\n**Android**\n\n```c#\nvar data = new Dictionary\u003cstring, Java.Lang.Object\u003e();\ndata.Add(\"testEvent\", true);\nEvent sdkEvent = new Event.Builder(\"eventName\", \"eventType\", \"eventSource\").SetEventData(data).Build();\nACPCore.DispatchEvent(sdkEvent, new ErrorCallback());\n\nclass ErrorCallback : Java.Lang.Object, IExtensionErrorCallback\n{\n  public void Call(Java.Lang.Object sdkEvent)\n  {\n    Console.WriteLine(\"AEP SDK event data: \" + sdkEvent.ToString());\n  }\n  public void Error(Java.Lang.Object error)\n  {\n    Console.WriteLine(\"AEP SDK Error: \" + error.ToString());\n  }\n}\n```\n\n##### Dispatching an Event Hub event with callback:\n\n**iOS**\n\n```c#\nvar data = new NSMutableDictionary\u003cNSString, NSObject\u003e\n{\n  [\"dispatchResponseEventKey\"] = new NSString(\"dispatchResponseEventValue\")\n};\nACPExtensionEvent sdkEvent = ACPExtensionEvent.ExtensionEventWithName(\"eventName\", \"eventType\", \"eventSource\", data, out _);\nAction\u003cACPExtensionEvent\u003e callback = new Action\u003cACPExtensionEvent\u003e(handleCallback);\nACPCore.DispatchEventWithResponseCallback(sdkEvent, callback, out error);\n\nprivate void handleCallback(ACPExtensionEvent responseEvent)\n{\n  Console.WriteLine(\"Response event name: \"+ responseEvent.EventName.ToString() + \" type: \" + responseEvent.EventType.ToString() + \" source: \" + responseEvent.EventSource.ToString() + \" data: \" + responseEvent.EventData.ToString());\n}\n```\n\n**Android**\n\n```c#\nvar data = new Dictionary\u003cstring, Java.Lang.Object\u003e();\ndata.Add(\"testEvent\", true);\nEvent sdkEvent = new Event.Builder(\"eventName\", \"eventType\", \"eventSource\").SetEventData(data).Build();\nACPCore.DispatchEventWithResponseCallback(sdkEvent, new StringCallback(), new ErrorCallback());\n\nclass StringCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object stringContent)\n  {\n    if (stringContent != null)\n    {\n      Console.WriteLine(stringContent);\n    } \n    else \n    {\n      Console.WriteLine(\"null content in string callback\");\n    }\n  }\n}\n\nclass ErrorCallback : Java.Lang.Object, IExtensionErrorCallback\n{\n  public void Call(Java.Lang.Object sdkEvent)\n  {\n    Console.WriteLine(\"AEP SDK event data: \" + sdkEvent.ToString());\n  }\n  public void Error(Java.Lang.Object error)\n  {\n    Console.WriteLine(\"AEP SDK Error: \" + error.ToString());\n  }\n}\n```\n\n##### Dispatching an Event Hub response event:\n\n**iOS**\n\n```c#\nvar data = new NSMutableDictionary\u003cNSString, NSObject\u003e\n{\n  [\"dispatchResponseEventKey\"] = new NSString(\"dispatchResponseEventValue\")\n};\nACPExtensionEvent requestEvent = ACPExtensionEvent.ExtensionEventWithName(\"eventName\", \"eventType\", \"eventSource\", data, out _);\nACPExtensionEvent responseEvent = ACPExtensionEvent.ExtensionEventWithName(\"eventName\", \"eventType\", \"eventSource\", data, out _);\nACPCore.DispatchResponseEvent(responseEvent, requestEvent, out error));\n```\n\n**Android**\n\n```c#\nvar data = new Dictionary\u003cstring, Java.Lang.Object\u003e();\ndata.Add(\"testDispatchResponseEvent\", \"true\");\nEvent requestEvent = new Event.Builder(\"eventName\", \"eventType\", \"eventSource\").SetEventData(data).Build();\nEvent responseEvent = new Event.Builder(\"eventName\", \"eventType\", \"eventSource\").SetEventData(data).Build();\nACPCore.DispatchResponseEvent(responseEvent, requestEvent, new ErrorCallback());\n\nclass ErrorCallback : Java.Lang.Object, IExtensionErrorCallback\n{\n  public void Call(Java.Lang.Object sdkEvent)\n  {\n    Console.WriteLine(\"AEP SDK event data: \" + sdkEvent.ToString());\n  }\n  public void Error(Java.Lang.Object error)\n  {\n    Console.WriteLine(\"AEP SDK Error: \" + error.ToString());\n  }\n}\n```\n\n##### Downloading the Rules\n\n**iOS only**\n\n```c#\nACPCore.DownloadRules();\n```\n\n##### Setting the advertising identifier:\n\n**iOS and Android**\n\n```c#\nACPCore.SetAdvertisingIdentifier(\"testAdvertisingIdentifier\");\n```\n\n##### Calling track action\n\n**iOS**\n\n```c#\nvar data = new NSMutableDictionary\u003cNSString, NSString\u003e\n{\n  [\"key\"] = new NSString(\"value\")\n};\nACPCore.TrackAction(\"action\", data);\n```\n\n**Android**\n\n```c#\nvar data = new Dictionary\u003cstring, string\u003e();\ndata.Add(\"key\", \"value\");\nACPCore.TrackAction(\"action\", data);\n```\n\n##### Calling track state\n\n**iOS**\n\n```c#\nvar data = new NSMutableDictionary\u003cNSString, NSString\u003e\n{\n  [\"key\"] = new NSString(\"value\")\n};\nACPCore.TrackState(\"state\", data);\n```\n\n**Android**\n\n```c#\nvar data = new Dictionary\u003cstring, string\u003e();\ndata.Add(\"key\", \"value\");\nACPCore.TrackState(\"state\", data);\n```\n\n### [Identity](https://aep-sdks.gitbook.io/docs/using-mobile-extensions/mobile-core/identity)\n\n##### Getting Identity version:\n\n**iOS and Android**\n\n```c#\nConsole.WriteLine(ACPIdentity.ExtensionVersion());\n```\n\n##### Sync Identifier:\n\n**iOS**\n\n```c#\nACPIdentity.SyncIdentifier(\"name\", \"john\", ACPMobileVisitorAuthenticationState.Authenticated);\n```\n\n**Android**\n\n```c#\nACPIdentity.SyncIdentifier(\"name\", \"john\", VisitorID.AuthenticationState.Authenticated);\n```\n\n##### Sync Identifiers:\n\n**iOS**\n\n```c#\nvar ids = new NSMutableDictionary\u003cNSString, NSObject\u003e\n{\n  [\"lastName\"] = new NSString(\"doe\"),\n  [\"age\"] = new NSString(\"38\"),\n  [\"zipcode\"] = new NSString(\"94403\")\n};\nACPIdentity.SyncIdentifiers(ids);\n```\n\n**Android**\n\n```c#\nvar ids = new Dictionary\u003cstring, string\u003e();\nids.Add(\"lastname\", \"doe\");\nids.Add(\"age\", \"38\");\nids.Add(\"zipcode\", \"94403\");\nACPIdentity.SyncIdentifiers(ids);\n```\n\n##### Sync Identifiers with Authentication State:\n\n**iOS**\n\n```c#\nvar ids = new NSMutableDictionary\u003cNSString, NSObject\u003e\n{\n  [\"lastName\"] = new NSString(\"doe\"),\n  [\"age\"] = new NSString(\"38\"),\n  [\"zipcode\"] = new NSString(\"94403\")\n};\nACPIdentity.SyncIdentifiers(ids, ACPMobileVisitorAuthenticationState.LoggedOut);\n```\n\n**Android**\n\n```c#\nvar ids = new Dictionary\u003cstring, string\u003e();\nids.Add(\"lastname\", \"doe\");\nids.Add(\"age\", \"38\");\nids.Add(\"zipcode\", \"94403\");\nACPIdentity.SyncIdentifiers(ids, VisitorID.AuthenticationState.LoggedOut);\n```\n\n##### Append visitor data to a URL:\n\n**iOS**\n\n```c#\nvar callback = new Action\u003cNSUrl\u003e(handleCallback);\nvar url = new NSUrl(\"https://example.com\");\nACPIdentity.AppendToUrl(url, callback);\n\nprivate void handleCallback(NSString content)\n{\n  Console.WriteLine(\"String callback: \" + content);\n}\n```\n\n**Android**\n\n```c#\nACPIdentity.AppendVisitorInfoForURL(\"https://example.com\", new StringCallback());\n\nclass StringCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object stringContent)\n  {\n    if (stringContent != null)\n    {\n      Console.WriteLine(stringContent);\n    } \n    else \n    {\n      Console.WriteLine(\"null content in string callback\");\n    }\n  }\n}\n```\n\n##### Get visitor data as URL query parameter string:\n\n**iOS**\n\n```c#\nvar callback = new Action\u003cNSString\u003e (handleCallback);\nACPIdentity.GetUrlVariables(callback);\n\nprivate void handleCallback(NSString content)\n{\n  Console.WriteLine(\"String callback: \" + content);\n}\n```\n\n**Android**\n\n```c#\nACPIdentity.GetUrlVariables(new StringCallback());\n\nclass StringCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object stringContent)\n  {\n    if (stringContent != null)\n    {\n      Console.WriteLine(stringContent);\n    } \n    else \n    {\n      Console.WriteLine(\"null content in string callback\");\n    }\n  }\n}\n```\n\n##### Get Identifiers:\n\n**iOS**\n\n```c#\nvar callback = new Action\u003cACPMobileVisitorId[]\u003e(handleCallback);\nACPIdentity.GetIdentifiers(callback);\n\nprivate void handleCallback(ACPMobileVisitorId[] ids)\n{\n  String visitorIdsString = \"[]\";\n  if (ids.Length != 0)\n  {\n    visitorIdsString = \"\";\n    foreach (ACPMobileVisitorId id in ids)\n    {\n      visitorIdsString = visitorIdsString + \"[Id: \" + id.Identifier + \", Type: \" + id.IdType + \", Origin: \" + id.IdOrigin + \", Authentication: \" + id.AuthenticationState + \"]\";\n    }\n  }\n  Console.WriteLine(\"Retrieved visitor ids: \" + visitorIdsString);\n}\n```\n\n**Android**\n\n```c#\nACPIdentity.GetIdentifiers(new GetIdentifiersCallback());\n\nclass GetIdentifiersCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object visitorIDs)\n  {\n    JavaList ids = null;\n    System.String visitorIdsString = \"[]\";\n    if (visitorIDs != null)\n    {\n      ids = (JavaList)visitorIDs;\n      if (!ids.IsEmpty)\n      {\n        visitorIdsString = \"\";\n        foreach (VisitorID id in ids)\n        {\n          visitorIdsString = visitorIdsString + \"[Id: \" + id.Id + \", Type: \" + id.IdType + \", Origin: \" + id.IdOrigin + \", Authentication: \" + id.GetAuthenticationState() + \"]\";\n        }\n      }\n    }\n    Console.WriteLine(\"Retrieved visitor ids: \" + visitorIdsString);\n  }\n}\n```\n\n##### Get Experience Cloud IDs:\n\n**iOS**\n\n```c#\nvar callback = new Action\u003cNSString\u003e(handleCallback);\nACPIdentity.GetExperienceCloudId(callback);\n\nprivate void handleCallback(NSString content)\n{\n  Console.WriteLine(\"String callback: \" + content);\n}\n```\n\n**Android**\n\n```c#\nACPIdentity.GetExperienceCloudId(new StringCallback());\n\nclass StringCallback : Java.Lang.Object, IAdobeCallback\n{\n  public void Call(Java.Lang.Object stringContent)\n  {\n    if (stringContent != null)\n    {\n      Console.WriteLine(stringContent);\n    } \n    else \n    {\n      Console.WriteLine(\"null content in string callback\");\n    }\n  }\n}\n```\n\n### [Lifecycle](https://aep-sdks.gitbook.io/docs/using-mobile-extensions/mobile-core/lifecycle)\n\n##### Getting Lifecycle version:\n\n**iOS and Android**\n\n```c#\nConsole.WriteLine(ACPLifecycle.ExtensionVersion());\n```\n\n##### Starting a Lifecycle session\n\n**iOS**\n\n```c#\npublic override void OnActivated(UIApplication uiApplication)\n{\n  base.OnActivated(uiApplication);\n  ACPCore.LifecycleStart(null);\n}\n```\n\n**Android**\n\n```c#\n protected override void OnResume()\n {\n   base.OnResume();\n   ACPCore.Application = this.Application;\n   ACPCore.LifecycleStart(null);\n }\n```\n\n**Pausing a Lifecycle session**\n\n**iOS**\n\n```c#\npublic override void OnResignActivation(UIApplication uiApplication)\n{\n  base.OnResignActivation(uiApplication);\n  ACPCore.LifecyclePause();\n}\n```\n\n**Android**\n\n```c#\n protected override void OnPause()\n {\n   base.OnPause();\n   ACPCore.LifecyclePause();\n }\n```\n\n### [Signal](https://aep-sdks.gitbook.io/docs/using-mobile-extensions/mobile-core/signals)\n\n##### Getting Signal version:\n\n**iOS and Android**\n\n```c#\nConsole.WriteLine(ACPSignal.ExtensionVersion());\n```\n\n##### Running Tests\n\niOS and Android unit tests are included within the ACPCore binding solution. They must be built from within Visual Studio then manually triggered from the unit test app that is deployed to an iOS or Android device.\n\n## Sample App\n\nA Xamarin Forms sample app is provided in the Xamarin ACPCore solution file.\n\n## Contributing\nLooking to contribute to this project? Please review our [Contributing guidelines](.github/CONTRIBUTING.md) prior to opening a pull request.\n\nWe look forward to working with you!\n\n## Licensing\nThis project is licensed under the Apache V2 License. See [LICENSE](LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fxamarin-acpcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadobe%2Fxamarin-acpcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobe%2Fxamarin-acpcore/lists"}