Tracking User Information
After you install SDK to your app, Reteno begins automatically collect such data:
- Information about push message delivery and openings,
- Users’ push tokens,
- Screen view events,
- Statuses of the users’ subscription to push notifications,
- User's time zone.
Reteno automatically creates user profiles with all these data, so you can immediately start working with new contacts, for example, sending them a mobile campaign.
When the user logs in or signs up to your app, you have to define a unique customer identifier that cannot be shared by other contacts. We call it External User Id or just User Id. The system will match all previous data with an external ID as the primary identifier and update the user’s profile.
Read more about system customer identifiers and their matching in the system >
External User ID
Add your custom External User Ids within Reteno
by the following method:
Reteno.setUserAttributes(externalUserId: String)
Reteno.setUserAttributes(String externalUserId)
Note
externalUserId
should not be null or empty, orIllegalArgumentException
will be thrown.
When to send your user ID to Reteno >
User Attributes
User attributes are attributes you define to describe segments of your user base, such as language preference or geographic location. Before sending specific contact data via API, you must add custom user fields to Reteno. Read more on how to set additional fields.
Note
You can track user attributes only for users with external user IDs.
Add user attributes like phone, email, etc by the following method:
Reteno.setUserAttributes(externalUserId: String, user: User?)
Reteno.setUserAttributes(String externalUserId, User user)
Note
externalUserId
should not be null or empty, orIllegalArgumentException
will be thrown.
User model:
{
"userAttributes":{
"phone":"String",
"email":"String",
"firstName":"String",
"lastName":"String",
"languageCode":"String",
"timeZone":"String",
"address":{
"region":"String",
"town":"String",
"address":"String",
"postcode":"String"
},
"fields":[
{
"key":"string",
"value":"string"
},
{
"key":"string",
"value":"string"
}
]
},
"subscriptionKeys":[
"string1",
"string2"
],
"groupNamesInclude":[
"string1",
"string2"
],
"groupNamesExclude":[
"string",
"string2"
]
}
The structure of models with optional and required fields:
data class User(
val userAttributes: UserAttributes? = null,
val subscriptionKeys: List<String>? = null,
val groupNamesInclude: List<String>? = null,
val groupNamesExclude: List<String>? = null
)
data class UserAttributes(
val phone: String? = null,
val email: String? = null,
val firstName: String? = null,
val lastName: String? = null,
val languageCode: String? = null,
val timeZone: String? = null,
val address: Address? = null,
val fields: List<UserCustomField>? = null,
)
data class Address(
val region: String? = null,
val town: String? = null,
val address: String? = null,
val postcode: String? = null
)
data class UserCustomField(
val key: String,
val value: String? = null
)
Note
Phone
We use Google's libphonenumber library for phone number validation. Send phone numbers in the E164 format. A request with an invalid phone number will not be transmitted. You can validate phone numbers by the link.
LanguageCode
Data about language in RFC 5646 format. Primary language subtag in ISO 639-1 format is required. Example: de-AT
TimeZone
Item from TZ database. Example:
Europe/Kyiv
Anonymous User Attributes
Available for RetenoSDK starting from version 1.5.3
Reteno
SDK allows tracking anonymous user attributes (no externalUserId required)
. To set user attributes without externalUserId use method setAnonymousUserAttributes()
:
Reteno.setAnonymousUserAttributes(attributes: UserAttributesAnonymous)
Reteno.setAnonymousUserAttributes(UserAttributesAnonymous attributes)
UserAttributesAnonymous model:
data class UserAttributesAnonymous(
/**
* Contact first name. Numbers cannot be used
*/
val firstName: String? = null,
/**
* Contact last name. Numbers cannot be used
*/
val lastName: String? = null,
/**
* Data about language in RFC 5646 format.
* Primary language subtag in ISO 639-1 format is required.
* Example: de-AT
*/
val languageCode: String? = null,
/**
* Item from TZ database. Example: Europe/Kyiv.
* See column [TZ database name](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
*/
val timeZone: String? = null,
/**
* Contact full address
*
* @see Address
*/
val address: Address? = null,
/**
* Additional field values for contact
*
* @see UserCustomField
*/
val fields: List<UserCustomField>? = null,
)
Note
You can't provide anonymous user attributes with phone or/and email. For that purpose use
setUserAttributes()
method with externalUserId.