|
19 | 19 |
|
20 | 20 | #include <cstdint> |
21 | 21 | #include <cstring> |
| 22 | +#include <vector> |
22 | 23 |
|
23 | 24 | #include "analytics/src/analytics_common.h" |
24 | 25 | #include "analytics/src/include/firebase/analytics.h" |
@@ -60,7 +61,9 @@ static const ::firebase::App* g_app = nullptr; |
60 | 61 | "()Lcom/google/android/gms/tasks/Task;"), \ |
61 | 62 | X(GetInstance, "getInstance", "(Landroid/content/Context;)" \ |
62 | 63 | "Lcom/google/firebase/analytics/FirebaseAnalytics;", \ |
63 | | - firebase::util::kMethodTypeStatic) |
| 64 | + firebase::util::kMethodTypeStatic), \ |
| 65 | + X(SetDefaultEventParameters, "setDefaultEventParameters", \ |
| 66 | + "(Landroid/os/Bundle;)V") |
64 | 67 | // clang-format on |
65 | 68 |
|
66 | 69 | // clang-format off |
@@ -340,8 +343,8 @@ void AddToBundle(JNIEnv* env, jobject bundle, const char* key, |
340 | 343 | void AddToBundle(JNIEnv* env, jobject bundle, const char* key, double value) { |
341 | 344 | jstring key_string = env->NewStringUTF(key); |
342 | 345 | env->CallVoidMethod(bundle, |
343 | | - util::bundle::GetMethodId(util::bundle::kPutFloat), |
344 | | - key_string, static_cast<jfloat>(value)); |
| 346 | + util::bundle::GetMethodId(util::bundle::kPutDouble), |
| 347 | + key_string, static_cast<jdouble>(value)); |
345 | 348 | util::CheckAndClearJniExceptions(env); |
346 | 349 | env->DeleteLocalRef(key_string); |
347 | 350 | } |
@@ -518,6 +521,60 @@ void LogEvent(const char* name, const Parameter* parameters, |
518 | 521 | }); |
519 | 522 | } |
520 | 523 |
|
| 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. |
| 530 | +void SetDefaultEventParameters(const Parameter* parameters, |
| 531 | + size_t number_of_parameters) { |
| 532 | + FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); |
| 533 | + JNIEnv* env = g_app->GetJNIEnv(); |
| 534 | + |
| 535 | + if (!parameters || number_of_parameters == 0) { |
| 536 | + env->CallVoidMethod( |
| 537 | + g_analytics_class_instance, |
| 538 | + analytics::GetMethodId(analytics::kSetDefaultEventParameters), nullptr); |
| 539 | + if (util::CheckAndClearJniExceptions(env)) { |
| 540 | + LogError("Failed to set default event parameters"); |
| 541 | + } |
| 542 | + return; |
| 543 | + } |
| 544 | + |
| 545 | + jobject bundle = |
| 546 | + env->NewObject(util::bundle::GetClass(), |
| 547 | + util::bundle::GetMethodId(util::bundle::kConstructor)); |
| 548 | + if (util::CheckAndClearJniExceptions(env) || !bundle) { |
| 549 | + LogError("Failed to create bundle for SetDefaultEventParameters."); |
| 550 | + if (bundle) env->DeleteLocalRef(bundle); |
| 551 | + return; |
| 552 | + } |
| 553 | + |
| 554 | + for (size_t i = 0; i < number_of_parameters; ++i) { |
| 555 | + const Parameter& parameter = parameters[i]; |
| 556 | + if (!AddVariantToBundle(env, bundle, parameter.name, parameter.value)) { |
| 557 | + // A Variant type that couldn't be handled was passed in. |
| 558 | + LogError( |
| 559 | + "SetDefaultEventParameters(%s): %s is not a valid parameter value" |
| 560 | + " type. Excluded from default parameters.", |
| 561 | + parameter.name, Variant::TypeName(parameter.value.type())); |
| 562 | + } |
| 563 | + } |
| 564 | + env->CallVoidMethod( |
| 565 | + g_analytics_class_instance, |
| 566 | + analytics::GetMethodId(analytics::kSetDefaultEventParameters), bundle); |
| 567 | + if (util::CheckAndClearJniExceptions(env)) { |
| 568 | + LogError("Failed to set default event parameters"); |
| 569 | + } |
| 570 | + env->DeleteLocalRef(bundle); |
| 571 | +} |
| 572 | + |
| 573 | +// Set the default event parameters |
| 574 | +void SetDefaultEventParameters(const std::vector<Parameter>& parameters) { |
| 575 | + SetDefaultEventParameters(parameters.data(), parameters.size()); |
| 576 | +} |
| 577 | + |
521 | 578 | /// Initiates on-device conversion measurement given a user email address on iOS |
522 | 579 | /// (no-op on Android). On iOS, requires dependency |
523 | 580 | /// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a |
|
0 commit comments