-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
change api #1133
change api #1133
Conversation
/// 1. Validates if the experiment is active. | ||
/// 2. Ensures the user is within the specified conversion window. | ||
/// 3. Tracks actions performed and sends the pixel once the target value is reached (if applicable). | ||
public static func fireExperimentPixelWhenReachingNumberOfCalls(for subfeatureID: SubfeatureID, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you have any better name suggestion do let me know!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could include "threshold" in the name, e.g:
fireExperimentPixelOnValueThreshold
or fireExperimentPixelfThresholdReached
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
~~Thanks for the quick progress on this @SabrinaTardio. Left a few comments and tested this with my branch. The changes allow us to send pixels when the value param has changed. However, the API now also allows us to send the same pixel when the value is unchanged. I believe we still need to track the pixel that was sent so that we can ensure we don't send repeat pixels. ~~
EDIT: Nevermind the above, missed the uniqueness being handled in pixelkit
// Define event | ||
let event = event(for: subfeatureID, experimentData: experimentData, conversionWindowDays: conversionWindowDays, metric: metric, value: value) | ||
|
||
// Send unique by name and parameter pixel if within conversion window | ||
let isInWindow = isUserInConversionWindow(conversionWindowDays, enrollmentDate: experimentData.enrollmentDate) | ||
if isInWindow { | ||
ExperimentConfig.fireFunction(event, .uniqueByNameAndParameters, false) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor: We could avoid the creation of the event and return early by moving the conversion window check up:
// Define event | |
let event = event(for: subfeatureID, experimentData: experimentData, conversionWindowDays: conversionWindowDays, metric: metric, value: value) | |
// Send unique by name and parameter pixel if within conversion window | |
let isInWindow = isUserInConversionWindow(conversionWindowDays, enrollmentDate: experimentData.enrollmentDate) | |
if isInWindow { | |
ExperimentConfig.fireFunction(event, .uniqueByNameAndParameters, false) | |
} | |
// Check if within conversion window | |
guard isUserInConversionWindow(conversionWindowDays, enrollmentDate: experimentData.enrollmentDate) else { return } | |
// Define event | |
let event = event(for: subfeatureID, experimentData: experimentData, conversionWindowDays: conversionWindowDays, metric: metric, value: value) | |
ExperimentConfig.fireFunction(event, .uniqueByNameAndParameters, false) |
/// 1. Validates if the experiment is active. | ||
/// 2. Ensures the user is within the specified conversion window. | ||
/// 3. Tracks actions performed and sends the pixel once the target value is reached (if applicable). | ||
public static func fireExperimentPixelWhenReachingNumberOfCalls(for subfeatureID: SubfeatureID, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could include "threshold" in the name, e.g:
fireExperimentPixelOnValueThreshold
or fireExperimentPixelfThresholdReached
@@ -82,7 +82,7 @@ extension PixelKit { | |||
/// This function: | |||
/// 1. Validates if the experiment is active. | |||
/// 2. Ensures the user is within the specified conversion window. | |||
/// 3. Tracks actions performed and sends the pixel once the target value is reached (if applicable). | |||
/// 3. Sends the pixel if not sent before (unique by name and parameter) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we not be storing the pixel that was sent in this method so that we can ensure pixels are unique? (i.e not sent again if they were sent before). When the value being sent is unchanged, this method fires the same pixel on subsequent calls.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nevermind the above, missed the uniqueness being handled in pixelkit
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @SabrinaTardio, works great! 🥳
* main: (24 commits) change api (#1133) Ensure authToken is present before calling refreshAuthTokenIfNeeded Add 'locale' to report broken site params Add 'locale' to report broken site params Ensure authToken is present before calling refreshAuthTokenIfNeeded Privacy Pro Free Trials - Models and API (#1120) remove MaliciousSiteProtectionSubfeature (#1131) Malware protection 6: Malware integration (#1099) Add underlying error to PrivacyStatsError (#1130) Initial changes for compilation time tracking. (#1111) iOS System level credential provider (#1127) Increase ratio of complete form saves (#1124) Add PrivacyStatsError.failedToClearPrivacyStats (#1128) Update autofill to 16.0.0 (#1122) Update local network routing (#1117) Update RMF version matching to ignore build number (#1118) Fix threading issue between using a Semaphore and async/await (#1115) add experiment test fake feature (#1119) Bump Tests/BrowserServicesKitTests/Resources/privacy-reference-tests from `a603ff9` to `6133e7d` (#1109) experiment default metrics pixels (#1107) ...
Please review the release process for BrowserServicesKit here.
Required:
Task/Issue URL: https://app.asana.com/0/1204186595873227/1208964427775425/f
iOS PR: duckduckgo/iOS#3732
macOS PR: duckduckgo/macos-browser#3670
What kind of version bump will this require?: Minor
Optional:
Tech Design URL:
CC:
Description: Changes the name of the original fireExperimentPixel func and adds a new function where the framework does not manages the counting
Steps to test this PR:
test use of new func
OS Testing:
Internal references:
Software Engineering Expectations
Technical Design Template