Skip to content

Commit 5ac50f6

Browse files
committed
Feat: add setdefaulteventparameters for android and stub for others
This brings the Android SDK into parity for C++.
1 parent 1097939 commit 5ac50f6

File tree

8 files changed

+87
-3
lines changed

8 files changed

+87
-3
lines changed

analytics/integration_test/src/integration_test.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,20 @@ TEST_F(FirebaseAnalyticsTest, TestLogEventWithComplexParameters) {
297297
sizeof(kViewCartParameters) / sizeof(kViewCartParameters[0]));
298298
}
299299

300+
TEST_F(FirebaseAnalyticsTest, TestSetDefaultEventParameters) {
301+
const firebase::analytics::Parameter kDefaultParameters[] = {
302+
firebase::analytics::Parameter("default_parameter_double", 123.456),
303+
firebase::analytics::Parameter("default_parameter_int", 4),
304+
firebase::analytics::Parameter("default_parameter_str",
305+
"Hello World"),
306+
};
307+
308+
firebase::analytics::SetDefaultEventParameters(kDefaultParameters,
309+
sizeof(kDefaultParameters) / sizeof(kDefaultParameters[0]));
310+
firebase::analytics::LogEvent("default_parameter_event");
311+
firebase::analytics::SetDefaultEventParameters(nullptr, 0);
312+
}
313+
300314
TEST_F(FirebaseAnalyticsTest, TestSetConsent) {
301315
// On Android, this test must be performed at the end, after all the tests for
302316
// session ID and instance ID. This is because once you call SetConsent to

analytics/src/analytics_android.cc

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ static const ::firebase::App* g_app = nullptr;
6060
"()Lcom/google/android/gms/tasks/Task;"), \
6161
X(GetInstance, "getInstance", "(Landroid/content/Context;)" \
6262
"Lcom/google/firebase/analytics/FirebaseAnalytics;", \
63-
firebase::util::kMethodTypeStatic)
63+
firebase::util::kMethodTypeStatic), \
64+
X(SetDefaultEventParameters, "setDefaultEventParameters", \
65+
"(Landroid/os/Bundle;)V")
6466
// clang-format on
6567

6668
// clang-format off
@@ -340,8 +342,8 @@ void AddToBundle(JNIEnv* env, jobject bundle, const char* key,
340342
void AddToBundle(JNIEnv* env, jobject bundle, const char* key, double value) {
341343
jstring key_string = env->NewStringUTF(key);
342344
env->CallVoidMethod(bundle,
343-
util::bundle::GetMethodId(util::bundle::kPutFloat),
344-
key_string, static_cast<jfloat>(value));
345+
util::bundle::GetMethodId(util::bundle::kPutDouble),
346+
key_string, static_cast<jdouble>(value));
345347
util::CheckAndClearJniExceptions(env);
346348
env->DeleteLocalRef(key_string);
347349
}
@@ -518,6 +520,43 @@ void LogEvent(const char* name, const Parameter* parameters,
518520
});
519521
}
520522

523+
// Set the default event parametrs.
524+
void SetDefaultEventParameters(const Parameter* parameters,
525+
size_t number_of_parameters) {
526+
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
527+
JNIEnv* env = g_app->GetJNIEnv();
528+
529+
if (!parameters) {
530+
env->CallVoidMethod(
531+
g_analytics_class_instance,
532+
analytics::GetMethodId(analytics::kSetDefaultEventParameters), nullptr);
533+
if (util::CheckAndClearJniExceptions(env)) {
534+
LogError("Failed to set default event parameters");
535+
}
536+
return;
537+
}
538+
539+
jobject bundle =
540+
env->NewObject(util::bundle::GetClass(),
541+
util::bundle::GetMethodId(util::bundle::kConstructor));
542+
for (size_t i = 0; i < number_of_parameters; ++i) {
543+
const Parameter& parameter = parameters[i];
544+
if (!AddVariantToBundle(env, bundle, parameter.name, parameter.value)) {
545+
// A Variant type that couldn't be handled was passed in.
546+
LogError(
547+
"SetDefaultEventParameters(%s): %s is not a valid parameter value"
548+
" type. Excluded from default parameters.",
549+
parameter.name, Variant::TypeName(parameter.value.type()));
550+
}
551+
}
552+
env->CallVoidMethod(
553+
g_analytics_class_instance,
554+
analytics::GetMethodId(analytics::kSetDefaultEventParameters), bundle);
555+
if (util::CheckAndClearJniExceptions(env)) {
556+
LogError("Failed to set default event parameters");
557+
}
558+
}
559+
521560
/// Initiates on-device conversion measurement given a user email address on iOS
522561
/// (no-op on Android). On iOS, requires dependency
523562
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a

analytics/src/analytics_desktop.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,11 @@ void LogEvent(const char* name, const char* parameter_name,
429429

430430
// --- Stub Implementations for Unsupported Features ---
431431

432+
void SetDefaultEventParameters(const Parameter* parameters,
433+
size_t number_of_parameters) {
434+
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
435+
}
436+
432437
void SetConsent(const std::map<ConsentType, ConsentStatus>& consent_settings) {
433438
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
434439

analytics/src/analytics_desktop_dynamic.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ static void Stub_GoogleAnalytics_LogEvent(const char* name, GoogleAnalytics_Even
139139
// No return value.
140140
}
141141

142+
static void Stub_GoogleAnalytics_SetDefaultEventParameters(GoogleAnalytics_EventParameters* parameters, size_t number_of_parameters) {
143+
// No return value.
144+
}
145+
142146
// Stub for GoogleAnalytics_SetUserProperty
143147
static void Stub_GoogleAnalytics_SetUserProperty(const char* name,
144148
const char* value) {
@@ -180,6 +184,7 @@ void (*ptr_GoogleAnalytics_EventParameters_InsertItemVector)(GoogleAnalytics_Eve
180184
void (*ptr_GoogleAnalytics_EventParameters_Destroy)(GoogleAnalytics_EventParameters* event_parameter_map) = &Stub_GoogleAnalytics_EventParameters_Destroy;
181185
bool (*ptr_GoogleAnalytics_Initialize)(const GoogleAnalytics_Options* options) = &Stub_GoogleAnalytics_Initialize;
182186
void (*ptr_GoogleAnalytics_LogEvent)(const char* name, GoogleAnalytics_EventParameters* parameters) = &Stub_GoogleAnalytics_LogEvent;
187+
void (*ptr_GoogleAnalytics_SetDefaultEventParameters)(GoogleAnalytics_EventParameters* parameters, size_t number_of_parameters) = &Stub_GoogleAnalytics_SetDefaultEventParameters;
183188
void (*ptr_GoogleAnalytics_SetUserProperty)(const char* name, const char* value) = &Stub_GoogleAnalytics_SetUserProperty;
184189
void (*ptr_GoogleAnalytics_SetUserId)(const char* user_id) = &Stub_GoogleAnalytics_SetUserId;
185190
void (*ptr_GoogleAnalytics_ResetAnalyticsData)() = &Stub_GoogleAnalytics_ResetAnalyticsData;

analytics/src/analytics_desktop_dynamic.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ extern void (*ptr_GoogleAnalytics_EventParameters_InsertItemVector)(GoogleAnalyt
164164
extern void (*ptr_GoogleAnalytics_EventParameters_Destroy)(GoogleAnalytics_EventParameters* event_parameter_map);
165165
extern bool (*ptr_GoogleAnalytics_Initialize)(const GoogleAnalytics_Options* options);
166166
extern void (*ptr_GoogleAnalytics_LogEvent)(const char* name, GoogleAnalytics_EventParameters* parameters);
167+
extern void (*ptr_GoogleAnalytics_SetDefaultEventParameters)(GoogleAnalytics_EventParameters* parameters, size_t number_of_parameters);
167168
extern void (*ptr_GoogleAnalytics_SetUserProperty)(const char* name, const char* value);
168169
extern void (*ptr_GoogleAnalytics_SetUserId)(const char* user_id);
169170
extern void (*ptr_GoogleAnalytics_ResetAnalyticsData)();

analytics/src/analytics_ios.mm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,9 @@ 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) {
316+
}
317+
315318
/// Initiates on-device conversion measurement given a user email address on iOS (no-op on
316319
/// Android). On iOS, requires dependency GoogleAppMeasurementOnDeviceConversion to be linked
317320
/// in, otherwise it is a no-op.

analytics/src/include/firebase/analytics.h

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

479+
/// @brief Adds parameters that will be set on every event logged from the SDK.
480+
///
481+
/// Adds parameters that will be set on every event logged from the SDK,
482+
/// including automatic ones. The values passed in the parameters bundle will
483+
/// be added to the map of default event parameters. These parameters persist
484+
/// across app runs. They are of lower precedence than event parameters, so if
485+
/// an event parameter and a parameter set using this API have the same name,
486+
/// the value of the event parameter will be used. The same limitations on event
487+
/// parameters apply to default event parameters.
488+
///
489+
/// @param[in] parameters Array of Parameter structures.
490+
/// @param[in] number_of_parameters Number of elements in the parameters
491+
/// array.
492+
void SetDefaultEventParameters(const Parameter* parameters,
493+
size_t number_of_parameters);
494+
479495
/// Initiates on-device conversion measurement given a user email address on iOS
480496
/// and tvOS (no-op on Android). On iOS and tvOS, this method requires the
481497
/// dependency GoogleAppMeasurementOnDeviceConversion to be linked in,

app/src/util_android.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,7 @@ METHOD_LOOKUP_DECLARATION(activity, ACTIVITY_METHODS)
496496
X(GetString, "getString", "(Ljava/lang/String;)Ljava/lang/String;"), \
497497
X(KeySet, "keySet", "()Ljava/util/Set;"), \
498498
X(PutFloat, "putFloat", "(Ljava/lang/String;F)V"), \
499+
X(PutDouble, "putDouble", "(Ljava/lang/String;D)V"), \
499500
X(PutLong, "putLong", "(Ljava/lang/String;J)V"), \
500501
X(PutString, "putString", "(Ljava/lang/String;Ljava/lang/String;)V"), \
501502
X(PutBundle, "putBundle", "(Ljava/lang/String;Landroid/os/Bundle;)V"), \

0 commit comments

Comments
 (0)