Skip to content

Commit 8dad037

Browse files
Add SetDefaultEventParameters and ClearDefaultEventParameters to Analytics
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.
1 parent faf31e8 commit 8dad037

File tree

4 files changed

+28
-28
lines changed

4 files changed

+28
-28
lines changed

analytics/integration_test/src/integration_test.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ TEST_F(FirebaseAnalyticsTest, TestSetConsent) {
344344
TEST_F(FirebaseAnalyticsTest, TestDefaultEventParametersUsage) {
345345
LogInfo("Testing SetDefaultEventParameters with initial values, then updating with Null.");
346346

347-
std::map<std::string, firebase::analytics::Variant> initial_defaults;
347+
std::map<std::string, firebase::Variant> initial_defaults;
348348
initial_defaults["initial_key"] = "initial_value";
349349
initial_defaults["key_to_be_nulled"] = "text_before_null";
350350
initial_defaults["numeric_default"] = 12345LL;
@@ -356,8 +356,8 @@ TEST_F(FirebaseAnalyticsTest, TestDefaultEventParametersUsage) {
356356
LogInfo("Logged event_with_initial_defaults.");
357357
ProcessEvents(500); // Short pause for event logging, if it matters for backend.
358358

359-
std::map<std::string, firebase::analytics::Variant> updated_defaults;
360-
updated_defaults["key_to_be_nulled"] = firebase::analytics::Variant::Null();
359+
std::map<std::string, firebase::Variant> updated_defaults;
360+
updated_defaults["key_to_be_nulled"] = firebase::Variant::Null();
361361
updated_defaults["another_key"] = "another_value";
362362
// "initial_key" should persist if not overwritten.
363363
// "numeric_default" should persist.
@@ -377,7 +377,7 @@ TEST_F(FirebaseAnalyticsTest, TestDefaultEventParametersUsage) {
377377
TEST_F(FirebaseAnalyticsTest, TestClearDefaultEventParametersFunctionality) {
378378
LogInfo("Testing ClearDefaultEventParameters.");
379379

380-
std::map<std::string, firebase::analytics::Variant> defaults_to_clear;
380+
std::map<std::string, firebase::Variant> defaults_to_clear;
381381
defaults_to_clear["default_one"] = "will_be_cleared";
382382
defaults_to_clear["default_two"] = 9876LL;
383383

analytics/src/analytics_android.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -380,17 +380,17 @@ void AddBundleToBundle(JNIEnv* env, jobject bundle, const char* key,
380380
}
381381

382382
// Declared here so that it can be used, defined below.
383-
jobject MapToBundle(JNIEnv* env, const std::map<Variant, Variant>& map);
383+
jobject MapToBundle(JNIEnv* env, const std::map<firebase::Variant, firebase::Variant>& map);
384384

385385
// Converts the given vector into a Java ArrayList. It is up to the
386386
// caller to delete the local reference when done.
387387
jobject VectorOfMapsToArrayList(JNIEnv* env,
388-
const std::vector<Variant>& vector) {
388+
const std::vector<firebase::Variant>& vector) {
389389
jobject arraylist = env->NewObject(
390390
util::array_list::GetClass(),
391391
util::array_list::GetMethodId(util::array_list::kConstructor));
392392

393-
for (const Variant& element : vector) {
393+
for (const firebase::Variant& element : vector) {
394394
if (element.is_map()) {
395395
jobject bundle = MapToBundle(env, element.map());
396396
env->CallBooleanMethod(
@@ -400,15 +400,15 @@ jobject VectorOfMapsToArrayList(JNIEnv* env,
400400
env->DeleteLocalRef(bundle);
401401
} else {
402402
LogError("VectorOfMapsToArrayList: Unsupported type (%s) within vector.",
403-
Variant::TypeName(element.type()));
403+
firebase::Variant::TypeName(element.type()));
404404
}
405405
}
406406
return arraylist;
407407
}
408408

409409
// Converts and adds the Variant to the given Bundle.
410410
bool AddVariantToBundle(JNIEnv* env, jobject bundle, const char* key,
411-
const Variant& value) {
411+
const firebase::Variant& value) {
412412
if (value.is_int64()) {
413413
AddToBundle(env, bundle, key, value.int64_value());
414414
} else if (value.is_double()) {
@@ -440,7 +440,7 @@ bool AddVariantToBundle(JNIEnv* env, jobject bundle, const char* key,
440440

441441
// Converts the given map into a Java Bundle. It is up to the caller
442442
// to delete the local reference when done.
443-
jobject MapToBundle(JNIEnv* env, const std::map<Variant, Variant>& map) {
443+
jobject MapToBundle(JNIEnv* env, const std::map<firebase::Variant, firebase::Variant>& map) {
444444
jobject bundle =
445445
env->NewObject(util::bundle::GetClass(),
446446
util::bundle::GetMethodId(util::bundle::kConstructor));
@@ -452,7 +452,7 @@ jobject MapToBundle(JNIEnv* env, const std::map<Variant, Variant>& map) {
452452
if (!AddVariantToBundle(env, bundle, pair.first.string_value(),
453453
pair.second)) {
454454
LogError("MapToBundle: Unsupported type (%s) within map with key %s.",
455-
Variant::TypeName(pair.second.type()),
455+
firebase::Variant::TypeName(pair.second.type()),
456456
pair.first.string_value());
457457
}
458458
util::CheckAndClearJniExceptions(env);
@@ -514,7 +514,7 @@ void LogEvent(const char* name, const Parameter* parameters,
514514
LogError(
515515
"LogEvent(%s): %s is not a valid parameter value type. "
516516
"No event was logged.",
517-
parameter.name, Variant::TypeName(parameter.value.type()));
517+
parameter.name, firebase::Variant::TypeName(parameter.value.type()));
518518
}
519519
}
520520
});
@@ -612,7 +612,7 @@ void ResetAnalyticsData() {
612612
}
613613

614614
void SetDefaultEventParameters(
615-
const std::map<std::string, Variant>& default_parameters) {
615+
const std::map<std::string, firebase::Variant>& default_parameters) {
616616
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
617617
JNIEnv* env = g_app->GetJNIEnv();
618618
if (!env) return;

analytics/src/analytics_ios.mm

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -232,25 +232,25 @@ void LogEvent(const char* name) {
232232
}
233233

234234
// Declared here so that it can be used, defined below.
235-
NSDictionary* MapToDictionary(const std::map<Variant, Variant>& map);
235+
NSDictionary* MapToDictionary(const std::map<firebase::Variant, firebase::Variant>& map);
236236

237237
// Converts the given vector of Maps into an ObjC NSArray of ObjC NSDictionaries.
238-
NSArray* VectorOfMapsToArray(const std::vector<Variant>& vector) {
238+
NSArray* VectorOfMapsToArray(const std::vector<firebase::Variant>& vector) {
239239
NSMutableArray* array = [NSMutableArray arrayWithCapacity:vector.size()];
240-
for (const Variant& element : vector) {
240+
for (const firebase::Variant& element : vector) {
241241
if (element.is_map()) {
242242
NSDictionary* dict = MapToDictionary(element.map());
243243
[array addObject:dict];
244244
} else {
245245
LogError("VectorOfMapsToArray: Unsupported type (%s) within vector.",
246-
Variant::TypeName(element.type()));
246+
firebase::Variant::TypeName(element.type()));
247247
}
248248
}
249249
return array;
250250
}
251251

252252
// Converts and adds the Variant to the given Dictionary.
253-
bool AddVariantToDictionary(NSMutableDictionary* dict, NSString* key, const Variant& value) {
253+
bool AddVariantToDictionary(NSMutableDictionary* dict, NSString* key, const firebase::Variant& value) {
254254
if (value.is_int64()) {
255255
[dict setObject:[NSNumber numberWithLongLong:value.int64_value()] forKey:key];
256256
} else if (value.is_double()) {
@@ -277,18 +277,18 @@ bool AddVariantToDictionary(NSMutableDictionary* dict, NSString* key, const Vari
277277
}
278278

279279
// Converts the given map into an ObjC dictionary of ObjC objects.
280-
NSDictionary* MapToDictionary(const std::map<Variant, Variant>& map) {
280+
NSDictionary* MapToDictionary(const std::map<firebase::Variant, firebase::Variant>& map) {
281281
NSMutableDictionary* dict = [NSMutableDictionary dictionaryWithCapacity:map.size()];
282282
for (const auto& pair : map) {
283283
// Only add elements that use a string key
284284
if (!pair.first.is_string()) {
285285
continue;
286286
}
287287
NSString* key = SafeString(pair.first.string_value());
288-
const Variant& value = pair.second;
288+
const firebase::Variant& value = pair.second;
289289
if (!AddVariantToDictionary(dict, key, value)) {
290290
LogError("MapToDictionary: Unsupported type (%s) within map with key %s.",
291-
Variant::TypeName(value.type()), key);
291+
firebase::Variant::TypeName(value.type()), key);
292292
}
293293
}
294294
return dict;
@@ -306,7 +306,7 @@ void LogEvent(const char* name, const Parameter* parameters, size_t number_of_pa
306306
// A Variant type that couldn't be handled was passed in.
307307
LogError("LogEvent(%s): %s is not a valid parameter value type. "
308308
"No event was logged.",
309-
parameter.name, Variant::TypeName(parameter.value.type()));
309+
parameter.name, firebase::Variant::TypeName(parameter.value.type()));
310310
}
311311
}
312312
[FIRAnalytics logEventWithName:@(name) parameters:parameters_dict];
@@ -374,13 +374,13 @@ void SetSessionTimeoutDuration(int64_t milliseconds) {
374374
}
375375

376376
void SetDefaultEventParameters(
377-
const std::map<std::string, Variant>& default_parameters) {
377+
const std::map<std::string, firebase::Variant>& default_parameters) {
378378
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
379379
NSMutableDictionary* ns_default_parameters =
380380
[[NSMutableDictionary alloc] initWithCapacity:default_parameters.size()];
381381
for (const auto& pair : default_parameters) {
382382
NSString* key = SafeString(pair.first.c_str());
383-
const Variant& value = pair.second;
383+
const firebase::Variant& value = pair.second;
384384

385385
if (value.is_null()) {
386386
[ns_default_parameters setObject:[NSNull null] forKey:key];
@@ -398,7 +398,7 @@ void SetDefaultEventParameters(
398398
// It does not support nested collections (NSArray, NSDictionary) unlike LogEvent.
399399
LogError("SetDefaultEventParameters: Unsupported Variant type (%s) for key %s. "
400400
"Only Int64, Double, String, Bool, and Null are supported for default event parameters.",
401-
Variant::TypeName(value.type()), pair.first.c_str());
401+
firebase::Variant::TypeName(value.type()), pair.first.c_str());
402402
}
403403
}
404404
[FIRAnalytics setDefaultEventParameters:ns_default_parameters];

analytics/src/include/firebase/analytics.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ struct Parameter {
142142
/// @param parameter_name Name of the parameter (see Parameter::name).
143143
/// @param parameter_value Value for the parameter. Variants can
144144
/// hold numbers and strings.
145-
Parameter(const char* parameter_name, Variant parameter_value)
145+
Parameter(const char* parameter_name, firebase::Variant parameter_value)
146146
: name(parameter_name) {
147147
value = parameter_value;
148148
}
@@ -245,7 +245,7 @@ struct Parameter {
245245
///
246246
/// See firebase::Variant for usage information.
247247
/// @note String values can be up to 100 characters long.
248-
Variant value;
248+
firebase::Variant value;
249249
#endif // SWIG
250250
};
251251

@@ -570,7 +570,7 @@ void ResetAnalyticsData();
570570
///
571571
/// @param[in] default_parameters A map of parameter names to Variant values.
572572
void SetDefaultEventParameters(
573-
const std::map<std::string, Variant>& default_parameters);
573+
const std::map<std::string, firebase::Variant>& default_parameters);
574574

575575
/// @brief Clears all default event parameters.
576576
void ClearDefaultEventParameters();

0 commit comments

Comments
 (0)