@@ -58,6 +58,8 @@ static const ::firebase::App* g_app = nullptr;
58
58
" ()Lcom/google/android/gms/tasks/Task;" ), \
59
59
X (GetSessionId, " getSessionId" , \
60
60
" ()Lcom/google/android/gms/tasks/Task;" ), \
61
+ X (SetDefaultEventParameters, " setDefaultEventParameters" , \
62
+ " (Landroid/os/Bundle;)V" ), \
61
63
X (GetInstance, " getInstance" , " (Landroid/content/Context;)" \
62
64
" Lcom/google/firebase/analytics/FirebaseAnalytics;" , \
63
65
firebase::util::kMethodTypeStatic )
@@ -736,5 +738,59 @@ Future<int64_t> GetSessionIdLastResult() {
736
738
internal::kAnalyticsFnGetSessionId ));
737
739
}
738
740
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
+
739
795
} // namespace analytics
740
796
} // namespace firebase
0 commit comments