@@ -88,6 +88,17 @@ enum RegistrationTokenRequestState {
8888static RegistrationTokenRequestState g_registration_token_request_state =
8989 kRegistrationTokenRequestStateNone ;
9090
91+ // Global flag indicating if metrics export to big query was enabled or
92+ // disabled before app initialization.
93+ enum DeliveryMetricsExportToBigQueryState {
94+ kDeliveryMetricsExportToBigQueryNone ,
95+ kDeliveryMetricsExportToBigQueryEnable ,
96+ kDeliveryMetricsExportToBigQueryDisable ,
97+ };
98+ static DeliveryMetricsExportToBigQueryState
99+ g_delivery_metrics_export_to_big_query_state =
100+ kDeliveryMetricsExportToBigQueryNone ;
101+
91102// Indicates whether a registration token has been received, which is necessary
92103// to perform certain actions related to topic subscriptions.
93104// NOTE: The registration token is received by RegistrationIntentService which
@@ -164,7 +175,11 @@ METHOD_LOOKUP_DEFINITION(remote_message_builder,
164175 " (Ljava/lang/String;)Lcom/google/android/gms/tasks/Task;" ), \
165176 X (GetInstance, " getInstance" , \
166177 " ()Lcom/google/firebase/messaging/FirebaseMessaging;" , \
167- firebase::util::kMethodTypeStatic )
178+ firebase::util::kMethodTypeStatic ), \
179+ X (DeliveryMetricsExportToBigQueryEnabled, \
180+ " deliveryMetricsExportToBigQueryEnabled" , " ()Z" ), \
181+ X (SetDeliveryMetricsExportToBigQuery, \
182+ " setDeliveryMetricsExportToBigQuery" , " (Z)V" )
168183// clang-format on
169184METHOD_LOOKUP_DECLARATION (firebase_messaging, FIREBASE_MESSAGING_METHODS);
170185METHOD_LOOKUP_DEFINITION (firebase_messaging,
@@ -645,6 +660,15 @@ InitResult Initialize(const ::firebase::App& app, Listener* listener,
645660 kRegistrationTokenRequestStateEnable );
646661 }
647662
663+ if (g_delivery_metrics_export_to_big_query_state !=
664+ kDeliveryMetricsExportToBigQueryNone ) {
665+ // Calling this again, now that we're initialized.
666+ assert (internal::IsInitialized ());
667+ SetTokenRegistrationOnInitEnabled (
668+ g_delivery_metrics_export_to_big_query_state ==
669+ kDeliveryMetricsExportToBigQueryEnable );
670+ }
671+
648672 FutureData::Create ();
649673
650674 // Supposedly App creation also creates a registration token, but this seems
@@ -695,6 +719,9 @@ void Terminate() {
695719 delete g_lockfile_path;
696720 g_lockfile_path = nullptr ;
697721
722+ g_delivery_metrics_export_to_big_query_state =
723+ kDeliveryMetricsExportToBigQueryNone ;
724+
698725 env->DeleteGlobalRef (g_firebase_messaging);
699726 g_firebase_messaging = nullptr ;
700727 SetListener (nullptr );
@@ -939,6 +966,44 @@ Future<void> UnsubscribeLastResult() {
939966 api->LastResult (kMessagingFnUnsubscribe ));
940967}
941968
969+ bool DeliveryMetricsExportToBigQueryEnabled () {
970+ if (!internal::IsInitialized ()) {
971+ // If the user previously called SetDeliveryMetricsExportToBigQuery(true),
972+ // then return true. If they did not set it, or set it to false, return
973+ // false.
974+ return g_delivery_metrics_export_to_big_query_state ==
975+ kDeliveryMetricsExportToBigQueryEnable ;
976+ }
977+
978+ JNIEnv* env = g_app->GetJNIEnv ();
979+ jboolean result = env->CallBooleanMethod (
980+ g_firebase_messaging,
981+ firebase_messaging::GetMethodId (
982+ firebase_messaging::kDeliveryMetricsExportToBigQueryEnabled ));
983+ assert (env->ExceptionCheck () == false );
984+ return static_cast <bool >(result);
985+ }
986+
987+ void SetDeliveryMetricsExportToBigQuery (bool enabled) {
988+ // If this is called before JNI is initialized, we'll just cache the intent
989+ // and handle it on actual init.
990+ // Otherwise if we've already initialized, the underlying API will persist the
991+ // value.
992+ if (internal::IsInitialized ()) {
993+ JNIEnv* env = g_app->GetJNIEnv ();
994+ env->CallVoidMethod (
995+ g_firebase_messaging,
996+ firebase_messaging::GetMethodId (
997+ firebase_messaging::kSetDeliveryMetricsExportToBigQuery ),
998+ static_cast <jboolean>(enabled));
999+ assert (env->ExceptionCheck () == false );
1000+ } else {
1001+ g_delivery_metrics_export_to_big_query_state =
1002+ enabled ? kDeliveryMetricsExportToBigQueryEnable
1003+ : kDeliveryMetricsExportToBigQueryDisable ;
1004+ }
1005+ }
1006+
9421007void SetTokenRegistrationOnInitEnabled (bool enabled) {
9431008 // If this is called before JNI is initialized, we'll just cache the intent
9441009 // and handle it on actual init.
0 commit comments