-
Notifications
You must be signed in to change notification settings - Fork 123
Add SetDefaultEventParameters and ClearDefaultEventParameters to Analytics C++ SDK. #1719
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
base: main
Are you sure you want to change the base?
Conversation
…ytics This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, Variant>& params)`: Allows setting default parameters that will be included in all subsequent `LogEvent` calls. If a `Variant::Null()` is provided as a value for a key, that specific default parameter will be cleared/removed. - `ClearDefaultEventParameters()`: Clears all currently set default event parameters. Platform implementations: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `Variant::Null()` maps to `[NSNull null]` for clearing individual parameters. Calling with `nil` clears all. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `Variant::Null()` results in `Bundle.putString(key, null)`. Calling with a `null` Bundle clears all. - Stub: Implemented as no-ops. Unit tests and integration tests have been updated to cover these new functionalities, including the null-value handling for clearing specific parameters and the overall clearing of all parameters.
✅ Integration test succeeded!Requested by @jonsimantov on commit f84caa0 |
…ytics This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, firebase::Variant>& params)`: Allows setting default parameters that will be included in all subsequent `LogEvent` calls. If a `firebase::Variant::Null()` is provided as a value for a key, that specific default parameter will be cleared/removed. - `ClearDefaultEventParameters()`: Clears all currently set default event parameters. Platform implementations: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `firebase::Variant::Null()` maps to `[NSNull null]` for clearing individual parameters. Calling with `nil` clears all. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `firebase::Variant::Null()` results in `Bundle.putString(key, null)`. Calling with a `null` Bundle clears all. - Stub: Implemented as no-ops. Unit tests and integration tests have been updated to cover these new functionalities, including the null-value handling for clearing specific parameters and the overall clearing of all parameters.
…ytics This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, firebase::Variant>& params)`: Allows setting default parameters that will be included in all subsequent `LogEvent` calls. If a `firebase::Variant::Null()` is provided as a value for a key, that specific default parameter will be cleared/removed. - `ClearDefaultEventParameters()`: Clears all currently set default event parameters. Platform implementations: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `firebase::Variant::Null()` maps to `[NSNull null]` for clearing individual parameters. Calling with `nil` clears all. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `firebase::Variant::Null()` results in `Bundle.putString(key, null)`. Calling with a `null` Bundle clears all. - Stub: Implemented as no-ops. Unit tests and integration tests have been updated to cover these new functionalities, including the null-value handling for clearing specific parameters and the overall clearing of all parameters. Integer literals in integration tests use standard int types.
…ytics This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, firebase::Variant>& params)`: Allows setting default parameters (string, int64, double, bool, null) that will be included in all subsequent `LogEvent` calls. If a `firebase::Variant::Null()` is provided for a key, that specific default parameter will be cleared. Aggregate types (maps, vectors) are not supported and will be skipped with an error logged. - `ClearDefaultEventParameters()`: Clears all currently set default event parameters. Platform implementations: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `firebase::Variant::Null()` maps to `[NSNull null]`. Unsupported types are skipped. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `firebase::Variant::Null()` results in `Bundle.putString(key, null)`. Unsupported types are skipped. `AddVariantToBundle` is used for efficiency with scalar types. - Stub: Implemented as no-ops. Unit tests and integration tests have been reviewed and updated to cover these functionalities and type constraints.
…meters` and `ClearDefaultEventParameters` to Analytics: This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, firebase::Variant>& params)`: This allows you to set default parameters (string, int64, double, bool, null) that will be included in all subsequent `LogEvent` calls. If a `firebase::Variant::Null()` is provided for a key, that specific default parameter will be cleared. Aggregate types (maps, vectors) are not supported and will be skipped with an error logged. - `ClearDefaultEventParameters()`: This clears all currently set default event parameters. Here's how it's handled on different platforms: - iOS: I'm using `[FIRAnalytics setDefaultEventParameters:]`. `firebase::Variant::Null()` maps to `[NSNull null]`. Unsupported types are skipped. - Android: I'm using `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `firebase::Variant::Null()` results in `Bundle.putString(key, null)`. Unsupported types are skipped. I'm using `AddVariantToBundle` for efficiency with scalar types. - Stub: These are implemented as no-ops. I've reviewed and updated the unit tests and integration tests to cover these functionalities and type constraints. I also applied code formatting using the project's script and updated and shortened the release notes in `release_build_files/readme.md`.
…meters` and `ClearDefaultEventParameters` to Analytics: This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, firebase::Variant>& params)`: This allows you to set default parameters (string, int64, double, bool, null) that will be included in all subsequent `LogEvent` calls. If a `firebase::Variant::Null()` is provided for a key, that specific default parameter will be cleared. Aggregate types (maps, vectors) are not supported and will be skipped with an error logged. - `ClearDefaultEventParameters()`: This clears all currently set default event parameters. Here's how it's handled on different platforms: - iOS: I'm using `[FIRAnalytics setDefaultEventParameters:]`. `firebase::Variant::Null()` maps to `[NSNull null]`. Unsupported types are skipped. - Android: I'm using `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `firebase::Variant::Null()` results in `Bundle.putString(key, null)`. Unsupported types are skipped. I'm using `AddVariantToBundle` for efficiency with scalar types. - Stub: These are implemented as no-ops. I've reviewed and updated the unit tests and integration tests to cover these functionalities and type constraints. I also applied code formatting using the project's script and updated and shortened the release notes in `release_build_files/readme.md`.
…faultEventParameters` to Analytics. This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, firebase::Variant>& params)`: This allows you to set default parameters (string, int64, double, bool, null) that will be included in all subsequent `LogEvent` calls. If a `firebase::Variant::Null()` is provided for a key, that specific default parameter will be cleared. Aggregate types (maps, vectors) are not supported and will be skipped with an error logged. - `ClearDefaultEventParameters()`: This clears all currently set default event parameters. Platform implementations: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `firebase::Variant::Null()` maps to `[NSNull null]`. Unsupported types are skipped. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `firebase::Variant::Null()` results in `Bundle.putString(key, null)`. Unsupported types are skipped. `AddVariantToBundle` is used for efficiency with scalar types. - Stub: Implemented as no-ops. I've reviewed and updated the unit tests and integration tests to cover these functionalities and type constraints. Namespace usage for `Variant` has been refined: - Public API (`analytics.h`) and integration tests use `firebase::Variant`. - Internal SDK implementation code uses unqualified `Variant` where appropriate, relying on the enclosing `firebase` namespace. I've also applied code formatting using the project's script and updated and shortened the release notes in `release_build_files/readme.md`.
pair.first.c_str(), Variant::TypeName(value.type())); | ||
} | ||
} | ||
[FIRAnalytics setDefaultEventParameters:ns_default_parameters]; |
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.
Double-check FIRAnalytics setDefaultEventParameters -- if we pass in an empty dictionary, will it clear the parameters? This could happen if every single value we specified was an invalid type.
@@ -142,7 +142,7 @@ struct Parameter { | |||
/// @param parameter_name Name of the parameter (see Parameter::name). | |||
/// @param parameter_value Value for the parameter. Variants can | |||
/// hold numbers and strings. | |||
Parameter(const char* parameter_name, Variant parameter_value) | |||
Parameter(const char* parameter_name, firebase::Variant parameter_value) |
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.
firebase:: not needed here
@@ -245,7 +245,7 @@ struct Parameter { | |||
/// | |||
/// See firebase::Variant for usage information. | |||
/// @note String values can be up to 100 characters long. | |||
Variant value; | |||
firebase::Variant value; |
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.
firebase:: not needed here
/// | ||
/// @param[in] default_parameters A map of parameter names to Variant values. | ||
void SetDefaultEventParameters( | ||
const std::map<std::string, firebase::Variant>& default_parameters); |
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.
firebase:: not needed here
…rs` to Analytics for you. This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, Variant>& params)`: This allows you to set default parameters (string, int64, double, bool, null) that will be included in all subsequent `LogEvent` calls. If a `Variant::Null()` is provided for a key, that specific default parameter will be cleared. Aggregate types (maps, vectors) are not supported and will be skipped with an error logged. - `ClearDefaultEventParameters()`: This clears all currently set default event parameters. Here's how it's implemented on different platforms: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `Variant::Null()` maps to `[NSNull null]`. Unsupported types are skipped. Passing an empty dictionary (if all input params are invalid) is a no-op. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `Variant::Null()` results in `Bundle.putString(key, null)`. Unsupported types are skipped. `AddVariantToBundle` is used for efficiency with scalar types. - Stub: Implemented as no-ops. I've also reviewed and updated the unit tests and integration tests to cover these functionalities and type constraints. Namespace usage for `Variant` has been refined: - Public API (`analytics.h`) uses unqualified `Variant` as it's within the `firebase` namespace. - SDK implementation file signatures match `analytics.h` (unqualified `Variant`). - Internal SDK code uses unqualified `Variant`. - Integration tests use `firebase::Variant` as they are outside the `firebase` namespace. I've applied code formatting using the project's script and updated and shortened the release notes in `release_build_files/readme.md`.
return; | ||
} | ||
|
||
for (const auto& pair : default_parameters) { |
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.
Make sure that Android also treats an empty map as a no-op, similar to iOS?
@@ -341,4 +341,70 @@ TEST_F(FirebaseAnalyticsTest, TestSetConsent) { | |||
did_test_setconsent_ = true; | |||
} | |||
|
|||
TEST_F(FirebaseAnalyticsTest, TestDefaultEventParametersUsage) { |
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.
Rename this test TestSetDefaultEventParameters and the following test TestClearDefaultEventParameters.
…ytics This change introduces two new C++ Analytics SDK functions: - `SetDefaultEventParameters(const std::map<std::string, Variant>& params)`: Allows setting default parameters (string, int64, double, bool, null) that will be included in all subsequent `LogEvent` calls. If a `Variant::Null()` is provided for a key, that specific default parameter will be cleared. Aggregate types (maps, vectors) are not supported and will be skipped with an error logged. Passing only invalid parameters resulting in an empty parameter set is a no-op on iOS/Android. - `ClearDefaultEventParameters()`: Clears all currently set default event parameters. Platform implementations: - iOS: Uses `[FIRAnalytics setDefaultEventParameters:]`. `Variant::Null()` maps to `[NSNull null]`. Unsupported types are skipped. - Android: Uses `FirebaseAnalytics.setDefaultEventParameters(Bundle)`. `Variant::Null()` results in `Bundle.putString(key, null)`. Unsupported types are skipped. `AddVariantToBundle` is used for efficiency with scalar types. - Stub: Implemented as no-ops. Unit tests and integration tests have been reviewed and updated. Integration test names have been clarified. Namespace usage for `Variant` has been refined: - Public API (`analytics.h`) uses unqualified `Variant` as it's within the `firebase` namespace. - SDK implementation file signatures match `analytics.h` (unqualified `Variant`). - Internal SDK code uses unqualified `Variant`. - Integration tests use `firebase::Variant` as they are outside the `firebase` namespace. Code formatting applied using the project's script. Release notes in `release_build_files/readme.md` updated and shortened.
This change introduces two new C++ Analytics SDK functions:
SetDefaultEventParameters(const std::map<std::string, Variant>& params)
: Allows setting default parameters that will be included in all subsequentLogEvent
calls. If aVariant::Null()
is provided as a value for a key, that specific default parameter will be cleared/removed.ClearDefaultEventParameters()
: Clears all currently set default event parameters.Platform implementations:
[FIRAnalytics setDefaultEventParameters:]
.Variant::Null()
maps to[NSNull null]
for clearing individual parameters. Calling withnil
clears all.FirebaseAnalytics.setDefaultEventParameters(Bundle)
.Variant::Null()
results inBundle.putString(key, null)
. Calling with anull
Bundle clears all.Unit tests and integration tests have been updated to cover these new functionalities, including the null-value handling for clearing specific parameters and the overall clearing of all parameters.
Description
Testing
Type of Change
Place an
x
the applicable box:Notes
Release Notes
section ofrelease_build_files/readme.md
.