Skip to content

Commit 4371814

Browse files
authored
Merge 173eac6 into f350d0e
2 parents f350d0e + 173eac6 commit 4371814

File tree

7 files changed

+123
-0
lines changed

7 files changed

+123
-0
lines changed

analytics/integration_test/src/integration_test.cc

+11
Original file line numberDiff line numberDiff line change
@@ -341,4 +341,15 @@ TEST_F(FirebaseAnalyticsTest, TestSetConsent) {
341341
did_test_setconsent_ = true;
342342
}
343343

344+
TEST_F(FirebaseAnalyticsTest, TestSetDefaultEventParameters) {
345+
std::map<std::string, firebase::Variant> default_params = {
346+
{"key1", firebase::Variant("value1")},
347+
{"key2", firebase::Variant(12345)},
348+
{"key3", firebase::Variant(1.01)},
349+
{"key4", firebase::Variant("my_value")},
350+
{"key5", firebase::Variant(true)},
351+
{"key6", firebase::Variant::EmptyMap()},
352+
};
353+
firebase::analytics::SetDefaultEventParameters(default_params);
354+
}
344355
} // namespace firebase_testapp_automated

analytics/src/analytics_android.cc

+56
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ static const ::firebase::App* g_app = nullptr;
5858
"()Lcom/google/android/gms/tasks/Task;"), \
5959
X(GetSessionId, "getSessionId", \
6060
"()Lcom/google/android/gms/tasks/Task;"), \
61+
X(SetDefaultEventParameters, "setDefaultEventParameters", \
62+
"(Landroid/os/Bundle;)V"), \
6163
X(GetInstance, "getInstance", "(Landroid/content/Context;)" \
6264
"Lcom/google/firebase/analytics/FirebaseAnalytics;", \
6365
firebase::util::kMethodTypeStatic)
@@ -736,5 +738,59 @@ Future<int64_t> GetSessionIdLastResult() {
736738
internal::kAnalyticsFnGetSessionId));
737739
}
738740

741+
// Sets the default parameters to be sent with each event.
742+
void SetDefaultEventParameters(
743+
const std::map<std::string, Variant>& parameters) {
744+
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
745+
JNIEnv* env = g_app->GetJNIEnv();
746+
747+
jobject map =
748+
env->NewObject(util::hash_map::GetClass(),
749+
util::hash_map::GetMethodId(util::hash_map::kConstructor));
750+
util::CheckAndClearJniExceptions(env);
751+
752+
jmethodID put_method_id = util::map::GetMethodId(util::map::kPut);
753+
754+
for (const auto& pair : parameters) {
755+
jobject jni_value;
756+
if (pair.second.is_int64()) {
757+
jni_value = env->NewObject(
758+
util::integer_class::GetClass(),
759+
util::integer_class::GetMethodId(util::integer_class::kConstructor),
760+
pair.second.int64_value());
761+
} else if (pair.second.is_double()) {
762+
jni_value = env->NewObject(
763+
util::double_class::GetClass(),
764+
util::double_class::GetMethodId(util::double_class::kConstructor),
765+
pair.second.double_value());
766+
} else if (pair.second.is_string()) {
767+
jni_value = env->NewStringUTF(pair.second.string_value());
768+
} else if (pair.second.is_map()) {
769+
jni_value = MapToBundle(env, pair.second.map());
770+
} else {
771+
// A Variant type that couldn't be handled was passed in.
772+
LogError(
773+
"LogEvent(%s): %s is not a valid parameter value type. "
774+
"No event was logged.",
775+
pair.first.c_str(), Variant::TypeName(pair.second.type()));
776+
continue;
777+
}
778+
jstring key_string = env->NewStringUTF(pair.first.c_str());
779+
jobject previous_value =
780+
env->CallObjectMethod(map, put_method_id, key_string, jni_value);
781+
util::CheckAndClearJniExceptions(env);
782+
env->DeleteLocalRef(jni_value);
783+
env->DeleteLocalRef(key_string);
784+
env->DeleteLocalRef(previous_value);
785+
}
786+
787+
env->CallVoidMethod(
788+
g_analytics_class_instance,
789+
analytics::GetMethodId(analytics::kSetDefaultEventParameters), map);
790+
791+
util::CheckAndClearJniExceptions(env);
792+
env->DeleteLocalRef(map);
793+
}
794+
739795
} // namespace analytics
740796
} // namespace firebase

analytics/src/analytics_ios.mm

+17
Original file line numberDiff line numberDiff line change
@@ -438,5 +438,22 @@ Thread get_id_thread(
438438
internal::FutureData::Get()->api()->LastResult(internal::kAnalyticsFnGetSessionId));
439439
}
440440

441+
/// @brief Sets the default parameters to be sent with each event.
442+
///
443+
/// @param[in] parameters The parameters to send with each event.
444+
void SetDefaultEventParameters(const std::map<std::string, Variant>& parameters) {
445+
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
446+
NSMutableDictionary* parameters_dict =
447+
[[NSMutableDictionary alloc] initWithCapacity:parameters.size()];
448+
for (const auto& pair : parameters) {
449+
NSString* key = SafeString(pair.first.c_str());
450+
if (!AddVariantToDictionary(parameters_dict, key, pair.second)) {
451+
LogError("SetDefaultEventParameters: Unsupported type (%s) within map with key %s.",
452+
Variant::TypeName(pair.second.type()), key);
453+
}
454+
}
455+
[FIRAnalytics setDefaultEventParameters:parameters_dict];
456+
}
457+
441458
} // namespace analytics
442459
} // namespace firebase

analytics/src/analytics_stub.cc

+6
Original file line numberDiff line numberDiff line change
@@ -186,5 +186,11 @@ Future<int64_t> GetSessionIdLastResult() {
186186
internal::kAnalyticsFnGetSessionId));
187187
}
188188

189+
// Sets the default parameters to be sent with each event.
190+
void SetDefaultEventParameters(
191+
const std::map<std::string, Variant>& parameters) {
192+
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
193+
}
194+
189195
} // namespace analytics
190196
} // namespace firebase

analytics/src/include/firebase/analytics.h

+6
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,12 @@ Future<int64_t> GetSessionId();
591591
/// app session.
592592
Future<int64_t> GetSessionIdLastResult();
593593

594+
/// @brief Sets the default parameters to be sent with each event.
595+
///
596+
/// @param[in] parameters The parameters to send with each event.
597+
void SetDefaultEventParameters(
598+
const std::map<std::string, Variant>& parameters);
599+
594600
} // namespace analytics
595601
} // namespace firebase
596602

analytics/tests/analytics_test.cc

+20
Original file line numberDiff line numberDiff line change
@@ -296,5 +296,25 @@ TEST_F(AnalyticsTest, TestGetAnalyticsInstanceId) {
296296
EXPECT_EQ(std::string("FakeAnalyticsInstanceId0"), *result.result());
297297
}
298298

299+
TEST_F(AnalyticsTest, TestSetDefaultEventParameters) {
300+
std::map<std::string, firebase::Variant> parameters = {
301+
{"key1", firebase::Variant("value1")},
302+
{"key2", firebase::Variant(12345)},
303+
{"key3", firebase::Variant(1.01)},
304+
{"key4", firebase::Variant("my_value")},
305+
{"key5", firebase::Variant(true)},
306+
{"key6", firebase::Variant::EmptyMap()},
307+
};
308+
309+
AddExpectationAndroid(
310+
"FirebaseAnalytics.setDefaultEventParameters",
311+
{"key1=value1,key2=12345,key3=1.01,key4=my_value,key5=1"});
312+
AddExpectationApple(
313+
"+[FIRAnalytics setDefaultEventParameters:]",
314+
{"key1=value1,key2=12345,key3=1.01,key4=my_value,key5=1"});
315+
316+
SetDefaultEventParameters(parameters);
317+
}
318+
299319
} // namespace analytics
300320
} // namespace firebase

release_build_files/readme.md

+7
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,13 @@ workflow use only during the development of your app, not for publicly shipping
631631
code.
632632

633633
## Release Notes
634+
### 12.7.0
635+
- Changes
636+
- General (iOS): Update to Firebase Cocoapods version 11.9.0.
637+
- General (Android): Update to Firebase Android BoM version 33.10.0.
638+
- Analytics: Added support for setting default parameters to be sent
639+
with each event, using `SetDefaultEventParameters`.
640+
634641
### 12.6.0
635642
- Changes
636643
- General (iOS): Update to Firebase Cocoapods version 11.8.1.

0 commit comments

Comments
 (0)