Identify users at registration (Android)

The account registered signal is how your Android app tells Connect that a new user just signed up. The SDK sends an identifier — typically a customer ID or email address — and Connect uses it to create the contact record or match it to an existing one. Once the contact is known, marketers can trigger onboarding journeys and attribute the rest of the session to that contact.

Languages: Kotlin and Java

Availability: Pro, Premium, and Ultimate

How identification works

Two parameters do the identification work:

  • identifierName — the contact attribute in Connect that the value should be matched against, for example Customer ID or Email Address.
  • identifierValue — the value itself.

The identifierName must match a contact attribute name exactly as it appears in Connect, including capitalization and spacing. To look up attribute names, in Connect go to Audience > Contacts > Attributes.

Choosing an identifier

Use the most stable identifier your account-creation service returns:

  1. Customer ID (preferred). If your Connect audience has a contact key attribute, use it — this is what Connect uses internally to identify a contact.
  2. Email address or phone number. Both are standard contact attributes in Connect and work well when no customer ID is available.

When to call

MomentWhy
After the account is createdMatches the new user to an existing Connect contact, or creates a new identified contact from their first session.
After order confirmationA fallback for guest users where an email address may be available from the order.

API reference

Connect.logIdentificationEvent(
    identifierName: String,
    identifierValue: String,
    url: String = "http://acoustic.co/test",
    signalType: String = "accountRegistered",
    additionalParameters: Map<String, String> = emptyMap()
): Boolean
ParameterRequiredDescription
identifierNameYesThe contact attribute name in Connect. Must match exactly — case sensitive.
identifierValueYesThe value of the identifier.
urlNoThe screen context for the signal, for example "RegistrationScreen".
signalTypeYesPass "accountRegistered".
additionalParametersNoSignal content fields. See Supported fields below.

Returns false without throwing if either identifierName or identifierValue is blank.

Supported fields in additionalParameters

Required

  • registrationMethod — how the user registered, for example "email", "passwordless", or "sso".

Optional

  • registrationSource — where the registration originated, for example "Android app" or "referral".
  • ssoProvider — the SSO provider name, for example "Google" or "Apple". Include only for SSO-backed registrations.
  • name — a short label for the signal instance. Appears as the signal name in Connect.
  • description — a longer human-readable note describing the event.

Example

Call logIdentificationEvent() after the account is created — not on form submit.

accountService.register(email, password) { result ->
    when (result) {
        is Success -> {
            Connect.logIdentificationEvent(
                identifierName = "Email Address",
                identifierValue = result.user.email,
                url = "RegistrationScreen",
                signalType = "accountRegistered",
                additionalParameters = mapOf(
                    "registrationMethod" to "email",
                    "registrationSource" to "Android app"
                )
            )
            navigateToOnboarding()
        }
        is Failure -> showError(result.error)
    }
}

Try the sample app

Both sample apps include a working identity screen:

Troubleshooting

Signal not appearing in Connect?

  • Verify identifierName and identifierValue are not empty or whitespace-only. The SDK trims both and returns false silently if either is blank.
  • Confirm identifierName matches a contact attribute in Connect exactly — including capitalization and spacing.
  • Confirm the signal fires after the account is created, not on form submit.
  • Confirm additionalParameters includes registrationMethod. The signal is rejected if this field is missing.

Contact not created or updated?

  • Verify the identifierName value matches a contact attribute defined in Connect.
  • Attribute values must be passed as strings. If the matching attribute in Connect is typed as a number, Boolean, or date, pass the value as a string representation (for example, "42", "true", or an ISO 8601 date string).