Matomo iOS, tvOS and macOS SDK: a Matomo tracker written in Swift

Overview

MatomoTracker (former PiwikTracker) iOS SDK

The MatomoTracker is an iOS, tvOS and macOS SDK for sending app analytics to a Matomo server. MatomoTracker can be used from Swift and Objective-C.

Fancy help improve this SDK? Check this list to see what is left and can be improved.

Build Status

Installation

CocoaPods

Use the following in your Podfile.

pod 'MatomoTracker', '~> 7.4'

Then run pod install. In every file you want to use the MatomoTracker, don't forget to import the framework with import MatomoTracker.

Carthage

Carthage is a non intrusive way to install MatomoTracker to your project. It makes no changes to your Xcode project and workspace. Add the following to your Cartfile:

github "matomo-org/matomo-sdk-ios"

Usage

Matomo Instance

The Matomo iOS SDK doesn't provide a instance of the PiwikTracker. In order to be able to track data you have to create an instance first.

let matomoTracker = MatomoTracker(siteId: "23", baseURL: URL(string: "https://demo2.matomo.org/piwik.php")!)

The siteId is the ID that you can get if you add a website within the Matomo web interface. The baseURL it the URL to your Matomo web instance and has to include the "piwik.php" or "matomo.php" string.

You can either pass around this instance, or add an extension to the MatomoTracker class and add a shared instance property.

extension MatomoTracker {
    static let shared: MatomoTracker = MatomoTracker(siteId: "1", baseURL: URL(string: "https://example.com/piwik.php")!)
}

The siteId is the ID that you can get if you add a website within the Matomo web interface. The baseURL is the URL to your Matomo web instance and has to include the "piwik.php" or "matomo.php" string.

You can use multiple instances within one application.

Opting Out

The MatomoTracker SDK supports opting out of tracking. Please use the isOptedOut property of the MatomoTracker to define if the user opted out of tracking.

matomoTracker.isOptedOut = true

Tracking Page Views

The MatomoTracker can track hierarchical screen names, e.g. screen/settings/register. Use this to create a hierarchical and logical grouping of screen views in the Matomo web interface.

matomoTracker.track(view: ["path","to","your","page"])

You can also set the url of the page.

let url = URL(string: "https://matomo.org/get-involved/")
matomoTracker.track(view: ["community","get-involved"], url: url)

Tracking Events

Events can be used to track user interactions such as taps on a button. An event consists of four parts:

  • Category
  • Action
  • Name (optional, recommended)
  • Value (optional)
matomoTracker.track(eventWithCategory: "player", action: "slide", name: "volume", value: 35.1)

This will log that the user slid the volume slider on the player to 35.1%.

Tracking search

The MatomoTracker can track how users use your app internal search. You can track what keywords were searched for, what categories they use, the number of results for a certain search and what searches resulted in no results.

matomoTracker.trackSearch(query: "Best mobile tracking", category: "Technology", resultCount: 15)

Custom Dimension

The Matomo SDK currently supports Custom Dimensions for the Visit Scope. Using Custom Dimensions you can add properties to the whole visit, such as "Did the user finish the tutorial?", "Is the user a paying user?" or "Which version of the Application is being used?" and such. Before sending custom dimensions please make sure Custom Dimensions are properly installed and configured. You will need the ID of your configured Dimension.

After that you can set a new Dimension,

matomoTracker.set(value: "1.0.0-beta2", forIndex: 1)

or remove an already set dimension.

matomoTracker.remove(dimensionAtIndex: 1)

Dimensions in the Visit Scope will be sent along every Page View or Event. Custom Dimensions are not persisted by the SDK and have to be re-configured upon application startup.

Custom User ID

To add a custom User ID, simply set the value you'd like to use on the userId field of the tracker:

matomoTracker.userId = "coolUsername123"

All future events being tracked by the SDK will be associated with this userID, as opposed to the default UUID created for each Visitor.

Custom Visitor ID persisted on app starts

MatomoTracker will generate an _id upon first usage and will use this value to recognize the current visitor. This _id is persisted over app starts.

If you want to set your own visitor id, you can set your own visitor id with the forcedVisitorId field. Make sure you use a 16 character long hexadecimal string. The forcedVisitorId is persisted over app starts.

matomoTracker.forcedVisitorId = "0123456789abcdef"

Because the SDK persists this visitor id on app start, then we recommend to ask users for consent before tracking your app users.

Campaign Tracking

The Matomo iOS SDK supports campaign tracking.

matomoTracker.trackCampaign(name: "campaign_name", keyword: "campaign_keyword")

Content Tracking

The Matomo iOS SDK supports content tracking.

matomoTracker.trackContentImpression(name: "preview-liveaboard", piece: "Malaysia", target: "https://dummy.matomo.org/liveaboard/malaysia")
matomoTracker.trackContentInteraction(name: "preview-liveaboard", interaction: "tap", piece: "Malaysia", target: "https://dummy.matomo.org/liveaboard/malaysia")

Goal Tracking

The Matomo iOS SDK supports goal tracking.

matomoTracker.trackGoal(id: 1, revenue: 99.99)

Order Tracking

The Matomo iOS SDK supports order tracking.

let items = [
  OrderItem(sku: "product_sku_1", name: "iPhone Xs", category: "phone", price: 999.99, quantity: 1),
  OrderItem(sku: "product_sku_2", name: "iPhone Xs Max", category: "phone", price: 1199.99, quantity: 1)
]

matomoTracker.trackOrder(id: "order_id_1234", items: items, revenue: 2199.98, subTotal: 2000, tax: 190.98, shippingCost: 9)

Advanced Usage

Manual dispatching

The MatomoTracker will dispatch events every 30 seconds automatically. If you want to dispatch events manually, you can use the dispatch() function.

Session Management

The MatomoTracker starts a new session whenever the application starts. If you want to start a new session manually, you can use the startNewSession() function. You can, for example, start a new session whenever the user enters the application.

func applicationWillEnterForeground(_ application: UIApplication) {
  matomoTracker.startNewSession()
}

Logging

The MatomoTracker per default logs warning and error messages to the console. You can change the LogLevel.

matomoTracker.logger = DefaultLogger(minLevel: .verbose)
matomoTracker.logger = DefaultLogger(minLevel: .debug)
matomoTracker.logger = DefaultLogger(minLevel: .info)
matomoTracker.logger = DefaultLogger(minLevel: .warning)
matomoTracker.logger = DefaultLogger(minLevel: .error)

You can also write your own Logger and send the logs wherever you want. Just write a new class/struct and let it conform to the Logger protocol.

Custom User Agent

The MatomoTracker will create a default user agent derived from the WKWebView user agent. You can instantiate the MatomoTracker using your own user agent.

let matomoTracker = MatomoTracker(siteId: "5", baseURL: URL(string: "http://your.server.org/path-to-matomo/piwik.php")!, userAgent: "Your custom user agent")

Sending custom events

Instead of using the convenience functions for events and screen views for example you can create your event manually and even send custom tracking parameters. This feature isn't available from Objective-C.

func sendCustomEvent() {
  guard let matomoTracker = MatomoTracker.shared else { return }
  let downloadURL = URL(string: "https://builds.matomo.org/piwik.zip")!
  let event = Event(tracker: matomoTracker, action: ["menu", "custom tracking parameters"], url: downloadURL, customTrackingParameters: ["download": downloadURL.absoluteString])
  matomoTracker.track(event)
}

All custom events will be URL-encoded and dispatched along with the default Event parameters. Please read the Tracking API Documentation for more information on which parameters can be used.

Also: You cannot override Custom Parameter keys that are already defined by the Event itself. If you set those keys in the customTrackingParameters they will be discarded.

Automatic url generation

You can define the url property on every Event. If none is defined, the SDK will try to generate a url based on the contentBase of the MatomoTracker. If the contentBase is nil, no url will be generated. If the contentBase is set, it will append the actions of the event to it and use it as the url. Per default the contentBase is generated using the application bundle identifier. For example http://org.matomo.skd. This will not result in resolvable urls, but enables the backend to analyse and structure them.

Event dispatching

Whenever you track an event or a page view it is stored in memory first. In every dispatch run a batch of those events are sent to the server. If the device is offline or the server doesn't respond these events will be kept and resent at a later time. Events currently aren't stored on disk and will be lost if the application is terminated. #137

Contributing

Please read CONTRIBUTING.md for details.

ToDo

These features aren't implemented yet

  • Tracking of more things
    • Social Interactions
    • Goals and Conversions
    • Outlinks
    • Downloads
  • Customizing the tracker
    • use different dispatchers (Alamofire)

License

MatomoTracker is available under the MIT license.

Comments
  • Device information and operating system not being tracked

    Device information and operating system not being tracked

    I just migrated from 5.x to 7.2 of MatomoTracker and now all device information and the operating system are not tracked anymore. Am I missing any important code changes? Because I did not change any of my code.

    bug 
    opened by ThomasGoehringer 25
  • Crash with 4.3.0 version

    Crash with 4.3.0 version

    Hi guys,

    I upgrade piwik-sdk-ios to 4.3.0 in our new version and public to external beta testing. But I got two new kinds of crash reports from beta users. Here is the crash 1 and crash 2 Looks like it occurred when the SDK dispatch to send request.

    Any idea?

    BTW, I will upgrade sdk to 4.4.0 in the new beta build.

    bug 
    opened by luohui8891 17
  • cpu used is greater than 90%

    cpu used is greater than 90%

    hello,When the app is I use this, very high CPU。Especially hot lead to equipment。

    This thing when I commented code, this phenomenon is gone. ex: //PiwikTracker // [PiwikTracker sharedInstanceWithSiteID:PiwikProductionSiteId baseURL:[NSURL URLWithString:PiwikProductionServerURL]]; // [PiwikTracker sharedInstance].includeDefaultCustomVariable = NO; // [PiwikTracker sharedInstance].dispatchInterval = 5;

    bug 
    opened by meoliver 17
  • Event tracking: remove

    Event tracking: remove "example.com" url.

    Hi!

    I would like use the event tracking but have a problem.

    We can see the events on the dashboard but we would like remove the "example.com" url from actions. As I have seen it has been hard coded into source code.

    event_tracking_problem

    Could you please provide a possibility to change this url?

    Thanks.

    opened by ferenclakos 15
  • Device Model Name

    Device Model Name

    Hello, We are experience an issue where I am seeing seeing few model being reported as "Apple - iPhone" & "Apple - iPAD" instead of the device exact name.

    information needed 
    opened by goelay 14
  • Adds `cdt` parameter to tracking query items

    Adds `cdt` parameter to tracking query items

    Because of ✨reasons✨, the h/m/s values don't seem to be used in calculating "time on page" in the backend, but cdt does.

    This PR attaches cdt to the tracking events in addition to the existing h/m/s values.

    According to this issue, cdt will be used to calculate the "time on page" correctly for the clients, regardless of when they're sent to the server

    ~According to these docs, the format is yyyy-MM-dd HH:mm:ss (i.e. 2011-04-05 00:11:42) - not quite ISO-8601, but close (although we could use a unix timestamp? They're always a little harder to grok for human eyes though). However (and this is an implementation detail, so probably best to ignore or update docs), the server uses unix timestamp internally, and processes it via strtotime(), so we could use a formal ISO 8601 date string here if we'd prefer.~ ➡️ Using ISO 8601 format since 2feaae1


    Resolves #299

    opened by notjosh 14
  • Added back real device model in user agent feature

    Added back real device model in user agent feature

    There was a feature replacing generic string in the user agent with the real device model (#253), which was removed in WKWebView migration (#308). It would be great to have it back if possible :)

    opened by hcbarry 13
  • Add multiple custom variables to an event

    Add multiple custom variables to an event

    I've the requirement to add multiple variables for each single event, not in the global tracker instance parameters. I've tried with customTrackingParameter but it doesn't show up in our Matomo event tracker web.

    opened by danielceinos 13
  • Adding the option to customize the cid of the visitor

    Adding the option to customize the cid of the visitor

    As @mplackowski asked in #258:

    It would be great to have both parameters in the sdk. I mean the ("cid" and "uid" keys following this documentation: https://developer.matomo.org/api-reference/tracking-api) In my usecase I need to setup visitorId ("cid" key ) manually after user converts from mobile website to the app.

    I'm using branch deeplinks with custom parameters and one of them is the pk_vid from the website. This way it is possible to track users switching from website to the app in a single visit (assuming that the same tracker is used on website and in the app).

    Being able to see user flow as a whole is a great feature, since the mobile website in many cases is the real starting point in the conversion funnel.

    opened by brototyp 13
  • Manually generated UserAgent

    Manually generated UserAgent

    I think we need to rethink our UserAgent generation. Right now the SDK asks the WebView to generate the UserAgent and will then replace iPhone with the actual iPhone version. There are just to many issues with it:

    • WebKit as a dependency
    • Asynchronous code: There is no synchronous way to let a WKWebView generate the UserAgent
    • When the format of the UserAgent returned by WkWebView changes our code might break (I guess that's what is happening here)

    This PR changes this and completely manually generates the UserAgent. The new, generated format is iOSExampleApp/1.0 iPhone10,4 iOS/13.3 MatomoTrackerIOSSDK/7.2.2 Darwin/18.7.0.

    • iOSExampleApp/1.0 display name and marketing version of the app
    • iPhone10,4 device identifier
    • iOS/13.3 iOS Version
    • MatomoTrackerIOSSDK/7.2.2 Matomo SKD version
    • Darwin/18.7.0 Darwin version

    According to the test website by @Findus23, Matomo parses this format perfectly well: have a look

    opened by brototyp 12
  • Can I use customTrackingParameters to override the default cdt time format?

    Can I use customTrackingParameters to override the default cdt time format?

    Hi, I would like to ask if I can pass a cdt in customTrackingParameters to override the default cdt value (ISO8601) value of the tracker? I would want to override it because I want it to be in unix timestamp (13 digits).

    question 
    opened by Isaacwhyuenac 11
  • Reset Session and IDs

    Reset Session and IDs

    Currently there seems to be no way to reset session information (sessionsCount, firstVisit, ...) as well as the visitor id. I would propose some functionality that enables deleting all stored data in the user defaults for a given MatomoTracker instance that keeps the instance usable and in correct state afterwards.

    One use case for this is binding the session information to a user and not to the device. E.g. calling reset after user-logout and not keeping the session count etc.

    Happy to supply PR with the proposed feature.

    opened by t-unit 0
  • Update # FAQ Links

    Update # FAQ Links

    A recent knowledge base update has changed how FAQ links work on matomo.org

    Links with # in the link no longer work for guides or FAQs

    I wasn't 100% certain where this link used to go: https://matomo.org/docs/ecommerce-analytics/#tracking-ecommerce-orders-items-purchased-required So for these I've updated it to point here: https://matomo.org/faq/reports/advanced-manually-tracking-ecommerce-actions-in-matomo/#tracking-orders-to-matomo-required

    opened by Starker3 0
  • Custom header injection as a part of MatomoTracker initialization

    Custom header injection as a part of MatomoTracker initialization

    Our app requires all requests to be proxied, including the tracker requests; the proxy endpoint requires custom headers. Because tracking requests are built in URLSessionDispatcher, we created a custom dispatcher class, sent as a part of MatomoTracker initialization. The public send method in URLSessionDispatcher requires Event, which in turn requires Visitor and Session, and the cascade continues. The various dependent class methods and properties are not marked public, resulting in the importing of many Matomo Swift package classes into the app code base. This makes the tracking functionality upgrade-fragile. Thus, the need to inject custom headers to the proxied tracking request resulted in the need to create a custom Dispatcher implementation and the import of number of native Matomo Swift package classes.

    Proposal: update MatomoTracker.init() to accept an array headers that are ultimately added as a part of URLSessionDispatcher.buildRequest(). This assumes that the same header values would be required for all tracking requests, which is likely, since the baseURL is a constant. Alternatively, ease the burden of creating a custom Dispatcher implementation by marking dependent class methods and properties as public.

    I know, too, that I might be missing something obvious, and unnecessarily created a lot of work for myself. Wouldn't be the first time.

    enhancement 
    opened by wvezey 2
  • Matomo events are sent from iPad but don't appear on Dashboard

    Matomo events are sent from iPad but don't appear on Dashboard

    Please help!

    I configured MatomoTracker in an iPad app. Events are dispatched but I don't see it in Matomo Dashboard. It says "No data has been recorded yet, get set up below" for this site (siteId: 2). I'm using the latest version of Matomo and SDK.

    Initialization code: MatomoTracker(siteId: "2", baseURL: URL(string: "https://server-name/matomo/matomo.php")!)

    The baseUrl in a browser returns: "This resource is part of Matomo. Keep full control of your data with the leading free and open source web analytics & conversion optimisation platform. This file is the endpoint for the Matomo tracking API. If you want to access the Matomo UI or use the Reporting API, please use index.php instead."

    Here is Matomo log on the device: MatomoTracker [V] Queued event: Event(uuid: E223FF51-ADB1-4A0C-AC7B-34A909E21B9B, siteId: "2", visitor: MatomoTracker.Visitor(id: "03FEEFF8091A4C7B", forcedId: nil, userId: nil), session: MatomoTracker.Session(sessionsCount: 4, lastVisit: 2021-04-09 22:46:38 +0000, firstVisit: 2021-04-09 21:14:41 +0000), isCustomAction: false, date: 2021-04-09 22:47:47 +0000, url: Optional(http://xxxxx/color-picker), actionName: ["color-picker"], language: "ru-AT;q=1.0,en-AT;q=0.9", isNewSession: true, referer: nil, screenResolution: (1024.0, 768.0), customVariables: [], eventCategory: nil, eventAction: nil, eventName: nil, eventValue: nil, campaignName: nil, campaignKeyword: nil, searchQuery: nil, searchCategory: nil, searchResultsCount: nil, dimensions: [], customTrackingParameters: [:], contentName: nil, contentPiece: nil, contentTarget: nil, contentInteraction: nil, goalId: nil, revenue: nil, orderId: nil, orderItems: [], orderRevenue: nil, orderSubTotal: nil, orderTax: nil, orderShippingCost: nil, orderDiscount: nil, orderLastDate: nil) MatomoTracker [V] Queued event: Event(uuid: 650BEC9C-EBAE-4281-85C1-DAFC12E528C1, siteId: "2", visitor: MatomoTracker.Visitor(id: "03FEEFF8091A4C7B", forcedId: nil, userId: nil), session: MatomoTracker.Session(sessionsCount: 4, lastVisit: 2021-04-09 22:46:38 +0000, firstVisit: 2021-04-09 21:14:41 +0000), isCustomAction: true, date: 2021-04-09 22:47:47 +0000, url: Optional(http://xxxxx/selected-color), actionName: ["selected-color"], language: "ru-AT;q=1.0,en-AT;q=0.9", isNewSession: false, referer: nil, screenResolution: (1024.0, 768.0), customVariables: [], eventCategory: nil, eventAction: nil, eventName: nil, eventValue: nil, campaignName: nil, campaignKeyword: nil, searchQuery: nil, searchCategory: nil, searchResultsCount: nil, dimensions: [], customTrackingParameters: ["color": "#30BA8F", "color-is-default": "false"], contentName: nil, contentPiece: nil, contentTarget: nil, contentInteraction: nil, goalId: nil, revenue: nil, orderId: nil, orderItems: [], orderRevenue: nil, orderSubTotal: nil, orderTax: nil, orderShippingCost: nil, orderDiscount: nil, orderLastDate: nil) MatomoTracker [I] Start dispatching events MatomoTracker [I] Dispatched batch of 2 events. MatomoTracker [I] Finished dispatching events MatomoTracker [I] No need to dispatch. Dispatch queue is empty. MatomoTracker [I] No need to dispatch. Dispatch queue is empty.

    Log on the server says: DEBUG Piwik\Plugin\Manager[2021-04-10 10:56:29 UTC] [ec4d1] Loaded plugins: CorePluginsAdmin, CoreAdminHome, CoreHome, WebsiteMeasurable, IntranetMeasurable, Diagnostics, CoreVisualizations, Proxy, API, Widgetize, Transitions, LanguagesManager, Actions, Dashboard, MultiSites, Referrers, UserLanguage, DevicesDetection, Goals, Ecommerce, SEO, Events, UserCountry, GeoIp2, VisitsSummary, VisitFrequency, VisitTime, VisitorInterest, RssWidget, Feedback, Monolog, Login, TwoFactorAuth, UsersManager, SitesManager, Installation, CoreUpdater, CoreConsole, ScheduledReports, UserCountryMap, Live, PrivacyManager, ImageGraph, Annotations, MobileMessaging, Overlay, SegmentEditor, Insights, Morpheus, Contents, BulkTracking, Resolution, DevicePlugins, Heartbeat, Intl, Marketplace, ProfessionalServices, UserId, CustomJsTracker, Tour, PagePerformance, CustomDimensions DEBUG Piwik\Tracker[2021-04-10 10:56:30 UTC] [45773] Debug enabled - Input parameters: array ( DEBUG Piwik\Tracker[2021-04-10 10:56:30 UTC] [45773] ) DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] General tracker cache was re-created. DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Current datetime: 2021-04-10 10:54:57 DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Website 2 tracker cache was re-created. DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\CoreHome\Tracker\VisitRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\IntranetMeasurable\Tracker\RequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\Actions\Tracker\ActionsRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\Goals\Tracker\GoalsRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\Ecommerce\Tracker\EcommerceRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\SitesManager\Tracker\SitesManagerRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\PrivacyManager\Tracker\RequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\Heartbeat\Tracker\PingRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\PagePerformance\Tracker\PerformanceDataProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\CustomDimensions\Tracker\CustomDimensionsRequestProcessor::manipulateRequest()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\CoreHome\Tracker\VisitRequestProcessor::processRequestParams()... DEBUG PrivacyManager[2021-04-10 10:56:30 UTC] [45773] DoNotTrack header not found DEBUG CoreHome[2021-04-10 10:56:30 UTC] [45773] Matching visitors with: visitorId=03feeff8091a4c7b OR configId=ff3dc96d1117e73e DEBUG CoreHome[2021-04-10 10:56:30 UTC] [45773] The visitor was not matched with an existing visitor... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\IntranetMeasurable\Tracker\RequestProcessor::processRequestParams()... DEBUG BulkTracking[2021-04-10 10:56:30 UTC] [45773] Executing Piwik\Plugins\Actions\Tracker\ActionsRequestProcessor::processRequestParams()... DEBUG Actions[2021-04-10 10:56:30 UTC] [45773] Internal 'Site Search' tracking is not enabled for this site. DEBUG Piwik\Tracker[2021-04-10 10:56:30 UTC] [45773] Tracker encountered an exception: {ex} ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] Exception: /home/tracker3/public_html/matomo/core/Tracker/Action.php(114): Request was meant for a plugin which is no longer activated. Request needs to be ignored. ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] Request was meant for a plugin which is no longer activated. Request needs to be ignored. ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #0 /home/tracker3/public_html/matomo/plugins/Actions/Tracker/ActionsRequestProcessor.php(51): Piwik\Tracker\Action::factory(Object(Piwik\Tracker\Request)) ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #1 /home/tracker3/public_html/matomo/core/Tracker/Visit.php(163): Piwik\Plugins\Actions\Tracker\ActionsRequestProcessor->processRequestParams(Object(Piwik\Tracker\Visit\VisitProperties), Object(Piwik\Tracker\Request)) ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #2 /home/tracker3/public_html/matomo/core/Tracker.php(160): Piwik\Tracker\Visit->handle() ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #3 /home/tracker3/public_html/matomo/plugins/BulkTracking/Tracker/Handler.php(58): Piwik\Tracker->trackRequest(Object(Piwik\Tracker\Request)) ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #4 /home/tracker3/public_html/matomo/core/Tracker.php(140): Piwik\Plugins\BulkTracking\Tracker\Handler->process(Object(Piwik\Tracker), Object(Piwik\Tracker\RequestSet)) ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #5 /home/tracker3/public_html/matomo/core/Tracker.php(115): Piwik\Tracker->track(Object(Piwik\Plugins\BulkTracking\Tracker\Handler), Object(Piwik\Tracker\RequestSet)) ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #6 /home/tracker3/public_html/matomo/piwik.php(73): Piwik\Tracker->main(Object(Piwik\Plugins\BulkTracking\Tracker\Handler), Object(Piwik\Tracker\RequestSet)) ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #7 /home/tracker3/public_html/matomo/matomo.php(13): include('/home/tracker3/...') ERROR BulkTracking[2021-04-10 10:56:30 UTC] [45773] #8 {main} DEBUG Piwik\Tracker[2021-04-10 10:57:01 UTC] [fb404] Debug enabled - Input parameters: array ( DEBUG Piwik\Tracker[2021-04-10 10:57:01 UTC] [fb404] )

    documentation 
    opened by serbuk 5
Releases(v7.5.2)
  • v7.5.2(Jul 25, 2022)

  • v7.5.1(Jan 8, 2022)

  • v7.5(Oct 3, 2021)

    • improvement Allow overriding any of the tracking parameters. #360
    • improvement Fixed build warnings
    • improvement Use the new XCode build system #391
    • bugfix Fixed issue where only UserDefaults.standard is used despite specified another instance. #384
    Source code(tar.gz)
    Source code(zip)
  • v7.4(Jan 3, 2021)

    • improvement Escaped more symbols when sending events to the API. #313
    • improvement Removed unused humanReadablePlatformName Device property. #358
    • improvement Changed the cdt parameter to be accurate to milliseconds. #360
    • improvement Changed sending the ca parameter only for events that are no further specified. #363
    • bugfix Fixed macOS version recognition. #361
    Source code(tar.gz)
    Source code(zip)
  • v7.3(Jan 3, 2021)

    • improvement Support new ca tracking parameter for tracking requests that aren't page views. #354
    • improvement Completely overhauled the UserAgent generation for automatic device and OS discovery. #353
    Source code(tar.gz)
    Source code(zip)
  • v7.2.2(Sep 19, 2020)

  • v7.2.1(Jun 1, 2020)

    • improvement Added back detailed phone model feature. #330
    • improvement Set application extension API only to true. #335
    • bugfix Fixed an issue where device information and operating system sometimes wasn't tracked. #329
    Source code(tar.gz)
    Source code(zip)
  • v7.2.0(Nov 6, 2019)

    • feature Added support for the Swift Package Manager. #312
    • improvement Added new devices info #321
    • improvement Added timeout property to URLSessionDispatcher initialization method
    • bugfix Fixed an issue with WKWebView on iOS not returning a user agent string #322
    • bugfix Fixed a retain cycle on MatomoTracker. #316
    Source code(tar.gz)
    Source code(zip)
  • v7.0.1(Sep 18, 2019)

  • v7.0.0(Sep 3, 2019)

    • important Dropped support for iOS 8 and 9. #306
    • improvement Updated to Swift 5.0 and Xcode 10.3 tools version. #306
    • improvement Added cdt query item in addition to h/m/s values #301
    • improvement Replaced UIWebView with WkWebView. #308
    Source code(tar.gz)
    Source code(zip)
  • v6.0.1(May 23, 2019)

    • improvement Made copyFromOldSharedInstance available from Objective-C. [#282] (https://github.com/matomo-org/matomo-sdk-ios/issues/282)
    • improvement Accepting urls ending in matomo.php in addition to piwik.php when initializing a new instance. [#286] (https://github.com/matomo-org/matomo-sdk-ios/pull/286)
    • bugfix Specified Swift 4.2 in both .podspec files. [#297] (https://github.com/matomo-org/matomo-sdk-ios/pull/297)
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0(Dec 12, 2018)

  • v5.3.0(Oct 8, 2018)

    • feature Added a forcedVisitorId property. #259
    • feature Added a method for goal tracking #272
    • feature Added a function to track E-Commerce orders. #110
    • improvement Added public init to CustomVariable #269
    • improvement Renamed the visitorId property to userId to be more inline with the Documentation. #258
    • bugfix Fixed an issue where trackSearch called from Objective-C would end in an infinite loop. #263
    • bugfix Fixed an issue on Objective-C project where swift version was't set. #260
    Source code(tar.gz)
    Source code(zip)
  • v5.2.0(Jun 22, 2018)

  • v5.1.1(Jun 22, 2018)

  • v5.1.0(Apr 29, 2018)

  • v5.0.0-beta1(Jan 30, 2018)

    • feature It now is possible to use multiple MatomoTracker instances within one appliaction. Please check this guide how to migrate from the shared instance in version 4. #164
    • feature Added compatibility to custom variables. #223 (by @manuroe and @zantoku)
    • improvement Renamed Piwik to Matomo #221
    Source code(tar.gz)
    Source code(zip)
  • v4.4.2(Jan 30, 2018)

  • v4.4.1(Jan 4, 2018)

  • v4.4.0(Nov 18, 2017)

    • feature Added a way to add custom dimension in the action scope. #111
    • feature Added automatic generation of the url property. #197
    • improvement The PiwikTracker is now save to create in a background thread. #175
    • improvement The Logger is now objc compatible. #185
    • improvement Default example.com urls aren't generated anymore. #194
    • improvement The Device and Applications structs are now public. #191
    Source code(tar.gz)
    Source code(zip)
  • v4.3.0(Oct 9, 2017)

    • feature Added the ability to send custom events with custom tracking parameters. #153
    • bugfix Fixed a crash when initializing a new tracker. #162
    • bugfix Removed old, unused AFNetworking Submodule to fix Carthage usage. #190
    Source code(tar.gz)
    Source code(zip)
  • v4.2.0(Oct 2, 2017)

    • feature Added ability to customize user agent. #168
    • feature Added ability to customize User ID. #180 (by @niksawtschuk)
    • feature Added Carthage support #74 (by @elitalon)
    • feature Added a way to set a custom visitor ID #180 (by @niksawtschuk)
    • improvement Added Swift support
    Source code(tar.gz)
    Source code(zip)
  • v4.1.0(Jul 23, 2017)

    • feature Added Custom Dimension Tracking for the Visit Scope. #111
    • feature Transmitting the Screen resolution to the Piwik Backend. #149 (by @akshaykolte)
    • feature Added a Logger that can log messages in different levels. #147
    • feature Added macOS and tvOS compatibility. #134
    • bugfix Fixed a bug, where the tracker would stop automatic dispatching. #167
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Jul 23, 2017)

  • v4.0.0-beta2(Jul 23, 2017)

    • feature Added the possibility to set the url for a sreen view event. #92
    • feature Added the functionality to start new sessions. #136
    • fixed The value of an event got wronly encoded when dispatching. #140
    • fixed Fixed an issue where tracking an event wasn’t possible from Objective-C code. #142
    Source code(tar.gz)
    Source code(zip)
  • v4.0.0-beta1(Jul 23, 2017)

    • feature Started rewrite in Swift
    • feature Tracking Screen Views
    • feature Tracking Events
    • feature URLSessionDispatcher
    • feature Non persistent Event Queue
    Source code(tar.gz)
    Source code(zip)
Owner
Matomo Analytics
Our mission is « To create, as a community, the leading open digital analytics platform, that gives every user full control of their data. »
Matomo Analytics
The hassle-free way to integrate analytics into any iOS application.

Developer Feedback Requested: Analytics-Swift Pilot A pilot release of the new Analytics-Swift library is available at the Analytics-Swift repository.

Segment 383 Dec 14, 2022
Versions tracker for your iOS, macOS, and tvOS app

VersionTrackerSwift VersionTrackerSwift is a versions / builds tracker to know which version has been installed by a user. Usage In your ApplicationDe

Tom Baranes 82 Oct 5, 2022
Versions tracker for your iOS, macOS, and tvOS app

VersionTrackerSwift VersionTrackerSwift is a versions / builds tracker to know which version has been installed by a user. Usage In your ApplicationDe

Tom Baranes 82 Oct 5, 2022
Google Analytics tracker for Apple tvOS provides an easy integration of Google Analytics’ measurement protocol for Apple TV.

Google Analytics tracker for Apple tvOS by Adswerve About Google Analytics tracker for Apple tvOS provides an easy integration of Google Analytics’ me

Adswerve 81 Nov 13, 2022
The Waterwheel Swift SDK provides classes to natively connect iOS, macOS, tvOS, and watchOS applications to Drupal 7 and 8.

Waterwheel Swift SDK for Drupal Waterwheel makes using Drupal as a backend with iOS, macOS, tvOS, or watchOS enjoyable by combining the most used feat

Kyle Browning 414 Jul 26, 2022
A simple to use iOS/tvOS/watchOS SDK to help get you off the ground quickly and efficiently with your Elastic Path Commerce Cloud written in Swift.

Elastic Path Commerce Cloud iOS Swift SDK A simple to use iOS/tvOS/watchOS SDK to help get you off the ground quickly and efficiently with your Elasti

Moltin 36 Aug 1, 2022
Tracker - A simple location logger app written in Swift and MVVM architecture

Tracker - A simple location logger app written in Swift and MVVM architecture

Loay Ashraf 1 Mar 12, 2022
An iOS expense tracker app written in Swift

An iOS expense tracker app written in Swift

Alex Ling 35 Aug 14, 2022
Coronavirus tracker app for iOS & macOS with maps & charts

Features Live data: Shows the most recent data, and updates automatically. Distribution map with two levels of details: Countries: When the user zooms

Mhd Hejazi 1.5k Dec 28, 2022
CryptoTrackerMenuBar - A Realtime Crypto Tracker macOS Menu Bar App built with SwiftUI & WebSocket

Realtime Crypto Tracker macOS Menu Bar App - SwiftUI & WebSocket A Realtime Cryp

Alfian Losari 21 Dec 15, 2022
Aplikasi CrypTraces adalah MacOS Widget Crypto Tracker dengan SwiftUI, Combine & Cocoa Framework, dan WebSocket & CoinCap API

Aplikasi CrypTraces adalah MacOS Widget Crypto Tracker dengan SwiftUI, Combine & Cocoa Framework, dan WebSocket & CoinCap API. Aplikasi ini berbentuk Widget di Menu Bar MacOS dengan menampilkan beberapa Crypto Currency seperti Bitcoin (BTC), Ethereum (ETH), Dogecoin (DOGE), Monero (XMR), dan Litecoin (LTC).

DK 6 Aug 1, 2022
An alternative gym workouts tracker written in SwiftUI.

Gymspot Gymspot is an alternative workout tracker written in SwiftUI. I decided to start working on it because: I need an easy-to-use tracker for my w

Alessio Moiso 3 Nov 22, 2022
Alter SDK is a cross-platform SDK consisting of a real-time 3D avatar system, facial motion capture, and an Avatar Designer component built from scratch for web3 interoperability and the open metaverse.

Alter SDK is a cross-platform SDK consisting of a real-time 3D avatar system, facial motion capture, and an Avatar Designer component built from scratch for web3 interoperability and the open metaverse.

Alter 45 Nov 29, 2022
Cachyr A typesafe key-value data cache for iOS, macOS, tvOS and watchOS written in Swift.

Cachyr A typesafe key-value data cache for iOS, macOS, tvOS and watchOS written in Swift. There already exists plenty of cache solutions, so why creat

Norsk rikskringkasting (NRK) 124 Nov 24, 2022
SwiftMoment - A time and calendar manipulation library for iOS 9+, macOS 10.11+, tvOS 9+, watchOS 2+ written in Swift 4.

SwiftMoment This framework is inspired by Moment.js. Its objectives are the following: Simplify the manipulation and readability of date and interval

Adrian Kosmaczewski 1.6k Dec 31, 2022
An image download extension of the image view written in Swift for iOS, tvOS and macOS.

Moa, an image downloader written in Swift for iOS, tvOS and macOS Moa is an image download library written in Swift. It allows to download and show an

Evgenii Neumerzhitckii 330 Sep 9, 2022
Timekeeper is an easy-to-use time measurement library written in Swift, with support for iOS, tvOS, watchOS and macOS.

Timekeeper is an easy-to-use time measurement library written in Swift, with support for iOS, tvOS, watchOS and macOS. Installation Timekee

Andreas Pfurtscheller 1 Oct 18, 2021
A sound fader for AVAudioPlayer written in Swift for iOS, tvOS and macOS.

Cephalopod, a sound fader for AvAudioPlayer written in Swift - iOS, tvOS and macOS This library can help fading sounds in and out with AvAudioPlayer.

Evgenii Neumerzhitckii 109 Dec 16, 2022
A spatial analysis library written in Swift for native iOS, macOS, tvOS, watchOS, and Linux applications, ported from Turf.js.

Turf for Swift ?? ?? ?? ?? ⌚️ A spatial analysis library written in Swift for native iOS, macOS, tvOS, watchOS, and Linux applications, ported from Tu

Mapbox 187 Dec 19, 2022
Px-mobile-sdk-demo-app - PerimeterX Mobile SDK - Demo App

About PerimeterX PerimeterX is the leading provider of application security solu

PerimeterX 1 Nov 20, 2022