Skip to content

Privacy & data

  • Targeting is evaluated on the device. No profile of the user is uploaded to decide who sees a survey.
  • For statistics, the server receives only anonymous counts: a survey was shown, closed or completed.
  • The user ID, attributes and hidden fields leave the device only when a survey is shown, as part of that survey’s response.
  • The SDK uses no advertising identifier, no device fingerprint and no location.
  • The install ID the SDK creates never leaves the device.

The SDK keeps its state in the app’s private storage: a UserDefaults suite named com.responsly.sdk on iOS and SharedPreferences named com.responsly.sdk on Android. It is removed when the app is uninstalled.

DataUsed forCleared by reset
Install ID, a random UUID created onceA stable position for the share-of-users ruleno
Tracking setting from setTrackingEnabledSwitching the SDK offno
User ID and attributesTargeting; hidden fields of responsesyes
Language override from setLocaleSurvey language; targetingyes
Values from setHiddenFieldsHidden fields of responsesyes
Event counts: event name and number of callsThe “from occurrence no.” trigger settingyes
Per survey: number of displays, time of the last display, time of completion, number of dismissalsFrequency rulesyes
Time a survey was last shown by a triggerThe pause between surveysyes
The cached configurationTargeting without a network round tripyes
Counts waiting to be sentStatisticsyes

The survey’s web view also keeps the usual website data (cookies, local storage) for the survey’s address. reset clears that too.

WhenWhat is sentContains user data
Downloading the configuration, at start and at most every 10 minutes or soThe SDK key, the platform (iOS or Android), the SDK version and the app IDno
After a survey is shown, closed or completedThe kind of event and the Survey ID. Sent in small batches.no: no user ID, no install ID, no attributes, no timestamps
When a survey is shownThe survey is loaded and receives: platform, app ID, app version, OS version, SDK version, locale, the trigger (type and name), and, unless responses are anonymous, the user ID, attributes and hidden-field valuesyes, unless anonymous
When the respondent submitsThe answers, saved as a response in Responslyyes: the answers

What is never uploaded:

  • the events you pass to track, their properties and their counts,
  • the screens you pass to screen,
  • the install ID,
  • an advertising ID, location or anything that identifies the device.

One detail: when a trigger shows a survey, the name of that event or screen is recorded with the response as “what triggered the survey”.

  • Always: the answers, platform, app ID and version, OS version, SDK version, locale and the trigger.
  • If the form has matching hidden fields: the user ID (hidden field user_id), attributes and hidden-field values, each in the field with the same name. See Hidden fields.

The Mobile app tab has an anonymous responses switch per form. With it on, the SDK does not hand the user ID, attributes or hidden-field values to the survey at all, whatever your code passes to identify, setAttributes, setHiddenFields or showSurvey.

Targeting is not affected. Audience rules still use the attributes, because that check happens on the device.

setTrackingEnabled(false) switches the SDK off: no network requests, no targeting, nothing shown. showSurvey reports disabled. The setting is saved on the device, survives restarts and is kept by reset.

Use it for a user opt-out, or to hold the SDK back until the user has given consent. The call is safe before initialize, so the SDK never contacts the server without consent:

Responsly.shared.setTrackingEnabled(userHasConsented)
Responsly.shared.initialize(sdkKey: "rsk_…", options: ResponslyOptions(logLevel: .error))
// later, when the user changes their choice
Responsly.shared.setTrackingEnabled(true)

When you switch it back on, the SDK downloads its configuration and targeting resumes.

Call reset when the user logs out, so the next user of the device does not inherit the previous user’s identity.

reset:

  • clears the user ID, attributes, language override and hidden-field values,
  • clears event counts and the display history of every survey,
  • clears the cached configuration and the counts waiting to be sent, then downloads the configuration again,
  • clears the website data the survey’s web view stored,
  • closes a survey that is visible.

It keeps the install ID and the tracking setting, and the SDK stays initialized. You do not call initialize again.

func logOut() {
Responsly.shared.reset()
// your own logout
}

Because the display history is cleared, a survey with frequency once can appear again on that device after a logout.

The iOS SDK ships a PrivacyInfo.xcprivacy file inside the package. Xcode includes it in your app’s privacy report automatically. It declares:

  • No tracking and no tracking domains.
  • One required-reason API: UserDefaults, reason CA92.1 (the SDK reads and writes its own state).

The SDK does not use the advertising identifier, so it never causes the App Tracking Transparency prompt.

App Store privacy labels and Google Play Data safety

Section titled “App Store privacy labels and Google Play Data safety”

The stores ask what your app collects. The SDK itself collects nothing about the user in the background. What reaches Responsly is what you pass to it and what respondents answer. The table lists it so you can fill in the questionnaires; what you finally declare depends on your app, your surveys and your own legal review.

DataLeaves the device whenApp Store categoryGoogle Play category
User ID from identifyA survey is shown, responses are not anonymous, and the form has a user_id hidden fieldIdentifiers: User IDPersonal info: User IDs
Attributes and hidden-field valuesSame, for each value with a matching hidden fieldDepends on what you sendDepends on what you send
Survey answersThe respondent submitsUser Content: Other User ContentApp activity: Other user-generated content
Contact details asked in a survey (email, phone, name)The respondent submitsContact InfoPersonal info
App ID, app version, OS version, platform, localeA survey is shownNot user data by itself; saved with the responseNot user data by itself; saved with the response
Anonymous counts of shown, closed, completedIn batchesNone: not linked to a user or deviceNone: not linked to a user or device

Points that apply to the whole SDK:

  • Tracking (Apple): no. The SDK does not link data with third-party data for advertising and does not share it with data brokers.
  • Linked to the user: yes when you attach a user ID or the survey asks for identifying details; no for forms with anonymous responses that ask for none.
  • Purpose: usually Analytics or App Functionality on the App Store, and Analytics or App functionality on Google Play.
  • Encrypted in transit: yes, the SDK and the survey use HTTPS.
  • Optional collection: answering a survey is the user’s choice, and a respondent can close it without answering unless you switched that off.
  • Deletion: responses can be deleted in Responsly.
  • Device or other IDs / advertising ID: not collected. The install ID stays on the device.