- Fix bug where
enableLocationListening
anddisableLocationListening
were not being run on background thread. Thanks to @elevenfive for PR. - Update
Revenue
class to expose publicequals
andhashCode
methods.
- Fix bug where
setOptOut
was not being run on background thread. productId
is no longer a required field forRevenue
logged vialogRevenueV2
.- Fix bug where receipt and receiptSignature were being truncated if they were too long (exceeded 1024 characters).
- Add automatic flushing of unsent events on app close/minimize (through the Activity Lifecycle
onPause
callback). This only works if you callAmplitude.getInstance().enableForegroundTracking(getApplication());
, which is recommended in the README by default for Setup. To disable you can callAmplitude.getInstance().setFlushEventsOnClose(false);
- Run the
initialize
logic on the background thread so that the SQLite database operations do not delay the main thread. - Add support for Amazon Advertising ID (use in place of Google Advertising ID on Amazon devices). Thanks to @jcomo for the pull request.
- Add documentation for SDK functions. You can take a look here. A link has also been added to the Readme.
- Fix bug where fetching the user's location on select devices throws a SecurityException, causing a crash.
- RevenueProperties is a confusing name and should actually be eventProperties. Deprecating Revenue.setRevenueProperties and replacing it with Revenue.setEventProperties, and clarified in Readme.
- Add support setting groups for users and events. See Readme for more information.
- Add helper method
getSessionId
to expose the current sessionId value. - Add
logRevenueV2
and newRevenue
class to support logging revenue events with properties, revenue type, and verified. See Readme for more info. - Fix crash when trying to enableForegroundTracking with the PinnedAmplitudeClient. AmplitudeClient methods should be using
this
instead of staticinstance
variable.
- Update to OKHttp v3.0.1.
- Add support for prepend user property operation.
- Fix bug where merging events for upload causes array index out of bounds exception.
- Migrate shared preferences (userId and event meta data) to Sqlite db to support apps with multiple processes.
- Fix bug where updateServer sets the wrong batchLimit when limit is false.
- Add ability to clear all user properties.
- Check that SDK is initialized when user calls enableForegroundTracking, identify, setUserProperties.
- Add support for append user property operation.
- Log if Google Play Services is enabled for the application.
- Removed all references to Apache HTTPClient to support Android M.
- Handle exceptions when fetching last known location from LocationManager.
- Add ability to set custom deviceId.
- Handle exception when cloning JSON object.
- Maintain only one instance of OKHttpClient.
- Add AmplitudeLog helper class that supports enabling and disabling of logging as well as setting of the log level.
- Fix bug where event and identify queues are not truncated if eventMaxCount is less than eventRemoveBatchSize.
- Add support for user properties operations (set, setOnce, add, unset).
- Fix bug where end session event was not being sent upon app reopen.
- Fix bug where deviceInfo was trying to use Geocoder if none present.
- Fix bug where deviceId was being fetched on main thread.
- Fix Maven jar, fixed build file.
- Catch all exceptions thrown by Android TelephonyManager and NullPointerExceptions thrown by geocoder during country lookup.
- Expose user ID with getUserId.
- Simplified session tracking. No longer need to call startSession and endSession. No longer send start/end session events by default. Added foreground tracking for sessions that uses Android activity lifecycles.
- The minimum supported API level is 9. API level 14 is required for foreground tracking.
- Always track Android advertising ID (ADID) regardless of limit ad tracking enabled.
- Track if limit ad tracking enabled as an API property for each logged event.
- Database upgraded to version 2: added a new store table for key value pairs.
- Device ID is now saved to and reloaded from the SQLite database (instead of SharedPrefs because SharedPrefs currently does not support multiple processes).
- MessageDigest.getInstance(String) is not threadsafe (known Android issue). Replaced with alternate MD5 implementation from http://org.rodage.com/pub/java/security/MD5.java.
- Create a copy of input userProperties JSONObject in setUserProperties to try and prevent ConcurrentModificationException.
- Enable configuration of eventUploadThreshold, eventMaxCount, eventUploadMaxBatchSize, eventUploadPeriodSeconds, minTimeBetweenSessionsMillis, and sessionTimeoutMillis.
- Add offline mode to turn off server uploading for a time.
- Add synchronous logging. Logs events to the DB synchronously to guarantee event persistence.
- Change protection on AmplitudeClient to public.
- Fix double class inclusion in jar distribution
- Fix crash under aggressive proguard optimizations.
- Fix device id being lost occasionally on app update.
- Fix exception when calling logEvent with empty JSONObject.
- Log a DEBUG message on each event.
- Add PinnedAmplitudeClient to support SSL pinning.
- Deprecate static methods on Amplitude. Switch to using Amplitude.getInstance().
- Upgrade HTTP client to okhttp.
- Fix bug when initializing with user id. Api key was not set properly.
- Expose setUserProperties(JSONObject, boolean) as a static
- Handle null edge cases in location request
- Add user opt out support
- Merge user properties in setUserProperties by default
- Refactor Amplitude to be a singleton to support tests
- Add option to disable fine-grained location tracking
- Fix crash: ConcurrentModificationException in HashMap
- Fix crash: CursorWindowAllocationException in SQLite
- Update field names, split platform and os, and send library information
- Don't log end session event if session isn't open
- Fix creating a new session id when the previous session id is invalid or non existant
- Hotfix extra class file in jar.
- Send androidADID with events
- Use Google Play Advertising ID instead of Android ID, if set. Default / fall back on using a random UUID
- Pull country from reverse geocode, then telephony network country, then locale
- Add getDeviceId to unity plugin
- Add additional logRevenue methods for receipt validation
- Make device ID public
- Fix bug where first event was getting skipped from upload
- Catch SQLiteExceptions
- Catch exceptions through by Apache HTTPClient
- Initial packaged release