From 82fb34e0ae5965cff3fb5dc93062c7dcea5031f9 Mon Sep 17 00:00:00 2001 From: Arthur Rosa Date: Sat, 12 Mar 2022 11:24:19 -0800 Subject: [PATCH 1/2] Handling Twitter tracking parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Twitter uses really generic "s" and "t" parameters. They're really annoying. I've used a naïve way to remove them that doesn't break other sites that use those parameters for other things. The app should only remove them if the URL is a twitter link, otherwise leave them alone. --- TrackerZapper/AppDelegate.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/TrackerZapper/AppDelegate.swift b/TrackerZapper/AppDelegate.swift index e821920..9b07cdd 100644 --- a/TrackerZapper/AppDelegate.swift +++ b/TrackerZapper/AppDelegate.swift @@ -159,7 +159,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { // prefixes from various places including // https://github.com/newhouse/url-tracking-stripper/blob/master/assets/js/trackers.js - let REMOVE = [ + var REMOVE = [ "_bta_c", "_bta_tid", "_ga", @@ -208,6 +208,19 @@ class AppDelegate: NSObject, NSApplicationDelegate { "utm_", "vero_", ] + + // Prefixes for Twitter + let twitterParams = [ + "s", + "t" + ] + + // Twitter uses extremely generic "s" and "t" params in its tracker links, + // so only adding them if it's a twitter link to not break other sites + if (item.contains("twitter.com")) + { + REMOVE.append(contentsOf: twitterParams) + } var formatted = item From 77222297fad3b0a98b0ac3f2e774f1c2d2a70767 Mon Sep 17 00:00:00 2001 From: Arthur Rosa Date: Sun, 13 Mar 2022 13:48:58 -0700 Subject: [PATCH 2/2] =?UTF-8?q?Handling=20special=20website=20cases=20in?= =?UTF-8?q?=20a=20less=20na=C3=AFve=20way?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Moved website tracker param config into a separate class. This allows each tracker param to be scoped to an individual website if desired. Added support for Amazon trackers and Spotify trackers as well. --- TrackerZapper.xcodeproj/project.pbxproj | 2 +- TrackerZapper/AppDelegate.swift | 71 ++------------------ TrackerZapper/TrackerURLParameters.swift | 83 ++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 68 deletions(-) create mode 100644 TrackerZapper/TrackerURLParameters.swift diff --git a/TrackerZapper.xcodeproj/project.pbxproj b/TrackerZapper.xcodeproj/project.pbxproj index 3d86171..4dac79b 100644 --- a/TrackerZapper.xcodeproj/project.pbxproj +++ b/TrackerZapper.xcodeproj/project.pbxproj @@ -368,7 +368,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.2.2; PRODUCT_BUNDLE_IDENTIFIER = com.rknightuk.TrackerZapper; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; diff --git a/TrackerZapper/AppDelegate.swift b/TrackerZapper/AppDelegate.swift index 9b07cdd..20bcfbc 100644 --- a/TrackerZapper/AppDelegate.swift +++ b/TrackerZapper/AppDelegate.swift @@ -157,71 +157,6 @@ class AppDelegate: NSObject, NSApplicationDelegate { let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) let matches = detector.matches(in: item, options: [], range: NSRange(location: 0, length: item.utf16.count)) - // prefixes from various places including - // https://github.com/newhouse/url-tracking-stripper/blob/master/assets/js/trackers.js - var REMOVE = [ - "_bta_c", - "_bta_tid", - "_ga", - "_hsenc", - "_hsmi", - "_ke", - "_openstat", - "cid", - "dm_i", - "ef_id", - "epik", - "fbclid", - "gclid", - "gclsrc", - "gdffi", - "gdfms", - "gdftrk", - "hsa_", - "igshid", - "matomo_", - "mc_", - "mkwid", - "msclkid", - "mtm_", - "ns_", - "oly_anon_id", - "oly_enc_id", - "otc", - "pcrid", - "piwik_", - "pk_", - "rb_clickid", - "redirect_log_mongo_id", - "redirect_mongo_id", - "ref", - "s_kwcid", - "sb_referer_host", - "scrolla", - "soc_src", - "soc_trk", - "spm", - "sr_", - "srcid", - "stm_", - "trk_", - "utm_", - "vero_", - ] - - // Prefixes for Twitter - let twitterParams = [ - "s", - "t" - ] - - // Twitter uses extremely generic "s" and "t" params in its tracker links, - // so only adding them if it's a twitter link to not break other sites - if (item.contains("twitter.com")) - { - REMOVE.append(contentsOf: twitterParams) - } - var formatted = item for match in matches { @@ -231,8 +166,10 @@ class AppDelegate: NSObject, NSApplicationDelegate { if (urlParts.indices.contains(1)) { var params = urlParts[1].components(separatedBy: "&") - for r in REMOVE { - params = params.filter { !$0.starts(with: r)} + for r in paramsToRemove { + if (url.contains(r.website)) { + params = params.filter { !$0.starts(with: r.parameterPrefix) } + } } let joinedParams = params.joined(separator: "&") diff --git a/TrackerZapper/TrackerURLParameters.swift b/TrackerZapper/TrackerURLParameters.swift new file mode 100644 index 0000000..fabcbc3 --- /dev/null +++ b/TrackerZapper/TrackerURLParameters.swift @@ -0,0 +1,83 @@ +// +// TrackerURLParameters.swift +// TrackerZapper +// +// Created by Arthur Lockman on 3/13/22. +// + +import Foundation + +class TrackerParameter { + var website: String = "" + var parameterPrefix: String + + init(parameterPrefix: String, website: String) + { + self.website = website + self.parameterPrefix = parameterPrefix + } + + init(parameterPrefix: String) + { + self.website = "" + self.parameterPrefix = parameterPrefix + } +} + +// prefixes from various places including +// https://github.com/newhouse/url-tracking-stripper/blob/master/assets/js/trackers.js +let paramsToRemove = [ + TrackerParameter(parameterPrefix: "_bta_c"), + TrackerParameter(parameterPrefix: "_bta_tid"), + TrackerParameter(parameterPrefix: "_ga"), + TrackerParameter(parameterPrefix: "_hsenc"), + TrackerParameter(parameterPrefix: "_hsmi"), + TrackerParameter(parameterPrefix: "_ke"), + TrackerParameter(parameterPrefix: "_openstat"), + TrackerParameter(parameterPrefix: "cid"), + TrackerParameter(parameterPrefix: "dm_i"), + TrackerParameter(parameterPrefix: "ef_id"), + TrackerParameter(parameterPrefix: "epik"), + TrackerParameter(parameterPrefix: "fbclid"), + TrackerParameter(parameterPrefix: "gclid"), + TrackerParameter(parameterPrefix: "gclsrc"), + TrackerParameter(parameterPrefix: "gdffi"), + TrackerParameter(parameterPrefix: "gdfms"), + TrackerParameter(parameterPrefix: "gdftrk"), + TrackerParameter(parameterPrefix: "hsa_"), + TrackerParameter(parameterPrefix: "igshid"), + TrackerParameter(parameterPrefix: "matomo_"), + TrackerParameter(parameterPrefix: "mc_"), + TrackerParameter(parameterPrefix: "mkwid"), + TrackerParameter(parameterPrefix: "msclkid"), + TrackerParameter(parameterPrefix: "mtm_"), + TrackerParameter(parameterPrefix: "ns_"), + TrackerParameter(parameterPrefix: "oly_anon_id"), + TrackerParameter(parameterPrefix: "oly_enc_id"), + TrackerParameter(parameterPrefix: "otc"), + TrackerParameter(parameterPrefix: "pcrid"), + TrackerParameter(parameterPrefix: "piwik_"), + TrackerParameter(parameterPrefix: "pk_"), + TrackerParameter(parameterPrefix: "rb_clickid"), + TrackerParameter(parameterPrefix: "redirect_log_mongo_id"), + TrackerParameter(parameterPrefix: "redirect_mongo_id"), + TrackerParameter(parameterPrefix: "ref"), + TrackerParameter(parameterPrefix: "s_kwcid"), + TrackerParameter(parameterPrefix: "sb_referer_host"), + TrackerParameter(parameterPrefix: "scrolla"), + TrackerParameter(parameterPrefix: "soc_src"), + TrackerParameter(parameterPrefix: "soc_trk"), + TrackerParameter(parameterPrefix: "spm"), + TrackerParameter(parameterPrefix: "sr_"), + TrackerParameter(parameterPrefix: "srcid"), + TrackerParameter(parameterPrefix: "stm_"), + TrackerParameter(parameterPrefix: "trk_"), + TrackerParameter(parameterPrefix: "utm_"), + TrackerParameter(parameterPrefix: "vero_"), + TrackerParameter(parameterPrefix: "t", website: "twitter"), + TrackerParameter(parameterPrefix: "s", website: "twitter"), + TrackerParameter(parameterPrefix: "si", website: "spotify"), + TrackerParameter(parameterPrefix: "pd_", website: "amazon"), + TrackerParameter(parameterPrefix: "pf_", website: "amazon"), + TrackerParameter(parameterPrefix: "ref_", website: "amazon") +]