Skip to content

Commit 05c9248

Browse files
committed
Feat: add setdefaulteventparameters for iOS and take in vector
This adds in the iOS setdefaulteventparameters. Along with that I will make the setdefaulteventparameters and logevent take in vector for the parameters.
1 parent 5ac50f6 commit 05c9248

File tree

4 files changed

+89
-3
lines changed

4 files changed

+89
-3
lines changed

analytics/src/analytics_android.cc

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <cstdint>
2121
#include <cstring>
22+
#include <vector>
2223

2324
#include "analytics/src/analytics_common.h"
2425
#include "analytics/src/include/firebase/analytics.h"
@@ -520,13 +521,18 @@ void LogEvent(const char* name, const Parameter* parameters,
520521
});
521522
}
522523

523-
// Set the default event parametrs.
524+
// log an event and the associated parameters via a vector.
525+
void LogEvent(const char* name, const std::vector<Parameter>& parameters) {
526+
LogEvent(name, parameters.data(), parameters.size());
527+
}
528+
529+
// Set the default event parameters.
524530
void SetDefaultEventParameters(const Parameter* parameters,
525531
size_t number_of_parameters) {
526532
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
527533
JNIEnv* env = g_app->GetJNIEnv();
528534

529-
if (!parameters) {
535+
if (!parameters || number_of_parameters == 0) {
530536
env->CallVoidMethod(
531537
g_analytics_class_instance,
532538
analytics::GetMethodId(analytics::kSetDefaultEventParameters), nullptr);
@@ -557,6 +563,11 @@ void SetDefaultEventParameters(const Parameter* parameters,
557563
}
558564
}
559565

566+
// Set the default event parameters
567+
void SetDefaultEventParameters(const std::vector<Parameter>& parameters) {
568+
setDefaultEventParameters(parameters.data(), parameters.size());
569+
}
570+
560571
/// Initiates on-device conversion measurement given a user email address on iOS
561572
/// (no-op on Android). On iOS, requires dependency
562573
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a

analytics/src/analytics_desktop.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,11 @@ void LogEvent(const char* name, const Parameter* parameters,
310310
// c_event_params if non-null.
311311
}
312312

313+
// log an event and the associated parameters via a vector.
314+
void LogEvent(const char* name, const std::vector<Parameter>& parameters) {
315+
LogEvent(name, parameters.data(), parameters.size());
316+
}
317+
313318
// Sets a user property to the given value.
314319
//
315320
// Up to 25 user property names are supported. Once set, user property values
@@ -434,6 +439,10 @@ void SetDefaultEventParameters(const Parameter* parameters,
434439
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
435440
}
436441

442+
void SetDefaultEventParameters(const std::vector<Parameter>& parameters) {
443+
SetDefaultEventParameters(parameters.data(), parameters.size());
444+
}
445+
437446
void SetConsent(const std::map<ConsentType, ConsentStatus>& consent_settings) {
438447
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
439448

analytics/src/analytics_ios.mm

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,38 @@ void LogEvent(const char* name, const Parameter* parameters, size_t number_of_pa
312312
[FIRAnalytics logEventWithName:@(name) parameters:parameters_dict];
313313
}
314314

315-
void SetDefaultEventParameters(const Parameter* parameters, size_t number_of_parameters) {
315+
// log an event and the associated parameters via a vector.
316+
void LogEvent(const char* name, const std::vector<Parameter>& parameters) {
317+
LogEvent(name, parameters.data(), parameters.size());
318+
}
319+
320+
// Sets the default event parameter
321+
void SetDefaultEventParameters(const Parameter* parameters, size_t number_of_parameters) {
322+
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
323+
324+
if (!parameters || number_of_parameters == 0) {
325+
[FIRAnalytics setDefaultEventParameters:nil];
326+
return;
327+
}
328+
329+
NSMutableDictionary* parameters_dict =
330+
[NSMutableDictionary dictionaryWithCapacity:number_of_parameters];
331+
for (size_t i = 0; i < number_of_parameters; ++i) {
332+
const Parameter& parameter = parameters[i];
333+
NSString* parameter_name = SafeString(parameter.name);
334+
if (!AddVariantToDictionary(parameters_dict, parameter_name, parameter.value)) {
335+
// A Variant type that couldn't be handled was passed in.
336+
LogError("SetDefaultEventParameters(%s): %s is not a valid parameter value type. "
337+
"No event was logged.",
338+
parameter.name, Variant::TypeName(parameter.value.type()));
339+
}
340+
}
341+
[FIRAnalytics setDefaultEventParameters:parameters_dict];
342+
}
343+
344+
// Sets the default event parameters via a vector
345+
void SetDefaultEventParameters(const std::vector<Parameter>& parameters) {
346+
SetDefaultEventParameters(parameters.data(), parameters.size());
316347
}
317348

318349
/// Initiates on-device conversion measurement given a user email address on iOS (no-op on

analytics/src/include/firebase/analytics.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,28 @@ void LogEvent(const char* name);
476476
void LogEvent(const char* name, const Parameter* parameters,
477477
size_t number_of_parameters);
478478

479+
/// @brief Log an event with associated parameters.
480+
///
481+
/// An Event is an important occurrence in your app that you want to
482+
/// measure. You can report up to 500 different types of events per app and
483+
/// you can associate up to 25 unique parameters with each Event type.
484+
///
485+
/// Some common events are documented in @ref event_names (%event_names.h),
486+
/// but you may also choose to specify custom event types that are associated
487+
/// with your specific app.
488+
///
489+
/// @param[in] name Name of the event to log. Should contain 1 to 40
490+
/// alphanumeric characters or underscores. The name must start with an
491+
/// alphabetic character. Some event names are reserved. See @ref event_names
492+
/// (%event_names.h) for the list of reserved event names. The "firebase_"
493+
/// prefix is reserved and should not be used. Note that event names are
494+
/// case-sensitive and that logging two events whose names differ only in
495+
/// case will result in two distinct events.
496+
/// @param[in] parameters Array of Parameter structures.
497+
/// @param[in] number_of_parameters Number of elements in the parameters
498+
/// array.
499+
void LogEvent(const char* name, const std::vector<Parameter>& parameters);
500+
479501
/// @brief Adds parameters that will be set on every event logged from the SDK.
480502
///
481503
/// Adds parameters that will be set on every event logged from the SDK,
@@ -492,6 +514,19 @@ void LogEvent(const char* name, const Parameter* parameters,
492514
void SetDefaultEventParameters(const Parameter* parameters,
493515
size_t number_of_parameters);
494516

517+
/// @brief Adds parameters that will be set on every event logged from the SDK.
518+
///
519+
/// Adds parameters that will be set on every event logged from the SDK,
520+
/// including automatic ones. The values passed in the parameters bundle will
521+
/// be added to the map of default event parameters. These parameters persist
522+
/// across app runs. They are of lower precedence than event parameters, so if
523+
/// an event parameter and a parameter set using this API have the same name,
524+
/// the value of the event parameter will be used. The same limitations on event
525+
/// parameters apply to default event parameters.
526+
///
527+
/// @param[in] parameters reference to vector of Parameter structures.
528+
void SetDefaultEventParameters(const std::vector<Parameter>& parameters);
529+
495530
/// Initiates on-device conversion measurement given a user email address on iOS
496531
/// and tvOS (no-op on Android). On iOS and tvOS, this method requires the
497532
/// dependency GoogleAppMeasurementOnDeviceConversion to be linked in,

0 commit comments

Comments
 (0)