Skip to content

Integration Brief Template

A reusable hand-off template for consultants and developers. One brief per app per engagement — the consultant fills in the {{PLACEHOLDER}} fields, sends it to the developer, and both sides sign off when the acceptance test in §5 passes.

How to use this page

Download this template and fill in the {{PLACEHOLDER}} fields.


Airlock Integration Brief — {{CLIENT_NAME}} / {{APP_NAME}}

Field Value
Engagement {{ENGAGEMENT_NAME}}
Consultant {{CONSULTANT_NAME}} <{{CONSULTANT_EMAIL}}>
Developer contact {{DEV_CONTACT_NAME}} <{{DEV_CONTACT_EMAIL}}>
Target platforms iOS / Android / both
Airlock version {{AIRLOCK_VERSION}} (e.g. 0.3.16)
Brief issued {{YYYY-MM-DD}}
Go-live target {{YYYY-MM-DD}}

1. What Airlock does in this app

Airlock is an Adobe Launch extension that runs on-device, intercepting every analytics event between MobileCore.track*() and Adobe's collection servers. It applies JavaScript rules authored in Launch — enriching, mutating, suppressing, or passing through events without an app rebuild.

For this engagement, Airlock will be configured to:

  • {{BUSINESS_OUTCOME_1}}
  • {{BUSINESS_OUTCOME_2}}
  • {{BUSINESS_OUTCOME_3}}

The developer integrates the SDK once. All future rule changes ship over-the-air through Adobe Launch and require no app release.

2. Adobe Launch configuration

Field Value
Adobe org {{ADOBE_ORG_NAME}} ({{ADOBE_ORG_ID}}@AdobeOrg)
Launch property name {{LAUNCH_PROPERTY_NAME}}
Launch property ID {{LAUNCH_PROPERTY_ID}}
Dev environment ID {{LAUNCH_DEV_APP_ID}}
Stage environment ID {{LAUNCH_STAGE_APP_ID}}
Prod environment ID {{LAUNCH_PROD_APP_ID}}

These IDs go into MobileCore.configureWithAppId(...) (see §4).

3. SDK dependencies

These must be installed and registered in addition to Airlock. Airlock requires AEP Core 5.0+ on iOS and 3.0+ on Android.

Extension iOS Android Why
AEP Core AEPCore ≥ 5.0 com.adobe.marketing.mobile:core:3.+ Required — event hub
AEP Identity AEPIdentity ≥ 5.0 com.adobe.marketing.mobile:identity:3.+ Required — ECID resolution
AEP Lifecycle AEPLifecycle ≥ 5.0 com.adobe.marketing.mobile:lifecycle:3.+ Recommended — session metrics
AEP Analytics AEPAnalytics ≥ 5.0 com.adobe.marketing.mobile:analytics:3.+ Required — actually sends the hit
AEP Assurance AEPAssurance ≥ 5.0 com.adobe.marketing.mobile:assurance:3.+ Required for acceptance test
Airlock Airlock {{AIRLOCK_VERSION}} com.maxisdigital:airlock:{{AIRLOCK_VERSION}} (via JitPack for v0.x) The extension itself

4. Integration steps

4a. iOS

Add the package in Xcode → File → Add Packages…:

https://github.com/maxisdigital/airlock-ios  → exact version {{AIRLOCK_VERSION}}

Register at app launch. In AppDelegate.swift (or your @main App init):

import AEPCore
import AEPIdentity
import AEPLifecycle
import AEPAnalytics
import AEPAssurance
import Airlock

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions:
                 [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    MobileCore.setLogLevel(.debug)  // Remove for production
    MobileCore.registerExtensions([
        Identity.self,
        Lifecycle.self,
        Analytics.self,
        Assurance.self,
        Airlock.self,
    ]) {
        MobileCore.configureWith(appId: "{{LAUNCH_DEV_APP_ID}}")
        MobileCore.lifecycleStart(additionalContextData: nil)
    }
    return true
}

Deep link (for Assurance sessions). Add to Info.plist:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array><string>{{ASSURANCE_DEEP_LINK_SCHEME}}</string></array>
  </dict>
</array>

Forward the URL in SceneDelegate:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    URLContexts.forEach { Assurance.startSession(url: $0.url) }
}

4b. Android

Add to app/build.gradle.kts (root settings.gradle.kts must declare JitPack as a repository for v0.x):

// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
        maven { url = uri("https://jitpack.io") }
    }
}
// app/build.gradle.kts
dependencies {
    implementation("com.adobe.marketing.mobile:core:3.+")
    implementation("com.adobe.marketing.mobile:identity:3.+")
    implementation("com.adobe.marketing.mobile:lifecycle:3.+")
    implementation("com.adobe.marketing.mobile:analytics:3.+")
    implementation("com.adobe.marketing.mobile:assurance:3.+")
    implementation("com.github.maxisdigital:airlock-android:{{AIRLOCK_VERSION}}")
}

Register in Application.onCreate():

import com.adobe.marketing.mobile.*
import com.maxisdigital.airlock.Airlock

class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        MobileCore.setApplication(this)
        MobileCore.setLogLevel(LoggingMode.DEBUG)  // Remove for production

        MobileCore.registerExtensions(
            listOf(
                Identity.EXTENSION,
                Lifecycle.EXTENSION,
                Analytics.EXTENSION,
                Assurance.EXTENSION,
                Airlock.EXTENSION,
            )
        ) {
            MobileCore.configureWithAppID("{{LAUNCH_DEV_APP_ID}}")
            MobileCore.lifecycleStart(null)
        }
    }
}

Declare it in the manifest: android:name=".MainApplication".

Assurance deep link in AndroidManifest.xml (on the launcher activity):

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="{{ASSURANCE_DEEP_LINK_SCHEME}}" />
</intent-filter>

Forward the URI in the activity's onNewIntent:

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    intent.data?.let { Assurance.startSession(it.toString()) }
}

5. Acceptance test

The developer should consider integration complete when all of the following pass.

5a. Build & launch

  • [ ] App builds clean against {{AIRLOCK_VERSION}} with no warnings about missing extensions
  • [ ] App launches without crashing on a clean install

5b. Assurance session

  • [ ] Consultant creates an Assurance session in Adobe Experience Platform
  • [ ] Developer scans the QR / opens the deep link → app connects (green dot in Assurance UI)
  • [ ] Assurance shows an Airlock — (registered) event in the event list

5c. Event flow

  • [ ] App fires a MobileCore.trackAction("test-event", nil) (or in-app action)
  • [ ] Assurance shows the original generic.track / request.content event
  • [ ] Assurance shows a corresponding Airlock Processed Track event with contextdata.airlock = "{{AIRLOCK_VERSION}}" and contextdata.airlock.status = "ok"
  • [ ] Adobe Analytics receives the enriched hit (visible in Assurance's "Network Requests" view)

5d. Rule execution (consultant validates)

  • [ ] At least one configured rule from §1 fires and produces the expected modification on the outgoing hit

6. Boundaries — who owns what

Developer owns:

  • App code, build configuration, dependency management
  • SDK registration order and configureWithAppId(...) call
  • Lifecycle / deep-link wiring
  • Crash reporting, error tracking, anything outside the Adobe SDK stack

Consultant owns:

  • Adobe Launch property — rules, data elements, extensions
  • Airlock configuration (airlock.enabled, macros, lookup tables, accumulators, derived metrics)
  • Rule JavaScript
  • Adobe Analytics report suite configuration

Do not edit on the developer side

  • The Airlock SDK source (it's a pinned dependency — bumping the version is fine, editing the source is not).
  • The Adobe Launch property unless co-ordinating with the consultant.

7. Support & escalation

Need Contact
Bug in Airlock SDK File an issue: {{ISSUE_TRACKER_URL}}
Rule misbehaviour Consultant: {{CONSULTANT_NAME}} <{{CONSULTANT_EMAIL}}>
Adobe SDK bug aepsdk-core-ios issues / aepsdk-core-android issues
Acceptance test failures Walk through §5 with consultant on Assurance session

8. Sign-off

  • [ ] Developer has read this brief end-to-end
  • [ ] §5 acceptance test passes against Dev environment
  • [ ] §5 acceptance test passes against Stage environment
  • [ ] §5 acceptance test passes against Prod environment

Developer: ____ Date: ____

Consultant: ____ Date: ____