{"id":21478247,"url":"https://github.com/appsflyersdk/appsflyer-adobe-mobile-android-extension","last_synced_at":"2025-08-23T05:07:03.885Z","repository":{"id":42469914,"uuid":"160033897","full_name":"AppsFlyerSDK/appsflyer-adobe-mobile-android-extension","owner":"AppsFlyerSDK","description":"AppsFlyer Android SDK Extension for Adobe Mobile SDK","archived":false,"fork":false,"pushed_at":"2024-07-22T03:43:10.000Z","size":1014,"stargazers_count":2,"open_issues_count":7,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-15T20:15:13.852Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AppsFlyerSDK.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null}},"created_at":"2018-12-02T09:56:51.000Z","updated_at":"2024-07-22T03:43:13.000Z","dependencies_parsed_at":"2024-02-21T16:16:39.214Z","dependency_job_id":"ef9c2994-969a-4d8d-8207-38780aee54f8","html_url":"https://github.com/AppsFlyerSDK/appsflyer-adobe-mobile-android-extension","commit_stats":null,"previous_names":["appsflyersdk/appsflyeradobeextensionandroid"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/AppsFlyerSDK/appsflyer-adobe-mobile-android-extension","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2Fappsflyer-adobe-mobile-android-extension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2Fappsflyer-adobe-mobile-android-extension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2Fappsflyer-adobe-mobile-android-extension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2Fappsflyer-adobe-mobile-android-extension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AppsFlyerSDK","download_url":"https://codeload.github.com/AppsFlyerSDK/appsflyer-adobe-mobile-android-extension/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AppsFlyerSDK%2Fappsflyer-adobe-mobile-android-extension/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271745481,"owners_count":24813501,"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-08-23T02:00:09.327Z","response_time":69,"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-23T11:17:24.620Z","updated_at":"2025-08-23T05:07:03.866Z","avatar_url":"https://github.com/AppsFlyerSDK.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./gitresources/AF Logo_primary logo.png\" width=\"450\" \u003e\n\n# appsflyer-adobe-mobile-android-extension\n\n🛠 In order for us to provide optimal support, we would kindly ask you to submit any issues to support@appsflyer.com\n\n\u003e *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## Table of content\n\n- [Adding the SDK to your project](#add-sdk-to-project)\n- [Initializing the SDK](#init-sdk)\n- [Manual mode](#manual-mode)\n- [Guides](#guides)\n- [API](#api) \n- [Data Elements](#data-elements)\n- [Initializing the SDK](#init-sdk)\n- [Send consent for DMA compliance](#send-consent-for-DMA-compliance)\n\n\n### \u003ca id=\"plugin-build-for\"\u003e This plugin is built for\n    \n- Android AppsFlyer SDK **v6.13.0**\n\n## \u003ca id=\"add-sdk-to-project\"\u003e 📲 Adding the SDK to your project\n\nAdd the following to your app's `build.gradle (Module: app)` file:\n\n```groovy\nrepositories {\n    mavenCentral()\n}\n\ndependencies {\n...\nimplementation 'com.appsflyer:appsflyer-adobe-sdk-extension:6.+'\nimplementation 'com.android.installreferrer:installreferrer:1.1'\n}\n```\n\n\u003e Add the installreferrer library to improve attribution accuracy, protects from install fraud and more.\n\n## \u003ca id=\"init-sdk\"\u003e 🚀 Initializing the SDK\n    \nRegister the AppsFlyer extension from your `Application` class, alongside the Adobe SDK initialisation code: \n```java\n@Override  \npublic void onCreate() {  \n  super.onCreate();  \n  \n  MobileCore.setApplication(this);  \n  MobileCore.setLogLevel(LoggingMode.DEBUG);  \n  ...\n  try {\n  ...\n  AppsFlyerAdobeExtension.registerExtension();\n  ...\n  }\n}\n```\n\nIn Addition to adding the init code, the settings inside the launch dashboard must be set.\n\n\u003cimg src=\"./gitresources/LaunchAFInitNew.png\" width=\"550\" \u003e\n\n| Setting  | Description   |\n| -------- | ------------- |\n| AppsFlyer iOS App ID      | Your iTunes [application ID](https://support.appsflyer.com/hc/en-us/articles/207377436-Adding-a-new-app#available-in-the-app-store-google-play-store-windows-phone-store)  (required for iOS only)  |\n| AppsFlyer Dev Key   | Your application [devKey](https://support.appsflyer.com/hc/en-us/articles/211719806-Global-app-settings-#sdk-dev-key) provided by AppsFlyer (required)  |\n| Bind in-app events for    | Bind adobe event to appsflyer in-app events. For more info see the doc [here](/docs/Guides.md#events). |\n| Send attribution data    | Send conversion data from the AppsFlyer SDK to adobe. This is required for data elements. |\n| Debug Mode    | Debug mode - set to `true` for testing only.  |\n| Wait for ECID   | Once enabled, the SDK Initialization will be delayed until the Experience Cloud ID is set.  |\n\n\u003e Note: For Send attribution data, use this feature if you are only working with ad networks that allow sharing user level data with 3rd party tools.\n\n\n## \u003ca id=\"manual-mode\"\u003e Manual mode\nStarting version `6.13.0`, we support a manual mode to seperate the initialization of the AppsFlyer SDK and the start of the SDK.\u003c/br\u003e\nIn this case, the AppsFlyer SDK won't start automatically, giving the developer more freedom when to start the AppsFlyer SDK.\u003c/br\u003e\nPlease note that in manual mode, the developer is required to implement the API `AppsFlyerLib.getInstance().start(Activity activity)` in order to start the SDK.\u003c/br\u003e \nYou should set this mode before registering the `MobileCore` Extensions in `Application`.\u003cbr\u003e\nIf you are using CMP to collect consent data this feature is needed. See explanation [here](#send-consent-for-DMA-compliance).\n### Example:  \n```java\nAppsflyerAdobeExtension.manual = true;\n``` \nPlease look at the example below to see how to start SDK once you want.\u003c/br\u003e\nKeep in mind you shouldn't put the `start()` on a lifecycle method.\u003c/br\u003e\nTo start the AppsFlyer SDK, use the `start()` API, like the following :  \n```java\nAppsFlyerLib.getInstance().start(this)\n```   \n\n\n## \u003ca id=\"guides\"\u003e 📖 Guides\n\n- [Deep Linking](/docs/Guides.md#deeplinking)\n- [In-App Events](/docs/Guides.md#events)\n- [Data Elements](/docs/Guides.md#data-elements)\n- [Attribution Data tracking with Adobe Analytics](/docs/Guides.md#attr-data)\n- [Deeplink Data tracking with Adobe Analytics](/docs/Guides.md#deeplink-data)\n- [Adobe Analytics](/docs/AdobeAnalytics.md)\n\n## \u003ca id=\"api\"\u003e 📑 API\n  \nSee the full [API](/docs/API.md) available for this plugin.\n\n\n## \u003ca id=\"data-elements\"\u003e 📂 Data Elements\n  \nCheck out the available data elements [here](/docs/DataElements.md).\n\n\n## \u003ca id=\"send-consent-for-DMA-compliance\"\u003e Send consent for DMA compliance \nFor a general introduction to DMA consent data, see [here](https://dev.appsflyer.com/hc/docs/send-consent-for-dma-compliance).\u003cbe\u003e \nThe SDK offers two alternative methods for gathering consent data:\u003cbr\u003e \n- **Through a Consent Management Platform (CMP)**: If the app uses a CMP that complies with the [Transparency and Consent Framework (TCF) v2.2 protocol](https://iabeurope.eu/tcf-supporting-resources/), the SDK can automatically retrieve the consent details.\u003cbr\u003e \n\u003cbr\u003eOR\u003cbr\u003e\u003cbr\u003e \n- **Through a dedicated SDK API**: Developers can pass Google's required consent data directly to the SDK using a specific API designed for this purpose. \n### Use CMP to collect consent data \nA CMP compatible with TCF v2.2 collects DMA consent data and stores it in \u003ccode\u003eSharedPreferences\u003c/code\u003e. To enable the SDK to access this data and include it with every event, follow these steps:\u003cbr\u003e \n\u003col\u003e \n  \u003cli\u003e Call \u003ccode\u003eAppsFlyerLib.getInstance().enableTCFDataCollection(true)\u003c/code\u003e to instruct the SDK to collect the TCF data from the device. \n  \u003cli\u003e Set the the adapter to be manual : \u003ccode\u003eAppsflyerAdobeExtension.manual = true\u003c/code\u003e. \u003cbr\u003e This will allow us to delay the Conversion call in order to provide the SDK with the user consent. \n  \u003cli\u003e Initialize Adobe. \n  \u003cli\u003e In the \u003ccode\u003eActivity\u003c/code\u003e class, use the CMP to decide if you need the consent dialog in the current session.\n  \u003cli\u003e If needed, show the consent dialog, using the CMP, to capture the user consent decision. Otherwise, go to step 6. \n  \u003cli\u003e Get confirmation from the CMP that the user has made their consent decision, and the data is available in \u003ccode\u003eSharedPreferences\u003c/code\u003e.\n  \u003cli\u003e Call \u003ccode\u003eAppsFlyerLib.getInstance().start(this)\u003c/code\u003e\n\u003c/ol\u003e \n \n #### Application class\n``` java\noverride fun onCreate() {\n    super.onCreate()\n    AppsFlyerLib.getInstance().enableTCFDataCollection(true)\n    AppsflyerAdobeExtension.manual = true\n    MobileCore.setApplication(this);\n    MobileCore.setLogLevel(LoggingMode.DEBUG);\n    try {\n        AppsFlyerAdobeExtension.registerExtension();\n        Analytics.registerExtension();\n        Identity.registerExtension();\n        Lifecycle.registerExtension();\n        Signal.registerExtension();\n        UserProfile.registerExtension();\n        MobileCore.start(new AdobeCallback() {\n            @Override\n            public void call(Object o) {\n                MobileCore.configureWithAppID(\"Dev-Key\");\n            }\n        });\n\n        AppsFlyerAdobeExtension.registerAppsFlyerExtensionCallbacks(new AppsFlyerExtensionCallbacksListener() {\n          ...\n        });\n\n    } catch (Exception ex) {\n        Log.d(\"AdobeException: \",ex.toString());\n    }\n}\n```\n\n \n### Manually collect consent data \nIf your app does not use a CMP compatible with TCF v2.2, use the SDK API detailed below to provide the consent data directly to the SDK. \n\u003col\u003e \n  \u003cli\u003e Initialize \u003ccode\u003eAppsflyerAdobeExtension\u003c/code\u003e using manual mode and also \u003ccode\u003eMobileCore\u003c/code\u003e. This will allow us to delay the Conversion call in order to provide the SDK with the user consent. \n  \u003cli\u003e In the \u003ccode\u003eActivity\u003c/code\u003e class, determine whether the GDPR applies or not to the user.\u003cbr\u003e \n  - If GDPR applies to the user, perform the following:  \n      \u003col\u003e \n        \u003cli\u003e Given that GDPR is applicable to the user, determine whether the consent data is already stored for this session. \n            \u003col\u003e \n              \u003cli\u003e If there is no consent data stored, show the consent dialog to capture the user consent decision. \n              \u003cli\u003e If there is consent data stored continue to the next step. \n            \u003c/ol\u003e \n        \u003cli\u003e To transfer the consent data to the SDK create an object called \u003ccode\u003eAppsFlyerConsent\u003c/code\u003e using the \u003ccode\u003eforGDPRUser()\u003c/code\u003e method with the following parameters:\u003cbr\u003e \n          - \u003ccode\u003ehasConsentForDataUsage\u003c/code\u003e - Indicates whether the user has consented to use their data for advertising purposes.\u003cbr\u003e\n          - \u003ccode\u003ehasConsentForAdsPersonalization\u003c/code\u003e - Indicates whether the user has consented to use their data for personalized advertising purposes.\n        \u003cli\u003e Call \u003ccode\u003eAppsFlyerLib.getInstance().setConsentData()\u003c/code\u003e with the \u003ccode\u003eAppsFlyerConsent\u003c/code\u003e object.    \n        \u003cli\u003e Call \u003ccode\u003eAppsFlyerLib.getInstance().start(this)\u003c/code\u003e. \n      \u003c/ol\u003e\u003cbr\u003e \n    - If GDPR doesn’t apply to the user perform the following: \n      \u003col\u003e \n        \u003cli\u003e Create an \u003ccode\u003eAppsFlyerConsent\u003c/code\u003e object using the \u003ccode\u003eforNonGDPRUser()\u003c/code\u003e method. This method doesn’t accept any parameters.\n        \u003cli\u003e Call \u003ccode\u003eAppsFlyerLib.getInstance().setConsentData()\u003c/code\u003e with the \u003ccode\u003eAppsFlyerConsent\u003c/code\u003e object.  \n        \u003cli\u003e Call \u003ccode\u003eAppsFlyerLib.getInstance().start(this)\u003c/code\u003e. \n      \u003c/ol\u003e \n\u003c/ol\u003e \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappsflyersdk%2Fappsflyer-adobe-mobile-android-extension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappsflyersdk%2Fappsflyer-adobe-mobile-android-extension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappsflyersdk%2Fappsflyer-adobe-mobile-android-extension/lists"}