Version Histories & Migration Guides

Version Histories

Android SDK Version History

v6.1.2 Changes (04 Feb 2020)

  • Drop INSTALL_REFERRER broadcast receiver

v6.1.1 Changes (26 March 2019)

  • Ensure that no PII data is sent to Branch Servers. This is to revisit an issue where "user id" was incorrectly redacted instead of "user name" in v6.1.0

v6.1 Changes (15 March 2019)

  • Ensure that no PII data is sent to Branch Servers. Methods that were sending PII data have been deprecated and will be removed in v7.0.0.

  • The Tune Android SDK no longer sends:

    • User Email
    • User Name
    • Facebook User ID
    • Twitter User ID
    • Google User ID
    • Gender
    • Age
    • Latitude
    • Longitude
    • Altitude
  • Newer developer tools uncovered a JSON issue, where a boolean value was incorrectly being read as a String ("true") and thus throwing an exception.

v6.0.3 Changes (19 December 2018)

  • Fixed an issue with parameter initialization, when the package name supplied does not match the PackageManager. This caused some parameters to not be initialized correctly.
  • Added the Branch domain (app.link) to the default list within the TUNE SDK to support attribution of Branch.io links by the TUNE SDK.

v6.0.2 Changes (26 September 2018)

  • Fixed several security-related issues around the use of logging and HTTP.
  • Removed md5 and sha1 hashing algorithm usage for PII fields (user email, user phone and username).

📘

Note

Only the sha256 hashing algorithm may be used from this point.

v6.0.1 Changes (13 September 2018)

  • Enhanced debugging support.
  • Enhanced support for Kotlin's increased null-safety standards.

v6.0 Changes (2 August 2018)

  • IAM has been fully removed from the SDK.
  • Smartwhere Integration has been removed.
  • The Tune class has been refactored into an ITune interface.
  • Reorganization of supporting class package structure.
  • Removal of deprecated APIs.
  • Reduced external library dependencies.
  • Stability enhancements and code cleanup.
  • Full Javadoc Support.

v5.3 Changes (4 June 2018)

  • Marked all IAM functionality as Deprecated. All IAM will be removed in Android v6.0.0.
  • Fixed an issue where email collection cannot be turned off once turned on.
  • Fixed an issue with occational failures to receive a deferred deeplink because the Google AID thread has not completed by the time the deferred deeplink request has been made.
  • Fixed an issue where – in some locales – SDKTYPEs were being reported incorrectly.

v5.2.3 Changes (30 April 2018)

  • Added handling around the Google Play App Install Referrer API that raises unexpected RunTime exceptions.

v5.2.2 Changes (26 April 2018)

  • Fixed an Android file and class case-sensitive name conflict .

v5.2.1 Changes (11 April 2018)

  • Fixed an issue where timestamps were sometimes sent with scientific notation. These have been standardized as long integer values.

v5.2 Changes (4 April 2018)

  • Added SDK version string declaration.

v5.1.1 Changes (14 March 2018)

  • Fixed an issue where the action parameter should not be redacted for Tune Link clicks if the profile is privacy protected due to COPPA.
    • Note: Android SDK v4.15.2-v5.0.2 incorrectly redacts the action parameter if the profile is privacy protected, which breaks all AA measurement.
  • Added getIAMDeviceIdentifier and getIAMAppId to the Android SDK public API. Note that the IAM DeviceId and AppId are different than the Tune AppId and DeviceId.
  • Improved Logging.

v5.0.2 Changes (28 February 2018)

  • Fixed an issue where the action parameter should not be redacted of the profile is privacy protected due to COPPA.
    • Note: Android SDK v4.15.2-v5.0.1 incorrectly redacts the action parameter if the profile is privacy protected, which breaks all AA measurement.
  • Fixed an issue with In-App Messaging respecting Android Immersive Mode.

v5.0.1 Changes (22 February 2018)

  • Fixed an issue with auto-collecting location data that caused random exceptions.
  • Fixed an issue with updated playlists potentially missing data from the cache version.
  • Note: Android SDK v5.0.1 incorrectly redacts the action parameter if the profile is privacy protected, which breaks all AA measurement.

v5.0 Changes (7 February 2018)

  • Removed Smartwhere as a hard gradle dependency.
    • The Tune SDK will include all the code for working together with Smartwhere if present (Smartwhere SDK required), but without the hard dependency/bundling.
  • Fixed issues with push notifications rendering on Android O, including changing the TuneNotificationBuilder signature to support channels.
  • Removed deprecated methods
    • public void measureSession();
    • public void measureEvent(int eventId);
    • public void setReferralSources(final Activity act);
    • public void checkForDeferredDeeplink(TuneDeeplinkListener listener);
    • public void setDeeplinkListener(TuneDeeplinkListener listener);
    • public TuneEvent(int eventId); // Constructor
    • public int getEventId();
    • public synchronized String getSdkVersion();
  • Fixed several issues around measuring events and setting custom profile values with null values.
    • setCustomProfileStringValue, setCustomProfileDate, and setCustomProfileGeolocation – if the value is null will have the same effect as calling clearCustomProfileVariable()
    • measureEvent(String eventName) – if the eventName is null, this will now throw an exception (debug only).
  • Note: Android SDK v5.0.0 incorrectly redacts the action parameter if the profile is privacy protected, which breaks all AA measurement.

v4.16 Changes (17 January 2018)

  • Published a 'lite' version of the Android Tune SDK with minimal dependencies required.

    • Example usage:

      compile 'com.tune:tune-marketing-console-sdk-lite:4.16.0'
      
  • Fixed an issue where Deferred Deeplinks can fail to notify the listener of an error when the device is offline.

  • The SDK will now report its version in the debug logs.

  • Bug fixes related to In-App Message banner presentation.

  • Note: Android SDK v4.16.0 incorrectly redacts the action parameter if the profile is privacy protected, which breaks all AA measurement.

v4.15.3 Changes (14 December 2017)

  • Added a flag on the IAM user profile to assist in segmentation for devices that have been automatically or manually flagged as privacy protected to enhance our existing server-side protections. Because of this and other improvements we recommend that customers upgrade to this SDK version for maximum client-side privacy protection.
  • Added handling around the Google Play App Install Referrer API that raises exceptions given a bad Context.
  • Note: Android SDK v4.15.3 incorrectly redacts the action parameter if the profile is protected, which breaks all AA measurement.

v4.15.2 Changes (13 December 2017)

  • Added client-side redaction of known personal information for devices that have been automatically or manually flagged as privacy protected to complement our existing server-side protections.
  • Note: Android SDK v4.15.2 incorrectly redacts the action parameter if the profile is protected, which breaks all AA measurement.

v4.15.1 Changes (21 November 2017)

  • Migrated the reference to the Google Play App Install Referrer API from an included library to the official gradle dependency provided by Google. This is a difference in library packaging only.

v4.15 Changes (20 November 2017)

  • Included Google Play App Install Referral API
    • Google has provided an API to determine discrete timestamp for download of an application from the Google Play store. Paired with our own data on the initial open, we can determine the time between initial download and our install, as well as activity - such as clicks - that occur between those two timestamps.
  • Fixed an issue with set/get parameters, where parameters were not immediately available after set().
  • Fixed an issue where some user profile values were not persisting across app instances.

v4.14 Changes (2 November 2017)

  • Upgraded to EventBus 3.0.

    • Note that if you were previously including the Tune SDK via. a gradle dependency, there should be no additional changes needed after including this new Tune SDK update.

    • If Tune was being included as a JAR or AAR, there is a change required in the applications build.gradle file.

      • EventBus changed from 'de.greenrobot:eventbus' to 'org.greenrobot:eventbus'. The new compile line is:
      compile 'org.greenrobot:eventbus:3.0.0'
      
    • See updated instructions in the Android Quick Start

  • Fixed an issue where Tune-enabled applications auto start when the lock screen is dismissed.

    • SDK versions between 4.11.0 and 4.13.0 have an extra BroadcastReceiver that was introduced that caused applications to auto-start the Application node when the receiver was called, even when the application was not running. This version addresses that issue.
  • Check for collisions between custom IAM profile variables and Tune system variables.

    • Tune has some profile variable names that are reserved, and cannot be used as IAM CustomProfile variables. While these variables are case sensitive, to remove confusion it will be no longer permitted to use a case-sensitive (but otherwise identical) version of reserved variable names.

v4.13 Changes (19 October 2017)

  • Allow manual flagging of device users for Children's Online Privacy Protection Rule (COPPA)

v4.12.1 Changes (11 October 2017)

  • Updated Smartwhere dependency to v17258 which removes Google Play Services dependency.

v4.12 Changes (13 September 2017)

  • Added support for the new generation of In-App Messaging Campaigns for IAM. For more information or early access to this feature please contact your CSM!

v4.11.1 Changes (2 August 2017)

  • Simplified Smartwhere API

v4.11 Changes (27 July 2017)

  • Added the Smartwhere SDK as a dependency to the Tune SDK. Customers can opt-in to connecting their Tune account with Smartwhere for location-based attribution analytics.
  • Additionally, customers can opt-in to sharing Tune SDK event data with Smartwhere for location-based message triggering.
  • See our Android Quick Start and Smartwhere Integration articles for more information.
  • Fixed a Location collection crash.

v4.10.2 Changes (28 June 2017)

  • Fixed invoke_id retrieval latency
  • Added thread safety to campaign state management

v4.10.1 Changes (15 March 2017)

  • Added null check for Tune.getInstance() in TuneActivity onResume

v4.10 Changes (9 February 2017)

  • IAM: Added silent push notification support

v4.9 Changes (12 January 2017)

  • Added Smartwhere integration
  • Collect Fire Advertising Id on Amazon Fire devices

v4.8.1 Changes (14 December 2016)

  • Collect device locale and build
  • Return full, encrypted request url in enqueuedRequest callback

v4.8 Changes (22 November 2016)

  • SDK integration has been updated for all customers and will require code changes if you update to this or later versions of the Tune SDK. For information on migrating see migrating from 4.x to 4.8 and above.
  • IAM: Fix bug in tracking event with attributes. If set, the event tag with the name "attribute2" was incorrectly being recorded with the value of the event tag "attribute1".
  • IAM: Fix bug for Power Hook getValueForHookById to always return the last updated value from the Tune servers, even if the value is requested before the first Tune server response is returned after launch.

v4.7.1 Changes (11 October 2016)

  • IAM: Do not mark user as push enabled until a device token is retrieved

v4.7 Changes (27 September 2016)

  • AA: Stop location autocollection when location is manually set
  • AA: Check for null location in onLocationChanged
  • IAM: Use default sound and vibration settings for push notifications
  • IAM: Add executeDeepAction method to manually invoke a deep action

v4.6 Changes (6 September 2016)

  • AA: Return non-null values for getters if not set
  • IAM: Allow setting sound and vibration in TuneNotificationBuilder
  • IAM: Fix isUserInSegment NullPointerException if user is not in any segments

v4.5.1 Changes (30 August 2016)

  • Validate measureEvent event names are not empty
  • Fix location permissions crash on OnePlus2 devices
  • IAM: Send events for when push is enabled or disabled

v4.5 Changes (10 August 2016)

  • AA: Deprecate measureEvent with event ids. Events should only be measured by name
  • IAM: Add isUserInSegmentId API
  • IAM: Persist custom profile variables across sessions
  • IAM: Correctly pass boolean profile variables to server

v4.4 Changes (20 July 2016)

  • AA: Add enqueuedRequest(String url, JSONObject postData) callback to TuneListener
  • Update support libraries to v24

v4.3.1 Changes (13 July 2016)

  • IAM: Fix setPushNotificationRegistrationId setter

v4.3 Changes (6 July 2016)

  • IAM: Remove unused tagging from TuneEventItem API
  • IAM: Remove unused geolocation tagging from TuneEvent API
  • IAM: Hash username, user email, phone number fields
  • IAM: Fix race condition for when multiple analytics events are created when app is opened, not all of them get sent (for example via push)

v4.2 Changes (21 June 2016)

  • IAM: Add didSessionStartFromTunePush(), getTunePushInfoForSession() for getting session opened from push notification information

v4.1.3 Changes (8 June 2016)

  • AA: Fix location provider enabled check for API < Lollipop
  • AA: Remove deprecated global getRefId, getRevenue methods
  • IAM: Add public AppId getter for debugging
  • IAM: Fix AppId generation when IAM is disabled for the app
  • IAM: Enable power hook preview
  • IAM: Save tags' cleaned/pretty name

v4.1.2 Changes (19 May 2016)

  • Fire playlist downloaded callbacks immediately if In-App Marketing is disabled for the account
  • Javadoc updates for clarity around playlist download callback usage

v4.1.1 Changes (19 May 2016)

  • Prevent playlist download callbacks from firing while app is backgrounded
  • Fail gracefully on empty playlists
  • Ensure playlist download callbacks are executed after power hook values are received
  • Prevent null session ids and mat ids on first session for In-App Marketing
  • Use uppercase country codes for In-App Marketing

v4.1 Changes (22 April 2016)

  • Always fire playlist download callbacks upon first playlist and registration
  • Add default 3s timeout for playlist download callbacks
  • Only allow one callback in onPowerhooksChanged
  • targetSdkVersion < 23 support
  • Don't hash empty string values

v4.0.3 Changes (8 April 2016)

  • Check for internet permission before enabling In-App Marketing
  • Check for null intent in TunePushService
  • Push images support

v4.0.2 Changes (17 March 2016)

  • Read event ID from TuneEvent, if present, for In-App Marketing events

v4.0.1 Changes (3 March 2016)

  • Format location coordinates in Locale.US
  • Add setLocation overload with TuneLocation parameter

v4.0 Changes (3 March 2016)

  • Addition of In-App Marketing capability, including:

    • Targeted push notifications.
    • Event auto-collection and analysis.
    • User segmentation and profiling.
    • A/B testing.
    • Power Hooks and on-the-fly app editing capability.
  • Replaced the com.mobileapptracker.MobileAppTracker class with the com.tune.Tune class.

  • MATEvent and MATEventItem have also been replaced with TuneEvent and TuneEventItem, respectively.

  • Incorporated EventBus for internal SDK message routing. The TUNE SDK now also requires the Android support JAR (if not already present).

    Note the new Gradle dependencies:

    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'com.android.support:support-v4-:23.+'
    
  • Auto-collects device location if app has already permitted location access.

  • Deferred deeplink listener callbacks are always invoked on failure.

  • Added the TUNE Android SDK to jCenter. The TUNE Android SDK can now be installed via the following Gradle dependency:

    compile 'com.tune:tune-marketing-console-sdk:4.0.0'
    
  • Updated the ProGuard exceptions required for the TUNE Android SDK:

    -keep public class com.tune.** { public *; }
    -keep public class com.google.android.gms.ads.identifier.** { *; }
    -keep public class com.google.android.gms.gcm.** { *; }
    -keep public class com.google.android.gms.common.** { *; }
    
    -keepclassmembers class ** {
      public void onEvent(**);
    }
    

v3.11.4 Changes (3 December 2015)

  • Use system user agent instead of WebView if possible, for more reliability and less UI thread impact
  • In getDefaultUserAgent fallback, add try/catch for Alcatel and other devices that have custom WebView implementation

v3.11.3 Changes (17 November 2015)

  • Use WebSettings.getDefaultUserAgent on devices > API 17
  • When debug mode is enabled, show toast for when measureSession is called

v3.11.2 Changes (29 October 2015)

  • Add setReferralUrl method to support manually setting deeplink
  • Add backwards support for FB SDK 3.x event logging
  • Try to load AsyncTask before accessing WebView (prevent rare device-specific issue)

v3.11.1 Changes (10 September 2015)

  • Add Cross-Promo event logging

v3.11 Changes (26 August 2015)

  • Update Cross-Promo API endpoints
  • Remove custom banner size option, banners are now fixed based on device screensize
  • Output ad server response status if debug mode enabled, in addition to notifying listener

v3.10.1 Changes (3 August 2015)

  • Hotfix for preserving user values through setters
  • Add deep link listener for easier, more transparent implementation

v3.10 Changes (21 July 2015)

  • Update Facebook event logging for FB SDK 4.0+
  • Add timeout status in deferred deep link callback
  • Cross-Promo ads
  • Updated minimum SDK version to 9

v3.9.1 Changes (28 April 2015)

  • Add Agency ID as an option for preloaded app attribution
  • Refactor network calls from HttpClient (deprecated in Android 5.0) to HttpURLConnection
  • Remove dependency on INSTALL_REFERRER for deferred deep links, always use API endpoint

v3.9 Changes (7 April 2015)

  • Auto-collect GAID, ANDROID_ID if GAID not available
  • Fully deprecated measureAction methods

v3.8 Changes (5 March 2015)

  • Hash personal data fields for ePrivacy certs
  • MobileAppTracker constructor builder helper functions
  • measureEvent with MATEvent class and constructor helper functions, intended to replace measureAction
  • MATEventItem constructor helper functions

v3.7.1 Changes (23 January 2015)

  • checkForDeferredDeeplink uses INSTALL_REFERRER for Google Play apps

v3.7 Changes (14 January 2015)

  • Add checkForDeferredDeeplink function to open deferred deep links

v3.6.2 Changes (8 January 2015)

  • setEmailCollection hotfix for Android API level < 19

v3.6.1 Changes (11 November 2014)

  • setEmailCollection collects other available email addresses on device

v3.6 Changes (11 November 2014)

  • Add optional setEmailCollection function to collect primary Gmail address as user email
  • Requires GET_ACCOUNTS permission to succeed, if permission is missing, will not try to collect

v3.5 Changes (20 October 2014)

  • Add setAndroidIdMd5, setAndroidIdSha1, setAndroidIdSha256 functions

v3.4.2 Changes (2 October 2014)

  • Rewrite clearer debug LogCat output messages on failed requests

v3.4.1 Changes (29 September 2014)

  • Init parameters sequentially to prevent rare race condition with accessing param values

v3.4 Changes (14 September 2014)

  • Support foreign characters encoding in MAT event items
  • More consistent user agent collection

v3.3.3 Changes (28 July 2014)

  • delay first session call up to 60s to wait for GAID and INSTALL_REFERRER to be set (if both are received in that time, send request immediately)

v3.3.2 Changes (17 July 2014)

  • fix non-thread-safe getCurrencyCode
  • fix for appending open log id

v3.3 Changes

  • collect device CPU type
  • measureAction overloads with event ID as int
  • added setters for pre-loaded app attribution

v3.2.4 Changes

  • remove Android id, device id, mac address autocollect (use setAndroidId, setDeviceId, setMacAddress if continuing to use identifiers)

v3.2.3 Changes

  • collect store app installer package name
  • send request retry count for failed queued requests
  • lower retry frequency for subsequent failures

v3.2.2 Changes

  • fix for occasional NullPointerException when requesting an internal parameter immediately after initializing

v3.2 Changes

  • persist userId, userName, userEmail to disk to make re-engagement attribution easier
  • add setEventContentType, setEventContentId, setEventLevel, setEventQuantity, setEventSearchString, setEventRating, setEventDate1, and setEventDate2 methods

v3.1 Changes

  • Changed trackSession and trackAction to measureSession and measureAction
  • Send is_paying_user=1 if the user has ever produced revenue (measureAction with revenue > 0)

v3.0.5 Changes

  • Send system times in Unix epoch format
  • Retry (enqueue) HTTP connections with almost all error states
  • Require Google Play Ad ID limitation enablement setting

v3.0.3 Changes

  • Added setUserName, setUserEmail methods

v3.0 Changes

  • Replace install/update tracking with sessions
  • Added Google Advertising Id and isLimitAdTrackingEnabled setters
  • Reworked MobileAppTracker to be a singleton
  • Added new trackAction with event item overloads
  • Removed setAdvertiserId, setKey – only pass via init
  • Removed setRefId, setRevenue – only pass via trackAction

v2.7 Changes

  • Add Facebook, Google, Twitter user id setters
  • Add getSDKVersion
  • setAppAdTracking renamed to setLimitAdTrackingEnabled
  • Recommend passing Application Context over Activity Context

v2.6 Changes

  • Auto-get referral source package and url
  • Make ref id thread-safe, add ref id as overloaded trackAction param
  • Fix for in-app purchase validation with IAP data
  • Only collect device ID/MAC address if required permissions are detected

v2.5 Changes

  • Add Google Play In-App purchase parameters for verification in trackAction

v2.4.1 Changes

  • Add setAppAdTracking setter for app-level ad opt-out

v2.4 Changes

  • Better exception handling and added more informative debug output
  • Improve offline event queue synchronization

v2.3 Changes

  • Add age, gender, latitude, longitude, altitude setters
  • Add MATEventItem class for trackAction use

v2.2 Changes

  • Separate debug and allow duplicate settings
  • Add MATResponse interface for reading platform responses
  • Show alert dialog warning if debug mode is on
  • Add event_referrer setter for app that caused open

v2.1 Changes

  • Add platform response to debug log output
  • Make revenue input into Double
  • Add site_id setter
  • Add "trackPurchase" method for store purchase events

iOS SDK Version History

v6.2.0 Changes (12 September 2019)

  • Replace UIWebView with WebKit.
  • Remove unused dependencies from Cocoapods.

v6.1.0 Changes (5 March 2019)

  • Ensure that no PII data is sent to Branch Servers. Methods that were sending PII data have been deprecated and will be removed in v7.0.0.
    • The Tune iOS SDK no longer sends:
      • User Email
      • User Name
      • Facebook User ID
      • Twitter User ID
      • Google User ID
      • Gender
      • Age
      • Latitude
      • Longitude
      • Altitude

v6.0.4 Changes (2 January 2019)

  • Added the Branch domain (app.link) to the default list within the TUNE SDK to support attribution of Branch links by the TUNE SDK.

v6.0.3 Changes (1 October 2018)

  • Updated handleContinueUserActivity method signature.
  • Removed md5 and sha1 hashing algorithm usage for PII fields (user email, user phone and username).

📘

Important

Only the sha256 hashing algorithm may be used from this point.

v6.0.1 Changes (21 August 2018)

  • Fix for C++ code compatibility.
  • Removal of old debug methods.

v6.0.0 Changes (2 August 2018)

  • IAM has been fully removed from the SDK.
  • Smartwhere Integration has been removed.
  • Debug logging API simplification.
  • Removal of deprecated APIs.
  • Stability enhancements and code cleanup.

v5.2.1 Changes (7 June 2018)

  • Hotfix to resolve a tvOS compilation error.

v5.2.0 Changes (4 June 2018)

  • Marked all IAM functionality as Deprecated. All IAM will be removed in iOS v6.0.0
  • Marked AppToApp tracking (i.e. tracking ad served by TUNE sending the user to a third party) as Deprecated.
  • Fixed bug with Reachability check.

v5.1.1 Changes (25 April 2018)

  • Fix issue with install date check.
  • Fix issue with connection type check.
  • Fix issue with smartwhere integration.
  • Improve header documentation.

v5.1.0 Changes (11 April 2018)

  • Improve Swift compatibility by adding collection typing and nullability.
  • Fix potential iOS 8 crash related to CoreSpotlight.

v5.0.3 Changes (21 March 2018)

  • Fixed potential warnings due to MainThreadChecker.

v5.0.2 Changes (6 March 2018)

  • Fixed rare crash due to shallow copy before data serialization.
  • Added static library option when manually building the Tune SDK.
  • Added getIAMDeviceIdentifier and getIAMAppId to iOS SDK public API.

v5.0.1 Changes (19 February 2018)

  • Fixed potential iOS 9 crash when installed via Cocoapods.
  • Bug fixes:
    • Decrease referral link max size.
    • Increase initialization wait time.

v5.0.0 Changes (2 February 2018)

  • Converted the iOS SDK to a dynamic framework.
    • Available as of Xcode 6.
    • Minimum supported platform is iOS 8.0.
  • Removed Smartwhere combined framework for iOS
    • The Tune SDK will include all the code for working together with Smartwhere if present (Smartwhere SDK required), but without the hard dependency/bundling.

v4.15.0 Changes (24 January 2018)

  • Added support for the new generation of In-App Messaging Campaigns for IAM. For more information or access to this feature, please contact your CSM!

v4.14.2 Changes (19 December 2017)

  • Added client-side redaction of known personal information for devices that have been automatically or manually flagged as privacy protected to complement our existing server-side protections.
  • Removed deprecated debug server endpoint.

v4.14.1 Changes (28 November 2017)

  • Fix issue with reserved profile variable name capitalization.
  • Add debug method that includes network request and response, if available.

v4.14.0 Changes (19 October 2017)

  • Allow manual flagging of device users for Children's Online Privacy Protection Rule (COPPA).
  • Move cached data from Documents.
  • Upgrade Smartwhere SDK version.
  • Bug Fixed: Out parameter use in network calls.

v4.13.4 Changes (12 September 2017)

  • Optimized Apple Search Ads integration timing.
  • This release officially adds support for iOS 11 addressing warnings and compiler issues.

v4.13.3 Changes (7 August 2017)

  • Bug Fixed: Fixed Smartwhere header.
  • Bug Fixed: Resolved conflicting constant name issue.

v4.13.2 Changes (3 August 2017)

  • Bug Fixed: Fixed upload to Cocoapods issue.

v4.13.1 Changes (2 August 2017)

  • Added the Smartwhere SDK as a dependency to the Tune SDK. Customers can opt-in to connecting their TUNE account with Smartwhere for location-based attribution analytics.
  • Additionally, customers can opt-in to sharing Tune SDK event data with Smartwhere for location-based message triggering.
  • See our iOS Quick Start and Smartwhere Integration articles for more information.

v4.12.5 Changes (28 June 2017)

  • Bug Fixed: Patched JSON parser to handle bad NSUserDefaults data.
  • Bug Fixed: Fixed invoke_id retrieval latency.

v4.12.4 Changes (29 March 2017)

  • Bug Fixed: Moved Reachability check off main thread.

v4.12.3 Changes (15 March 2017)

  • Bug Fixed: Fixed takeover messages for upside-down portrait mode on iPhone.

v4.12.2 Changes (16 February 2017)

  • Bug Fixed: Fixed slide-in messages for landscape mode on iOS8+.

v4.12.1 Changes (9 February 2017)

  • Bug Fixed: Fixed compilation error when developing in Xcode 7 (removed reference to newer enum type). This bug was introduced in 4.12.0.
  • Bug Fixed: Prevent crashes on iOS 6 and iOS 7 when tracking deep link opens. This bug was introduced in 4.12.0.

v4.12.0 Changes (19 January 2017)

v4.11.0 Changes (12 January 2017)

  • Added Smartwhere integration
  • Bug Fixed: Fix bug related to detecting jailbroken devices

v4.10.1 Changes (15 December 2016)

  • AA: Improved SearchAds attribution measurement reliability by fine-tuning SearchAds API call timings
  • AA: Included two additional request url params locale and build
  • IAM: Improved debug logging to notify about push registration success
  • Bug Fixed: Avoided possibility of App Store rejections by splitting string constant values that match Apple private class names

v4.10.0 Changes [Critical] (27 October 2016)

  • Bug Fixed: AA: Improved iAd/Search Ads attribution measurement reliability by delaying initial check by 10+ seconds and retrying every minute up to 5 minutes after app install to account for Apple iAd/SearchAds Attribution API response latency
  • Bug Fixed: IAM: Fixed in-app message portrait/landscape interface orientation changes when device orientation is Face Up, Face Down

v4.9.2 Changes [Critical] (11 October 2016)

  • Bug Fixed: Possible app crash due to thread deadlock in TuneUserProfile.m
  • Includes iAd/SearchAds campaign attribution info in the very first "session" request to avoid separate "install" post-conversion request

v4.9.1 Changes [Critical] (21 September 2016)

  • Bug Fixed: IAM: Handled remote push notifications on iOS 10+ when host project relies on UserNotifications.framework.
  • UserNotifications.framework reference can be optionally included if being utilized by the host app
  • Host project can be built in Xcode 7/8
  • Known Issue: Possible app crash due to thread deadlock in TuneUserProfile.m.

v4.9.0 Changes [Critical] (13 September 2016)

  • Bug Fixed: AA: Updated optional Facebook SDK activityApp method call to make sure it does not cause issues during App Store submission

  • Bug Fixed: Make sure original install date is collected even after app update by using NSDocumentDirectory creation date instead of NSBundle creation date

  • IAM: Added public method in Tune class to allow immediate execution of previously registered deep action code-block:

    + (void)executeDeepActionWithId:(NSString *)deepActionId andData:(NSDictionary *)data;
    
  • Known Issue: IAM: Remote push notifications not supported on iOS 10+ when host project relies on UserNotifications.framework.

  • Known Issue: Possible app crash due to thread deadlock in TuneUserProfile.m.

v4.8.0 Changes (30 August 2016)

  • AA: iAd/SearchAds campaign attribution info is forwarded to TUNE Measurement Engine as part of request post data
  • AA: Trying to measure an event with an empty event name will cause TuneDelegate error callback to be fired
  • IAM: Automatically fire IAM events "Push Enable" / "Push Disabled" when push enabled status change is detected
  • IAM: Removed hookId property from TunePowerHookExperimentDetails, since the experiment may be associated with multiple power hooks.
  • Known Issue: Possible app crash due to thread deadlock in TuneUserProfile.m.
  • Known Issue: IAM: Remote push notifications not supported on iOS 10+ when host project relies on UserNotifications.framework.

v4.7.0 Changes (10 August 2016)

  • AA: Deprecated measurement using TUNE event IDs. Events should only be measured by name. Please use `measureEventName: or measureEvent: instead.

    + (void)measureEventId:(NSInteger)eventId; // DEPRECATED
    
  • AA: Ignores fake campaign attribution data returned by iAd/SearchAds API in non-AppStore builds

  • AA: Handles "iad-keyword" param included by iAd/SearchAds API with Apple Search Ads campaign attribution data

  • IAM: Allows warnings related to missing *DelegateClassName properties to be disabled by setting TuneConfiguration.plist "ShowDelegateWarnings" boolean property

  • IAM: Persist custom profile variables across sessions

  • IAM: Allows checking if current user belongs to certain TUNE IAM segment(s)

    + (BOOL)isUserInSegmentId:(NSString *)segmentId;
    + (BOOL)isUserInAnySegmentIds:(NSArray *)segmentIds;
    
  • Known Issue: Possible app crash due to thread deadlock in TuneUserProfile.m.

  • Known Issue: IAM: Remote push notifications not supported on iOS 10+ when host project relies on UserNotifications.framework.

  • Known issue: Some measurement logs incorrectly have an app_version of 0.

v4.6.0 Changes (22 July 2016)

  • Adds support for Xcode 8 Beta / iOS 10 Beta

  • When using Xcode 8, project needs to reference an additional framework UserNotifications.framework

  • Omits IFA from request data if it contains all zeros when Limit Ad Tracking privacy setting is enabled on iOS 10+

  • AA: Allows better debugging thru a new TuneDelegate callback that includes network request url and data

  • - (void)tuneEnqueuedRequest:(NSString *)url postData:(NSString *)post;
    
  • AA: Modified automatic IAP measurement to avoid duplicate events; when enabled, measures a "purchase" event only after SKPaymentTransaction finishTransaction: is called by the host app

  • IAM: Personal data fields — phone number, user name, user email — are now hashed — MD5, SHA-1, SHA-256 — for ePrivacy compliance

  • IAM: Fixed config server sync: When running TestFlight builds, used deviceId instead of IFA

  • Known Issue: IAM: Remote push notifications not supported on iOS 10+ when host project relies on UserNotifications.framework.

  • Known issue: Some measurement logs incorrectly have an app_version of 0.

v4.5.0 Changes [Critical] (30 June 2016)

  • Fixed iOS 6-only app crash

  • IAM: removed IAM-only custom geo-location tagging for events

  • removed TuneEvent method:

    - (void)addTag:(NSString *)name withGeolocationValue:(TuneLocation *)value;
    
  • AA: requests include app release-version-number string CFBundleShortVersionString thru app_version_name param

  • Known issue: TestFlight builds: IAM configuration server sync may fail when IFA changes

  • Known issue: Some measurement logs incorrectly have an app_version of 0.

v4.4.0 Changes (27 July 2016)

  • IAM: Make sure Tune swizzled UIApplicationDelegate methods do not hide any callback methods in host app AppDelegate class
  • IAM: Expose push info thru TunePushInfo public class
  • AA: Make sure TuneDeferredDplinkr uses IFA updated thru setter
  • AA: When auto measurement of IAP is enabled, measure "purchase" event only when finishTransaction: is called by the host app, to make sure that duplicate events are not fired
  • AA: When auto measurement of IAP is enabled, include IAP transactionIdentifier, productIdentifier and "tune_iap_auto_event" flag in auto-generated "purchase" events
  • Known issue: requires minimum iOS 7, crashes on iOS 6
  • Known issue: TestFlight builds: IAM configuration server sync may fail when IFA changes

v4.3.1 Changes (2 June 2016)

  • IAM: Fixes possible crash related to TuneAnalyticsManager NSOperationQueue
  • IAM: During SDK integration, presents Tune alert popups on a separate UIWindow to avoid potential conflicts with other animations
  • IAM: SDK requests include "app_version_name" param to provide access to app version string in Segment Builder
  • Known issue: requires minimum iOS 7, crashes on iOS 6

v4.3.0 Changes (19 May 2016)

  • IAM: Improves handling of OnFirstPlaylistDownloaded events
  • IAM: Swizzles application:openUrl:options: and application:openUrl:sourceApplication:annotation: methods only if implemented by AppDelegate
  • IAM: Makes sure configuration is downloaded on each application foreground
  • AA: iOS requests automatically include bundle_id param with value set to iOS Bundle Identifier
  • AA: iOS requests automatically include is_testflight_build param with value set to 1 for TestFlight builds
  • Includes latest Apple Reachability helper class v5.0
  • Known issue: requires minimum iOS 7, crashes on iOS 6

v4.2.1 Changes (27 April 2016)

  • Added 3.0 sec default timeout to onFirstPlaylistDownloaded: IAM callback method
  • Do not overwrite an existing Power Hook due to duplicate public setter calls to registerHookWithId:friendlyName:defaultValue:
  • Fixed pre-compiled header related warning

v4.2.0 Changes (13 April 2016)

  • Adds Tune_tvOS framework to support Attribution Analytics on tvOS

  • Note: In-App Marketing is NOT supported on tvOS

  • Fixes automatic collection of iAd campaign info for iAd attributed installs

  • Automatically calls Tune applicationDidOpenURL:sourceApplication: params when app is opened thru Spotlight search on iOS

  • Requires CoreSpotlight framework to be referenced in the Xcode iOS project

  • Fixes attribution thru deferred deep links in cases where the app shows an alert on first app launch causing duplicate measureSession call(s) to be fired from applicationDidBecomeActive: callback

  • Allows only one measureSession call per app session; duplicate calls result into TuneDelegate error callbacks

  • Removed Cross-Promo Ad classes:

    TuneAdView
    TuneAdDelegate
    TuneAdMetadata
    TuneBanner
    TuneInterstitial
    

v4.1.0 Changes (14 March 2016)

  • Updates SDK to automatically turn off the ability to send Push Notifications to users who are age 13 or under
  • Updates IAM Capabilities to be less chatty on the network
  • Updates to not default to automatic collection of In-App Purchase events
  • Fixes IAM tracking of Events created from AA Event IDs
  • Updates SDK to always respond with success/failure callbacks when checkForDeferredDeeplink: is called

v4.0.14 Changes [Critical] (1 March 2016)

  • Fixes an issue which caused network requests to remain enqueued on iOS 6 devices

v4.0.13 Changes (22 February 2016)

  • Fixes issue with NSDateFormatter not being thread safe
  • Fixes issue with UIPasteboard not being thread safe
  • Fixes issue revolving around Reachability object not being released
  • Removes setShouldAllowDuplicateRequests method
  • Updates location tracking code to better support IAM

v4.0.12 Changes (21 January 2016)

  • Fix for invoking Facebook SDK’s activateApp upon measureSession if Facebook event logging enabled
  • Fix for updating TMA configuration debug mode

v4.0.10 Changes (18 January 2016)

  • Disable warnings in builds with DWARF with dSYM File.
  • Do not trigger App Store warning for apps that do not have push enabled.
  • Use CocoaPods version 4.0.11 for this version

v4.0.8 Changes (8 January 2016)

  • Fixed warning that appeared if you did not have push enabled.
  • Renamed some internal methods to prevent conflicts with other libraries.
  • Use CocoaPods version 4.0.9 for this version

v4.0.7 Changes (18 December 2015)

  • added bitcode support to SDK binary to match Xcode 7 default "Enable Bitcode" setting

v4.0.6 Changes [Critical] (16 December 2015)

  • fixed an app crash related to threading during Tune init
  • stopped reporting non-In-App-Marketing push notifications
  • allow Swift files for AppDelegateClassName

v4.0.5 Changes (11 December 2015)

  • adds support for In-App Marketing:

    • Targeted push notifications
    • Rich in-app messaging
    • Auto event collection and analytics
    • User segmentation and profiling
    • Mobile A/B testing
  • the target Xcode project needs to include the following framework under Build Phases "Link Binary With Libraries":

    • AdSupport
    • CoreTelephony
    • iAd
    • libz.dylib / libz.tbd
    • MobileCoreServices
    • Security
    • StoreKit
    • SystemConfiguration
  • the target Xcode project needs to include the following flags under Build Settings "Other Linker Flags":

    -ObjC -lz
    
  • if using In-App Marketing, create TuneConfiguration.plist and set the TurnOnTMA flag to True

  • to access the framework, import the Tune module or Tune.h header

  • replaced MobileAppTracker with Tune class

    • replace @import MobileAppTracker with @import Tune
    • replace #import <MobileAppTracker/MobileAppTracker.h> with #import <Tune/Tune.h>
  • if using In-App Marketing, optionally include UIViewController+NameTag category,
    #import <Tune/UIViewController+NameTag.h>

  • replaced MobileAppTrackerDelegate protocol with TuneDelegate protocol

  • replaced +(NSString *)matId getter with +(NSString *)tuneId

v3.17.1 Changes [Critical] (1 March 2016)

  • Fixes an issue which caused network requests to remain enqueued on iOS 6 devices

v3.17.0 Changes (22 February 2016)

  • Fixes location updating not being on the main thread
  • Adds requesting location for tvOS

v3.15.0 Changes [Critical] (1 December 2015)

  • fixed an app crash related to immutable NSDictionary modification when a deferred deep link is set and the SDK tries to update existing enqueued request objects with referral_url param info
  • deprecated +(NSString *)matId; please use +(NSString *)tuneId instead
  • deprecated iAd display helper methods

v3.14.1 Changes [Critical] (12 November 2015)

  • fixes an issue where referral urls got truncated when using deferred deep linking (TUNE and third party)
  • fixes an issue due to which the MAT SDK could not be used with apps having bitcode enabled (in Xcode 7+)

v3.14.0 Changes (3 November 2015)

  • update latest enqueued requests with deferred deep link info set through applicationDidOpenURL:sourceApplication:
  • do not auto-collect location on sdk init to let disable flag take effect
  • deprecated setSiteId:, please use setPackageName: instead

v3.13.0 Changes (29 September 2015)

  • collect new iAd attribution info starting with iOS 9:

    "iad-attribution"
    "iad-impression-date"
    "iad-campaign-id"
    "iad-campaign-name"
    "iad-org-name"
    "iad-lineitem-id"
    "iad-lineitem-name"
    "iad-creative-id"
    "iad-creative-name"
    

v3.12.0 Changes (16 September 2015)

  • enabled "bitcode" support for iOS 9 Xcode 7
  • updated minimum deployment target to 6.0 from 5.1.1 — required when "bitcode" is enabled
  • dropped armv7s architecture — not supported by Xcode 7

v3.11.1 Changes (10 September 2015)

  • fixed functionality to disable auto-collection of device geo location
  • fixed broken ad caching related to TuneAdView
  • included transaction date when in-app-purchase auto-measurement is enabled
  • re-added missing armv7s architecture support

v3.11.0 Changes (26 August 2015)

  • changed Tune init method signatures

    + (void)initializeWithTuneAdvertiserId:(NSString *)aid tuneConversionKey:(NSString *)key;
    + (void)initializeWithTuneAdvertiserId:(NSString *)aid tuneConversionKey:(NSString *)key tunePackageName:(NSString *)name wearable:(BOOL)wearable;
    
  • added methods to allow control over auto-collection of IFA and device geo location

    + (void)setShouldAutoCollectAppleAdvertisingIdentifier:(BOOL)autoCollect;
    + (void)setShouldAutoCollectDeviceLocation:(BOOL)autoCollect;
    
  • changed geo location setter to use TuneLocation

  • method added

    + (void)setLocation:(TuneLocation *)location;
    
  • methods removed

    + (void)setLatitude:(double)latitude longitude:(double)longitude;
    + (void)setLatitude:(double)latitude longitude:(double)longitude altitude:(double)altitude;
    
  • sdk does not auto-open the deferred deep link anymore, the app needs to implement delegate methods and handle the deferred deep link as appropriate

  • changed deferred deep link method signature to require delegate object instead of timeout

    + (void)checkForDeferredDeeplink:(id)delegate;
    
  • removed timeout param from deferred deep link success delegate callback

    - (void)tuneDidReceiveDeeplink:(NSString *)deeplink;
    
  • updated

    TuneAdDelegate
    

    delegate callbacks

    - (void)tuneAdDidFetchAdForView:(TuneAdView *)adView placement:(NSString *)placement;
    - (void)tuneAdDidStartActionForView:(TuneAdView *)adView willLeaveApplication:(BOOL)willLeave;
    - (void)tuneAdDidEndActionForView:(TuneAdView *)adView;
    - (void)tuneAdDidCloseForView:(TuneAdView *)adView;
    - (void)tuneAdDidFailWithError:(NSError *)error forView:(TuneAdView *)adView;
    - (void)tuneAdDidFireRequestWithUrl:(NSString *)url data:(NSString *)data forView:(TuneAdView *)adView;
    
  • Fixed ad view request fired delegate callback

    - (void)tuneAdDidFireRequestWithUrl:(NSString *)url data:(NSString *)data forView:(TuneAdView *)adView;
    

v3.10.0 Changes (21 July 2015)

  • added support for showing banner and interstial ads for cross-promo

  • new classes:

    TuneAdView
    TuneAdDelegate
    TuneAdMetadata
    TuneBanner
    TuneInterstitial
    
  • auto-collects IFA when AdSupport.framework is available

  • auto-collects device location only if end-user has already permitted location access

  • added new init method to support event measurement from Apple Watch view controllers

  • new method:

    + (void)initializeWithTuneAdvertiserId:(NSString *)aid TuneConversionKey:(NSString *)key TunePackageName:(NSString *)name wearable:(BOOL)wearable;
    
  • added timeout flag to deferred deep link delegate callback

  • new method:

    - (void)tuneDidReceiveDeeplink:(NSString *)deeplink didTimeout:(BOOL)timeout;
    
  • deprecated MobileAppTracker/MAT classes; existing measurement code should work fine without change; use of Tune classes recommended going forward

  • new classes:

    Tune
    TuneDelegate
    TuneEvent
    TuneEventItem
    TunePreloadData
    
  • deprecated classes:

    MobileAppTracker
    MobileAppTrackerDelegate
    MATEvent
    MATEventItem
    MATPreloadData
    

v3.9.3 Changes [Critical] (18 June 2015)

  • bug fixed: possible app crash issue when using auto-measurement of in-app-purchase events on iOS < 8
  • bug fixed: url-encoding of user-agent query param in session/event requests and url-encoding of query params in deferred deep-link requests
  • updated MATEvent — added public string constants for pre-defined events to be used with measureEvent calls

v3.9.1 Changes [Critical] (15 May 2015)

  • bug fixed: possible app crash issue related to MATEvent introduced in v3.9
  • changed attributes of MATEvent properties — date1, date2 — to ‘strong’

v3.9 Changes (11 May 2015)

  • simplified event measurement method signatures

  • new methods:

    + (void)measureEventName:(NSString *)eventName;
    + (void)measureEventId:(NSInteger)eventId;
    + (void)measureEvent:(MATEvent *)event;
    
  • deprecated measureAction methods

  • removed setEventXXX methods

  • added option to auto-measure in-app-purchase events

  • new method:

    + (void)automateIapEventMeasurement:(BOOL)yesorno;
    
  • requires StoreKit.framework

  • added Facebook 4.0 SDK support for Facebook event logging

  • added ability to set publisher info through the SDK

  • new method:

    + (void)setPreloadData:(MATPreloadData *)preloadData;
    
  • removed internal method from public header:

    + (void)setPluginName:(NSString *)pluginName;
    
  • known bug: possible app crash when using MATEvent date1, date2 properties

v3.8.1 Changes [Critical] (31 March 2015)

  • bug fixed: crash related to nil values in phone number, user name, user email setters
  • bug fixed: rare cases of null garbage values in user-agent strings

v3.8 Changes (6 March 2015)

  • Personal data fields — phone number, user name, user email — are now hashed — MD5, SHA-1, SHA-256 — for ePrivacy compliance

v3.7 Changes [Critical] (14 January 2015)

  • added support for opening deferred deep-links on first app launch

  • added method:

    + (void)checkForDeferredDeeplinkWithTimeout:(NSTimeInterval)timeout;
    
  • bug fixed: possible app crash related Base64 encoding on iOS versions prior to 7.0

  • always uses Base64 methods provided by NSData

v3.6.1 Changes [Critical] (19 December 2014)

  • bug fixed: possible app crash related to CTTelephonyNetworkInfo
  • bug fixed: possible app crash related to threading when using Facebook event logging
  • calls all Facebook event logging methods on the main thread

v3.6 Changes (2 December 2014)

  • added setter method to optionally enable automatic event logging using Facebook SDK, disabled by default

  • to use this feature:

    • a corresponding Facebook app must exist
    • include Facebook SDK framework
    • add "-ObjC" or "-all_load" to project build settings "Other Linker Flags"
    • define FacebookAppID and FacebookDisplayName keys in the project Info.plist
  • when the option is enabled and Facebook SDK framework is included, measureSession and measureAction will automatically log corresponding events on Facebook

  • added method:

    + (void)setFacebookEventLogging:(BOOL)logging limitEventAndDataUsage:(BOOL)limit;
    

v3.5.4 Changes [Critical] (17 November 2014)

  • fixed possible NSXMLParser memory related crash if the stored MAT request queue gets too big (~500 KB), only affects apps released with MAT SDKs prior to v3.5

v3.5.3 Changes (6 October 2014)

  • re-added support for Xcode 5.1.1

v3.5.2 Changes [Critical] (6 October 2014)

  • fixed network request retry logic

v3.5.1 Changes (24 September 2014)

  • included armv7s along with armv7 and arm64 architectures
  • updated lowest deployment target to iOS 5.1.1

v3.5 Changes (17 September 2014)

  • created MAT module to be used when target project has "Enable Modules" set to Yes (requires Xcode 6.0)

    @import MobileAppTracker;
    
  • send iAd impression time for iAd attributed installs on iOS 8

  • improved request queuing logic

  • prefixed all internal constants to avoid symbol clash with other external libraries

  • requires Xcode 6.0+

v3.4.1 Changes (29 July 2014)

  • fixed possible duplicate symbol error when using Reachability class
  • when available use Base64 methods provided by NSData

v3.4 Changes (23 July 2014)

  • separated measureAction methods to accept string event names or int event ids
  • added multiple measureActionWithEventId:(NSInteger) methods

v3.3 Changes (21 July 2014)

  • collect and send device screen size and screen density values

v3.2.5 Changes (24 June 2014)

  • removed CoreLocation.framework dependency

v3.2.3 Changes (18 June 2014)

  • send request retry count for failed queued requests
  • lower retry frequency for subsequent failures
  • requires CoreLocation.framework to be included

v3.2.1 Changes [Critical] (9 May 2014)

  • bug fixed: rare app crash when collecting the user agent string
  • bug fixed: iAd attribution collected but not always sent to MAT servers

v3.2 Changes (4 April 2014)

  • persist userId, userName, userEmail to disk to make re-engagement attribution easier
  • add setEventContentType, setEventContentId, setEventLevel, setEventQuantity, setEventSearchString, setEventRating, setEventDate1, and setEventDate2 methods
  • enable iAd attribution on iOS 7.1, requires Xcode 5.1.1

v3.1.3 Changes (26 March 2014)

  • started collecting App Store receipt for fraud detection

v3.1.2 Changes [Critical] (20 March 2014)

  • bug fixed: background thread related app crash introduced in v3.1

v3.1.1 Changes (14 March 2014)

  • does not reference iAd.AdClient
  • does not collect iad_attribution on iOS 7.1
  • works with Xcode 5.0

v3.1 Changes (10 March 2014)

  • changed trackSession to measureSession
  • changed trackActionWithEventIdOrName: to measureAction:
  • collect and send iad_attribution on iOS 7.1
  • send is_paying_user=1 if the user has ever produced revenue (measureAction with revenue > 0)
  • all methods executed on an internal background thread
  • requires Xcode 5.1

v3.0.6 Changes (25 February 2014)

  • allowed public access to mat_id and open_log_id parameters

  • added methods:

    + (NSString*)matId;
    + (NSString*)openLogId;
    

v3.0.5 Changes (20 February 2014)

  • send system times in Unix epoch format
  • retry (enqueue) HTTP connections with almost all error states

v3.0.4 Changes (17 February 2014)

  • added methods:

    + (void)displayiAdInView:(UIView *)view;
    + (void)removeiAd;
    

v3.0.3 Changes (10 February 2014)

  • added methods:

    + (void)setUserEmail:(NSString *)userEmail;
    + (void)setUserName:(NSString *)userName;
    

v3.0.2 Changes [Critical] (10 February 2014)

  • does not require AdSupport framework

  • bug fixed: event name double url-encoding bug introduced in 3.0

  • removed method:

    + (void)setAppleAdvertisingIdentifier:(NSUUID *)advertising_identifier;
    
  • added method:

    + (void)setAppleAdvertisingIdentifier:(NSUUID *)advertising_identifier
               advertisingTrackingEnabled:(BOOL)adTrackingEnabled;
    

v3.0.1 Changes [Critical] (6 February 2014)

  • critical: restored support for builds that target arm64 architecture (64-bit devices)
  • known bug: event names get double url-encoded in sdk, ex. event name "level finished" is recorded as "level%20finished" in reports

v3.0 Changes [Critical] (5 February 2014)

  • added setExistingUser: and trackSession methods to take care of tracking install, update and open events

  • removed methods:

    + (void)trackInstall;
    + (void)trackUpdate;
    
  • added methods:

    + (void)setExistingUser:(BOOL)existingUser;
    + (MATActionResult)trackSession;
    
  • added enum MATActionResult used for the return type of trackSession method

  • replaced existing methods with equivalent class methods, sharedManager not provided anymore

  • the sdk automatically assumes that an event name is an id when it contains all numbers

  • sdk uses in-built json api, thus requires minimum iOS version of 5.0

  • removed class property:

    NSDictionary *sdkDataParameters;
    
  • renamed method:

    setTRUSTeTPID: to setTRUSTeId:
    
  • similar to eventItem attributes, now all events support upto 5 attributes to be set

  • list of methods added:

    + (void)setEventAttribute1:(NSString*)value;
    + (void)setEventAttribute2:(NSString*)value;
    + (void)setEventAttribute3:(NSString*)value;
    + (void)setEventAttribute4:(NSString*)value;
    + (void)setEventAttribute5:(NSString*)value;
    
  • changed MobileAppTrackerDelegate method signatures to:

    + (void)mobileAppTrackerDidSucceedWithData:(NSData*)data;
    + (void)mobileAppTrackerDidFailWithError:(NSError*)error;
    
  • bug fixed: incorrect truncation of urls if the app title contained non-English unicode characters

  • code change: replace all occurrences of "[[MobileAppTracker sharedManager]" with "[MobileAppTracker"

  • code change: when the app starts always call setExistingUser: and trackSession

  • code change: remove calls to trackInstall, trackUpdate

  • code change: remove calls to trackAction:"open" events

  • code change: remove eventIsId param from existing trackAction method calls

  • code change: rename MobileAppTrackerDelegate callback method signatures

  • code change: remove calls to class property:

    NSDictionary *sdkDataParameters;
    
  • code change: rename method call:

    setTRUSTeTPID: to setTRUSTeId:
    
  • known bug: event names get double url-encoded in sdk, ex. event name "level finished" is recorded as "level%20finished" in reports

v2.7.1 Changes

  • sdk does not auto­generate IFA, only provides a setter for the same

  • adds support to display iAd banners

  • requires iAd.framework

  • sdk uses in-built json api, thus requires minimum iOS version of 5.0

  • list of new methods:

    - (void)displayiAdInView:(UIView *)view;
    - (void)removeiAd;
    
  • list of new delegate callback methods:

    - (void)mobileAppTrackerDidDisplayiAd;
    - (void)mobileAppTrackerDidRemoveiAd;
    - (void)mobileAppTrackerFailedToReceiveiAdWithError:(NSError *)error;
    
  • list of deleted methods:

    - (void)setShouldAutoGenerateAppleAdvertisingIdentifier:(BOOL)yesorno;
    

v2.7 Changes

  • added setter methods that allow collecting user’s Facebook, Google, Twitter Ids

  • list of new methods:

    - (void)setFacebookUserId:(NSString *)facebookUserId;
    - (void)setGoogleUserId:(NSString *)googleUserId;;
    - (void)setTwitterUserId:(NSString *)twitterUserId;
    
  • list of deprecated methods:

    - (void)setMATAdvertiserId:(NSString *)advertiserId;
    - (void)setMATConversionKey:(NSString *)conversionKey;
    - (void)setMACAddress:(NSString *)macAddress;
    - (void)setODIN1:(NSString *)odin1;
    - (void)setOpenUDID:(NSString *)openUDID;
    - (void)setUIID:(NSString *)uiid;
    

v2.6.1 Changes

  • added support for builds that target arm64 architecture (64-bit devices)

v2.6 Changes

  • added simulator support for Xcode 5, iOS 7

v2.5.3 Changes [Critical]

  • fixed applicationDidOpenURL:sourceApplication: method
  • always use HTTPS, removed setUseHTTPS: method

v2.5.2 Changes [Critical]

  • fixed applicationDidOpenURL:sourceApplication: method

v2.5.1 Changes [Critical]

  • critical: fixed request queuing used in case there is no network connectivity
  • renamed helper methods that could possibly cause duplicate symbol errors
  • replaced enum MATGender with corresponding integer constants

v2.5 Changes

  • added support for iOS 7

  • added trackAction method that accepts iTunes IAP transaction receipt to allow MAT server-side IAP transaction verification

  • added setter to enable/disable App Level Ad-Tracking

    - (void)setAppAdTracking:(BOOL)enable;
    
  • added setter for UIID, an alternative for UDID

    - (void)setUIID:(NSString *)uiid;
    
  • stopped auto-generating device unique identifiers in SDK, added corresponding setter methods — MAC, ODIN1, OpenUDID, TRUSTe TPID, UIID

  • removed methods:
    Note: please remove the following setShouldAutoGenerateXXX method calls

    - (void)setShouldAutoGenerateMacAddress:(BOOL)yesorno;
    - (void)setShouldAutoGenerateODIN1Key:(BOOL)yesorno;
    - (void)setShouldAutoGenerateOpenUDIDKey:(BOOL)yesorno;
    
  • added setter methods:

    - (void)setMACAddress:(NSString *)macAddress;
    - (void)setODIN1:(NSString *)odin1;
    

v2.4.2 changes

  • fixed build to not necessitate CoreGraphics framework

v2.4.1 changes

  • fixed user agent collection logic
  • require CoreGraphics framework inclusion

v2.4 changes [Critical]

  • added support for recording user info – age, gender

  • added support for recording user location – latitude, longitude, altitude

  • event items now provide 5 additional attributes

  • blocked tracking calls for "close" event

  • removed error parameter from start method

  • Deprecated Method:

    - (BOOL)startTrackerWithMATAdvertiserId:(NSString *)aid MATConversionKey:(NSString *)key withError:(NSError **)error;
    
  • Added Method:

    - (BOOL)startTrackerWithMATAdvertiserId:(NSString *)aid MATConversionKey:(NSString *)key;
    
  • deprecated the use of event item dictionaries in trackAction methods; use MATEventItem objects instead

v2.3 changes [Critical]

  • critical: fixed issue where offline queued installs/events were lost when app was killed and restarted

  • fixed setAdvertiserIdentifier: to use the NSString representation of the NSUUID

  • fixed issue where event items with non-English unicode characters would not get logged, e.g. ü, ç

  • to count daily unique users allow only one "open" event on any given date

  • the SDK now fires all asynchronous network requests on the main thread

  • the SDK makes sure that the data stored by the sdk is not backed up to iCloud

  • route debug requests to debug.engine.mobileapptracking.com domain

  • show warning alert dialog when debug mode is enabled

  • added methods setJailbroken: and setShouldAutoDetectJailbroken:

  • removed method setDeviceId: that allowed you to set the Apple device uniqueIdentifier

  • Note: Code change needed: Please remove any setDeviceId: method calls.

  • List of deprecated methods:

    - (BOOL)startTrackerWithAdvertiserId:(NSString *)aid advertiserKey:(NSString *)key withError:(NSError **)error;
    - (void)setAdvertiserId:(NSString *)advertiser_id;
    - (void)setAdvertiserKey:(NSString *)advertiser_key;
    - (void)setAdvertiserIdentifier:(NSUUID *)advertiser_identifier;
    - (void)setVendorIdentifier:(NSUUID * )vendor_identifier;
    - (void)setShouldAutoGenerateAdvertiserIdentifier:(BOOL)yesorno;
    - (void)setShouldAutoGenerateVendorIdentifier:(BOOL)yesorno;
    - (void)setShouldDebugResponseFromServer:(BOOL)yesorno;
    - (void)setShouldAllowDuplicateRequests:(BOOL)yesorno;
    
  • List of new methods:

    - (BOOL)startTrackerWithMATAdvertiserId:(NSString *)aid MATConversionKey:(NSString *)key withError:(NSError **)error;
    - (void)setMATAdvertiserId:(NSString *)advertiser_id;
    - (void)setMATConversionKey:(NSString *)conversion_key;
    - (void)setAppleAdvertisingIdentifier:(NSUUID *)advertising_identifier;
    - (void)setAppleVendorIdentifier:(NSUUID * )vendor_identifier;
    - (void)setShouldAutoGenerateAppleAdvertisingIdentifier:(BOOL)yesorno;
    - (void)setShouldAutoGenerateAppleVendorIdentifier:(BOOL)yesorno;
    - (void)setDebugMode:(BOOL)yesorno;
    - (void)setAllowDuplicateRequests:(BOOL)yesorno;
    

v2.2 changes [Critical]

  • before trying to send up data to the tracking engine on the server, check for reachability. If the server is not available, then the execution is queued for retry later
  • changed MobileAppTracker delegate return data from id to NSData to enable strong typing of the return data
  • added delegate callbacks when app-to-app tracking request returns
  • bug: event name casing was not preserved when sending the event to the server. Example: event name of "Purchase" was being changed to lowercase "purchase"
  • bug: reference id was not being sent with install or update. trackInstallWithReferenceId and trackUpdateWithReferenceId were not sending up reference id to the server and reports were not showing Advertiser Ref Id values because of this.
  • change: NSURL timeout for connection changed to 60 seconds as a default.

v2.1 changes [Critical]

  • new trackInstall and trackUpdate methods replacing the trackInstallWithUpdateOnly method
  • new in app purchase tracking
  • supports both compilers — Apple LLVM and LLVM-GCC
  • fixed: removed revenue amount from parameters after a track action method call so revenue does not get inadvertently sent with other actions
  • fixed: updated app to app tracking to support only one set tracking method and fixed a bug with setting package name
  • fixed: defaulting to HTTPS was not working
  • Note: the Bundle Identifier for your app target in Xcode must match the Bundle Name in the MAT console. Otherwise, event tracking will not work.
  • new optional site id parameter to identify your app to the tracking engine

v2.0 changes [Critical]

  • Note: You must call trackInstall or trackUpdate in your code. These methods are new for V2.0. Previous versions of the SDK implicitly called trackInstall or trackUpdate
  • Simplified set methods for passing in data and setting options
  • Simplified start method, just pass in advertiser id, key
  • Control auto generation of data like mac address and other identifiers
  • Improved and simplified track action methods
  • Create custom track action events with event items to track in-app purchases
  • New support for Re-Engagement
  • Consolidation to a single download for the framework static library file, support for arc and non-arc projects in one framework file
  • Sample Xcode project
  • Support for iOS® 4.3 and above
  • Support for iPhone 5 and iOS 6
  • Uses new iOS 6 Advertiser Identifier and Vendor Identifier
  • App to App Tracking, track an install from your app to other apps you’ve integrated with MAT SDK

Windows SDK Version History

v3.6.0 Changes (1 June 2016)

  • Event items are now sent as POST data.

v3.5.2 Changes (21 January 2016)

  • Wrap CurrentApp.AppId in try/catch
  • Avoid ReadToEnd when reading server response

v3.5.1 Changes (18 August 2015)

  • Use CurrentApp.AppId as package name if available

v3.5.0 Changes (6 August 2015)

  • Windows Phone 8: Check for null ProductID from WMAppManifest (occurs on Windows 10)
  • Windows Universal: Read Windows 10 Package.appxmanifest for app name on Windows 10
  • Hash user-sensitive information before sending, requires Bouncy Castle PCL for crypto
  • Return MobileAppTracker object directly from InitializeValues

Adobe Air Plugin Version History

v5.5.1 Changes (4 April 2017)

  • Separated device and simulator static library for iOS

v5.1.0 Changes (16 February 2017)

  • Built with latest Flex 4.15.0, AIR 24.0.

v5.0.0 Changes (14 September 2016)

  • Updates plugin to use iOS SDK 4.9.0, Android SDK 4.6.0.
  • Extension name changed from com.hasoffers.MobileAppTracker to com.tune.Tune.
  • Actionscript namespace changed from com.hasoffers.nativeextensions.MobileAppTrackerto com.tune.ane.Tune.
  • Only include play-services-basement-{version}.aar in build.
  • Built with latest Flex 4.15.0, AIR 22.0.

v4.3.0 Changes (3 December 2015)

  • Add deep link setter setDeepLink
  • iOS SDK 3.15.0
  • Android SDK 3.11.4

Phonegap / Cordova Plugin Version History

v8.0.0 Changes (25 April 2019)

  • Update to Android SDK Version : 6.1.1
  • Update to iOS SDK Version : 6.1.X
  • Removed IAM features
  • Improved Branch compatibility

v7.0.0 Changes (2 May 2018)

  • Update to support Cordova 8
  • Add improved privacy protection support
  • Add updated deeplink APIs

v6.0.0 Changes (26 September 2017)

  • Added IAM support to the PhoneGap SDK Plugin

Unity Plugin Version History

v7.0.0 Changes (30 May 2019)

  • Update to Android SDK Version : 6.1.1
  • Update to iOS SDK Version : 6.1.X
  • Improved Branch compatibility

v6.0.0 Changes (19 November 2018)

  • Removed In-App Messaging functionality.

v5.0.0 Changes (8 March 2018)

  • Updated for TUNE SDK Android 5.0.2 (in-app messaging, COPPA support)
  • Updated for TUNE SDK iOS 5.0.2 (in-app messaging, COPPA support)
  • Updated for Unity 2017 compatibility
  • Removed packaged Google Play Services binaries, uses Unity Jar Resolver to manage dependencies

v4.5.1 Changes (24 May 2017)

  • Fixed openURL method signature for UnityAppController
  • Updated for TUNE SDK Android 4.10.1
  • Updated for TUNE SDK iOS 4.12.3

v4.5.0 Changes (19 April 2017)

  • Fixed deep-linking issues
  • Updated for TUNE SDK Android 4.10.1
  • Updated for TUNE SDK iOS 4.12.3

v4.4.0 Changes (2 November 2016)

  • Removed extraneous MyAppDelegate., MyApplication. sample app files from Tune.unitypackage
  • Updated for TUNE SDK Android 4.7.1
  • Updated for TUNE SDK iOS 4.10.0

v4.3.2 Changes (23 September 2016)

  • IAM: Fixed TuneGetValueForHookById method on iOS
  • Updated to iOS SDK 4.9.1
  • Updated sample app UI, added button for IAM power hook getter tests

v4.3.1 Changes (15 September 2016)

  • Fixed possible app crash by removing references to deprecated field eventId

v4.3.0 Changes (24 September 2016)

  • Updates plugin to use Tune SDKs -- Android 4.6.0, iOS 4.9.0
  • Restores "struct" for some types in TuneStructs.cs to fix app crash related to marshalling
  • Known Issue: Possible app crash related to TuneEventIos marshalling.

v4.20 Changes (16 August 2016)

  • Updates plugin to use to Android 4.5.0, iOS 4.7.0
  • Adds trackerDidEnqueueUrl listener callback
  • Removes measurement by event id
  • Adds DidSessionStartFromTunePush, GetTunePushInfoForSession Unity methods
  • Adds IsUserInSegmentId, IsUserInAnySegmentIds, ForceSetUserInSegmentId Unity methods
  • Prepackage GPS aars required for Push Notifications
  • Fix custom Application class build script to work with Java 1.8
  • Known Issue: Possible app crash related to TuneEventIos marshalling.

v4.1.1 Changes (2 June 2016)

  • Google Play Services rev. 30 has moved the library location in the Android SDK folder, GPS import script has been updated to use the new location to import the required aar to collect Google Advertising ID. Unitypackage has been updated to ship with required aar as well.
  • Update JARs to be compatible with Java 1.8. Will require JDK 1.8 in Unity → Preferences → External Tools → JDK.

v4.1.0 Changes (20 May 2016)

  • TUNE Android SDK 4.1.2
  • TUNE iOS SDK 4.3.0 - includes a compatibility fix for Facebook Unity plugin
  • Adds Android support for setShouldAutoCollectDeviceLocation

v4.0.1 Changes (15 April 2016)

  • Fixes Android init call when called non-natively

v4.0.0 Changes (12 April 2016)

  • TUNE Android SDK 4.0.3
  • TUNE iOS SDK 4.2.0
  • Adds In-App Marketing functionality

v3.12.1 Changes (19 January 2016)

  • Includes MAT iOS SDK 3.15.1 - fixes invoking of FB SDK's activateApp call when setFacebookEventLogging is enabled

Xamarin Plugin Version History

v6.0 Changes (10 June 2019)

  • Update to Android SDK Version : 6.1.1
  • Update to iOS SDK Version : 6.1.X
  • Improved Branch compatibility

v5.1 Changes (28 February 2017)

  • API updates for Xamarin iOS Plugin 5.1.0 release

Migration Guides

Migrating from SDK 5.X.X to 6.X.X

This document is specifically for users who implemented In-App Marketing in a previous SDK implementation and now need to remove it.

Android SDK

  1. Remove the Tune.init call with the overload with value "true" for turnOnTMA.

  2. If you were previously using "setPackageName" to manually specify a package name, this value should be passed as a param in Tune.init.

  3. If you were previously using in-app messages, you may remove "TuneFullScreenActivity" from your AndroidManifest.

  4. If you were previously using push, you may remove the following:

    • "setPushNotificationSenderId" or "setPushNotificationRegistrationId" calls

    • "play-services-gcm" library from gradle dependencies

    • In AndroidManifest, remove permissions:

      <permission android:name="{Your application package name}.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
      <uses-permission android:name="{Your package name}.permission.C2D_MESSAGE"/>
      <uses-permission android:name="android.permission.WAKE_LOCK" />
      <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
      
    • From AndroidManifest, remove service and receiver:

      GcmReceiver
      TunePushService
      
  5. If you were previously using any methods related to power hooks, deep actions, custom profile tags, or first download callbacks, you may remove those calls. For first download callbacks, replace these with either immediately executing the code block or implementing your own timeout.

Note: Initializing TUNE still uses Tune.java, however init() now returns a pure interface which can be found in ITune.java

iOS SDK

  1. "TuneConfiguration.plist" can be removed from your project

  2. If you were previously using "setPackageName" to manually specify a package name, this value should be passed as a param in Tune initializeWithAdvertiserId.

  3. If you were previously using push, you may remove the following:

    • If you were manually hooking into Tune’s push calls, remove:

      application:tuneDidRegisterForRemoteNotificationsWithDeviceToken:
      application:tuneDidFailToRegisterForRemoteNotificationsWithError:
      application:tuneHandleActionWithIdentifier:forRemoteNotification:completionHandler:
      application:tuneHandleActionWithIdentifier:forRemoteNotification:completionHandler:
      application:tuneDidReceiveRemoteNotification:fetchCompletionHandler:
      
    • If you’re no longer using push, you may remove the push capability from your project and any push registration calls

  4. If you were previously using any methods related to power hooks, deep actions, custom profile tags, or first download callbacks, you may remove those calls. For first download callbacks, replace these with either immediately executing the code block or implementing your own timeout.

Migrating from SDK 3.x.x to 4.x.x

The TUNE SDK version 4.0 introduces some new class namespaces. The code migration from 3.x.x to 4.x.x is very simple with 1:1 class/method name replacements.

Android SDK

To install via the TUNE jCenter distribution:

  1. Ensure that jCenter is included as a repository in your Gradle file:

    buildscript {
        repositories {
            [...]
            jcenter()
        }
        [...]
    }
    
  2. Add the following line to your Gradle dependency stanza:

    compile 'com.tune:tune-marketing-console-sdk:4.0.+'
    

    This will automatically add in the TUNE SDK (with associated dependencies) to your project.

  3. Remove the old MobileAppTracker.jar from your libs folder.

To install via the TUNE SDK JAR distribution:

  1. Replace MobileAppTracker.jar with TuneMarketingConsoleSDK.jar in your project’s libs folder.
  2. Add the new required dependencies to your app:

Be sure to update the com.mobileapptracker.Tracker receiver in your AndroidManifest.xml to com.tune.TuneTracker.

Use Tune classes in place of MobileAppTracker/MAT classes:

Old (deprecated)New (replacement)
MobileAppTrackerTune
MATDeeplinkListenerTuneDeeplinkListener
MATEventTuneEvent
MATEventItemTuneEventItem
MATPreloadDataTunePreloadData
MATResponseTuneListener
com.mobileapptracker.Trackercom.tune.TuneTracker

Optional: We recommend moving your MobileAppTracker.init call to a Tune.init call inside a custom Application class. This will make it easier for your SDK integration to enable In-App Marketing, as well as access the Tune singleton throughout your application as Tune.getInstance().

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Tune.init(this, YOUR_ADVERTISER_ID, YOUR_CONVERSION_KEY);
    }
}

If you do this, modify the AndroidManifest.xml by adding an android:name field to the <application> tag in order to use the custom Application you created.

<application
        android:name=".MyApplication" />

You may keep your existing measureSession and measureEvent calls where they are, accessing the singleton instance initialized from the Application class with getInstance():

public class MyActivity extends Activity {
    @Override
    public void onResume() {
        super.onResume();
        Tune.getInstance().setReferralSources(this);
        Tune.getInstance().measureSession();
    }
}

Migrating to Android 4.8.0+

🚧

Note

In-App Marketing will be shutting down November 1st, 2018. API calls will be removed in Tune Android & iOS SDKs v6.0.0. Customers are required to remove all code references to prevent service disruption. Please contact your Customer Success Manager with additional questions.

Complete the following guide to upgrade from TUNE Android SDK 4.x to 4.8 and above:

  1. If you are already using In-App Marketing, skip this step and continue to step 2. Otherwise complete the following 3-4 steps to integrate TUNE into your app:

    • Add a custom Application class or update your Application class so that it either extends TuneApplication or that you add our activity lifecycle callbacks to it.

    • Update your AndroidManifest.xml Application tag to reference your custom Application class.

      <application
          android:name=".MyApplication" />
      
    • Tune.init needs to be called inside your Application's onCreate method.

    • If you support API 14 or below: update all of your Activities to extend TuneActivity or add TUNE start/resume/stop, etc. calls.

  2. Remove all calls to tune.measureSession and tune.setReferralSource. TUNE calls this automatically when your Activities resume. measureSession and setReferralSource are deprecated and will be removed in the 5.0 version of the TUNE Android SDK.

  3. Any calls to tune.checkForDeferredDeeplink or tune.setDeeplinkListener should be changed to tune.registerDeeplinkListener as of 4.8.0. checkForDeferredDeeplink and setDeeplinkListener are deprecated and will be removed in the TUNE Android SDK 5.0.

Thank you for upgrading! You are now ready to use the TUNE Android SDK v4.8 and above!

iOS SDK

Update Framework References

There are two ways to reference the new Tune framework.

Cocoapods

If your project uses Cocoapods to manage library dependencies, please replace pod 'MobileAppTracker' in your project's Podfile with pod 'Tune'.

After that, open a terminal window, go to the project root folder and run pod update command to update the dependencies.

Directly Referenced Framework

If your project directly includes framework references, then remove MobileAppTracker.framework reference, from Xcode project Build Phases "Link Binary With Libraries"; add Tune.framework reference instead.

Update Code

Update import statements.

  • Replace @import MobileAppTracker with @import Tune.
  • Replace #import <MobileAppTracker/MobileAppTracker.h> with #import <Tune/Tune.h>.

Use Tune classes in place of MobileAppTracker/MAT classes:

Old (deprecated)New (replacement)
MobileAppTrackerTune
MobileAppTrackerDelegateTuneDelegate
MobileAppTrackerRegionDelegateTuneRegionDelegate
MATEventTuneEvent
MATEventItemTuneEventItem
MATPreloadDataTunePreloadData

Use the Tune init method in place of the MobileAppTracker init method.

Before:

+ (void)initializeWithMATAdvertiserId:(NSString *)aid MATConversionKey:(NSString *)key;

After:

+ (void)initializeWithTuneAdvertiserId:(NSString *)aid tuneConversionKey:(NSString *)key;

Implement the TuneDelegate protocol in place of the MobileAppTrackerDelegate protocol. Replace the delegate callback methods from:

- (void)mobileAppTrackerEnqueuedActionWithReferenceId:(NSString *)referenceId;
- (void)mobileAppTrackerDidSucceedWithData:(NSData *)data;
- (void)mobileAppTrackerDidFailWithError:(NSError *)error;
- (void)mobileAppTrackerDidReceiveDeeplink:(NSString *)deeplink didTimeout:(BOOL)timeout;
- (void)mobileAppTrackerDidFailDeeplinkWithError:(NSError *)error;
- (void)mobileAppTrackerDidDisplayiAd;
- (void)mobileAppTrackerDidRemoveiAd;
- (void)mobileAppTrackerFailedToReceiveiAdWithError:(NSError *)error;

to:

- (void)tuneEnqueuedActionWithReferenceId:(NSString *)referenceId;
- (void)tuneDidSucceedWithData:(NSData *)data;
- (void)tuneDidFailWithError:(NSError *)error;
- (void)tuneDidReceiveDeeplink:(NSString *)deeplink didTimeout:(BOOL)timeout;
- (void)tuneDidFailDeeplinkWithError:(NSError *)error;
- (void)tuneDidDisplayiAd;
- (void)tuneDidRemoveiAd;
- (void)tuneFailedToReceiveiAdWithError:(NSError *)error;

Use the Tune setLocation: method in place of the MobileAppTracker setLatitude:longitude: method.

Before:

+ (void)setLatitude:(double)latitude longitude:(double)longitude;

After:

+ (void)setLocation:(TuneLocation *)location;

To ensure that the various class categories (included with the SDK) are accessible during runtime, make sure that the Xcode project Build Settings Other Linker Flags includes:

-ObjC -lz

To ensure that the required frameworks are included in your project, make sure that the Xcode project Build Phases Link Binary With Libraries includes the following framework references:

AdSupport
CoreTelephony
iAd
libz.dylib OR libz.tbd
MobileCoreServices
Security
StoreKit
SystemConfiguration

The getter method for mat_id generated by the SDK has been renamed. Please replace +(NSString *)matId with +(NSString *)tuneId.

If the package name of your app does not match the app’s bundle id, then explicitly set the package name in code. If your app uses setSiteId:, then lookup the package name from the TUNE dashboard and call setPackageName: instead.

Migrating to TUNE iOS SDK 4.12.0+

Have an existing TUNE SDK implementation? Several methods are deprecated for iOS 4.12.0. Update and change to the following methods:

  • If you are calling checkForDeferredDeeplink: change to registerDeeplinkListener:
  • If you are calling applicationDidOpenURL:sourceApplication: change to handleOpenURL:sourceApplication: or handleOpenURL:options:
  • If you are calling application:tuneContinueUserActivity:restorationHandler: change to handleContinueUserActivity:restorationHandler:

Implementing TUNE SDK 4.12.0

The deep link implementation uses one listener to handle both deferred and universal links.

Add Hooks to AppDelegate Methods

Add hooks into your AppDelegate's application:openURL:options and application:openURL:sourceApplication:annotation: methods, calling TUNE's handleOpenURL:options or handleOpenURL:sourceApplication: in order to capture app opens from a URL scheme:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
    // Pass the deep link URL to Tune
    [Tune handleOpenURL:url options:options];
    // Take care of the redirect yourself here
    ...
    return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    // Pass the deep link URL to Tune
    [Tune handleOpenURL:url sourceApplication:sourceApplication];
    // Take care of the redirect yourself here
    ...
    return YES;
}

Add a hook into your AppDelegate's application:continueUserActivity:restorationHandler: method, calling TUNE's handleContinueUserActivity:restorationHandler: in order to capture app opens from a Universal Link:

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * _Nullable))restorationHandler {
    BOOL handledByTune = [Tune handleContinueUserActivity:userActivity restorationHandler:restorationHandler];
    // If handledByTune is false, take care of the redirect yourself
    if (!handledByTune) {
        ...
    }
    return YES;
}
Register Deeplinks

To implement, call registerDeeplinkListener: with a TuneDelegate implementation after your TUNE SDK init call. The implementation must implement the methods tuneDidReceiveDeeplink: and tuneDidFailDeeplinkWithError:

For example, you can have your app delegate implement the following TuneDelegate callbacks:

- (void)tuneDidReceiveDeeplink:(NSString *)deeplink {
    NSLog(@"TUNE.deeplink: %@", deeplink);
    // Handle deep link redirect here...
}

- (void)tuneDidFailDeeplinkWithError:(NSError *)error {
    NSLog(@"TUNE.deeplink failed: %@", [error localizedDescription]);
}

Then register itself as a listener:

[Tune registerDeeplinkListener:self];

You are now able to track a variety of deeplink opens with the TUNE SDK.

Migrating Unity Plugin from 3.x.x to 4.x.x

For a clean install, you may want to delete your existing files in /Assets/TuneOSS and /Assets/Plugins. If you have other files you need to keep, you may refer here for a list of files from the 3.x plugin that can be deleted: https://github.com/BranchMetrics/unity-plugin/tree/v3.12.1/sample/Assets

Import the new Tune.unitypackage file.

Update the com.mobileapptracker.Tracker receiver in your AndroidManifest.xml to com.tune.TuneTracker.

Use Tune classes in place of MobileAppTracker/MAT classes:

Old (deprecated)New (replacement)
using MATSDKTuneSDK
MATBindingTune
MATEventTuneEvent
MATItemTuneItem
MATPreloadDataTunePreloadData
MobileAppTracker GameObjectTuneListener GameObject

Migrating from SDK 2.x.x to 3.x.x

MAT SDK 3.12.x introduced new ways of calling the same methods as in MAT SDK 2.x. The migration to latest MAT SDK 3.x.x is simple, with 1:1 replacements for most of the old class/method names.

Android SDK

The MobileAppTracker is now accessed via a singleton. So instead of:

MobileAppTracker mobileAppTracker = new MobileAppTracker(context, "advertiserId", "conversionKey");

you now use:

MobileAppTracker.init(context, "advertiserId", "conversionKey");
MobileAppTracker mobileAppTracker = MobileAppTracker.getInstance();

The trackInstall() and trackUpdate() methods have been replaced by the measureSession() method.
Call measureSession() on every app launch (generally, in onResume() of your main Activity). We measure installs, updates, and opens using a single method now.

The trackAction() method has been replaced by the measureAction() method.

We don’t automatically collect Android ID or IMEI anymore, because of Google’s new Advertising Identifier and associated policy changes. The MAT SDK for Android version 3.9+ automatically collects this Google Ad ID, so you don’t need to manually call "setGoogleAdvertisingId()".

If you are using the MAT SDK for Android version 3.8 or earlier, then you need to add the Google Play Services SDK to your app project and use it to collect the advertising identifier on a background thread. We recommend using the Android ID as a fallback identifier in cases where the Google Ad ID is not present.

// Collect Google Play Advertising ID; REQUIRED for attribution on Android devices
new Thread(new Runnable() {
    @Override public void run() {
        // See sample code at http://developer.android.com/google/play-services/id.html
        try {
            Info adInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
            mobileAppTracker.setGoogleAdvertisingId(adInfo.getId(), adInfo.isLimitAdTrackingEnabled());
        } catch (IOException e) {
            // Unrecoverable error connecting to Google Play services (e.g.,
            // the old version of the service doesn't support getting AdvertisingId).
            mobileAppTracker.setAndroidId(Secure.getString(getContentResolver(), Secure.ANDROID_ID));
        } catch (GooglePlayServicesNotAvailableException e) {
            // Google Play services is not available entirely.
            mobileAppTracker.setAndroidId(Secure.getString(getContentResolver(), Secure.ANDROID_ID));
        } catch (GooglePlayServicesRepairableException e) {
            // Encountered a recoverable error connecting to Google Play services.
            mobileAppTracker.setAndroidId(Secure.getString(getContentResolver(), Secure.ANDROID_ID));
        } catch (NullPointerException e) {
            // adInfo is sometimes null
            mobileAppTracker.setAndroidId(Secure.getString(getContentResolver(), Secure.ANDROID_ID));
        }
    }
}).start();

iOS SDK

  • The MAT SDK provides class methods instead of instance methods to make your app code cleaner. Thus sharedManager method does not need to be called anymore and has been removed.
  • The MAT SDK replaces MobileAppTracker with Tune class
  • The MAT SDK adds TuneEvent class that allows you to keep the event info together.
  • The trackAction method has been replaced by measureEventXXX methods
  • The trackInstall and trackUpdate methods have been replaced by the measureSession method.
    Call measureSession in applicationDidBecomeActive (instead of didFinishLaunching). We measure installs, updates, and opens using a single method now.
  • Xcode 7 (or higher) is required to submit to the App Store.

Migrating from Unity Plugin 4.x.x to 5.x.x

The TUNE Unity plugin 5.x introduces some new ways to include the native TUNE SDKs and dependencies. The migration involves adding a new helper package to manage the dependencies.

Migration Instructions

  1. For a clean install, you may want to delete your existing files in /Assets/Tune and /Assets/Plugins. If you have other files you need to keep, you may refer here for a list of files from the 4.x plugin that can be deleted: https://github.com/BranchMetrics/unity-plugin/tree/v4.5.1/sample/Assets

    The 5.x plugin moves most of the plugin files into the /Assets/Tune folder in order to be self-contained and separate from the rest of your Assets files.

  2. The 5.x plugin uses Google's Unity Jar Resolver plugin to resolve dependencies and perform version management.Please download and import this package into your project.

  3. Import the new Tune.unitypackage file.

  4. After importing, Unity Jar Resolver should read the contents of /Assets/Tune/Editor/TunePluginDependencies.xml and import the libraries listed in the file.

    On Android, the /Assets/Plugins/Android folder should now contain all the imported libraries.

    On iOS, since Unity Jar Resolver uses CocoaPods, when you build your iOS project you should now open the generated ".xcworkspace" file instead of the ".xcodeproj" file. The workspace will contain all library dependencies in addition to your project source.

Known Issues

Unity 5 Compatibility

If you're building on Unity 5, there's an issue with the Tune script using an API call that's not available on Unity 5.

You can comment out the following line in TunePostBuildTrigger.cs (line:84):

proj.AddCapability(target, PBXCapabilityType.PushNotifications);

If you are using in-app marketing, you will simply need to add the push capability in Xcode yourself in place of this line.

Building with Gradle for Android

If you're building your Android project with Gradle, you can comment out the Android dependencies in /Assets/Tune/Editor/TunePluginDependencies.xml and instead simply add the TUNE SDK dependency to your .gradle file:

compile 'com.tune:tune-marketing-console-sdk:5.0.2'

You may need to add the Google repo to the "repositories" in your mainTemplate.gradle file:

google()

If you're using in-app marketing, you'll also want to include:

compile 'com.google.android.gms:play-services-gcm:11.8.0'

Did this page help you?