diff --git a/analytics/integration_test/src/integration_test.cc b/analytics/integration_test/src/integration_test.cc index fe1c54e76a..54016135d9 100644 --- a/analytics/integration_test/src/integration_test.cc +++ b/analytics/integration_test/src/integration_test.cc @@ -276,6 +276,29 @@ TEST_F(FirebaseAnalyticsTest, TestSetLogCallback) { } #endif // defined(_WIN32) +TEST_F(FirebaseAnalyticsTest, TestDesktopInitialization) { + // The analytics dll does not work on 32 bit systems. + SKIP_TEST_ON_WINDOWS_32BIT; + + // Check to see if the desktop DLL is loaded. + bool initialized = firebase::analytics::IsDesktopInitialized(); + +#if defined(_WIN32) + // On Windows, it should be true. + EXPECT_TRUE(initialized); +#else + // On other platforms, it should return false. + EXPECT_FALSE(initialized); +#endif +} + +TEST_F(FirebaseAnalyticsTest, TestDesktopDebugMode) { + // SetDebugMode doesn't return anything, so we just call it to ensure + // it doesn't crash. + firebase::analytics::SetDesktopDebugMode(true); + firebase::analytics::SetDesktopDebugMode(false); +} + TEST_F(FirebaseAnalyticsTest, TestLogEvents) { // Log an event with no parameters. firebase::analytics::LogEvent(firebase::analytics::kEventLogin); diff --git a/analytics/src/analytics_android.cc b/analytics/src/analytics_android.cc index 1d36a9b78d..fe1ba4235a 100644 --- a/analytics/src/analytics_android.cc +++ b/analytics/src/analytics_android.cc @@ -672,6 +672,12 @@ void SetLogCallback(const LogCallback&) {} // NO-OP in Android and iOS. Only used in Windows. void NotifyAppLifecycleChange(AppLifecycleState) {} +// NO-OP in Android and iOS. Only used in Windows. +bool IsDesktopInitialized() { return false; } + +// NO-OP in Android and iOS. Only used in Windows. +void SetDesktopDebugMode(bool) {} + Future GetAnalyticsInstanceId() { FIREBASE_ASSERT_RETURN(GetAnalyticsInstanceIdLastResult(), internal::IsInitialized()); diff --git a/analytics/src/analytics_desktop.cc b/analytics/src/analytics_desktop.cc index 0355dea6e3..1a1df7a480 100644 --- a/analytics/src/analytics_desktop.cc +++ b/analytics/src/analytics_desktop.cc @@ -450,6 +450,18 @@ void NotifyAppLifecycleChange(AppLifecycleState state) { static_cast(state)); } +// Returns true if the desktop Analytics dll is initialized. +bool IsDesktopInitialized() { + FIREBASE_ASSERT_RETURN(false, internal::IsInitialized()); + return GoogleAnalytics_IsInitialized(); +} + +// Sends the enabled Flag to the desktop Analytics dll. +void SetDesktopDebugMode(bool enabled) { + FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); + GoogleAnalytics_SetDebugMode(enabled); +} + // Overloaded versions of LogEvent for convenience. void LogEvent(const char* name) { diff --git a/analytics/src/analytics_desktop_dynamic.c b/analytics/src/analytics_desktop_dynamic.c index 21dffcbf64..2385d13011 100644 --- a/analytics/src/analytics_desktop_dynamic.c +++ b/analytics/src/analytics_desktop_dynamic.c @@ -25,18 +25,19 @@ static char g_stub_memory[256] = {0}; // clang-format off // Number of Google Analytics functions expected to be loaded from the DLL. -const int FirebaseAnalytics_DynamicFunctionCount = 24; +const int FirebaseAnalytics_DynamicFunctionCount = 26; #if defined(_WIN32) // Array of known Google Analytics Windows DLL SHA256 hashes (hex strings). const char* FirebaseAnalytics_KnownWindowsDllHashes[] = { "c1b9ff6e9119c30bbeb7472326dcde418f45682e6b822e25eed922fe6e3cc698", "13ae5f9349b24186f1f3667b52832076e8d14ad9656c3546b1b7fca79ac8144b", - "3f1fb1bb21bce0061c4b89bb674d3b6c94eaea2c8de98802198a35ea94c97900" + "3f1fb1bb21bce0061c4b89bb674d3b6c94eaea2c8de98802198a35ea94c97900", + "1e944cd4a2b8d115a32d01f4cc900f23805934b5587b55305df9cd189f9d78d5" }; // Count of known Google Analytics Windows DLL SHA256 hashes. -const int FirebaseAnalytics_KnownWindowsDllHashCount = 3; +const int FirebaseAnalytics_KnownWindowsDllHashCount = 4; #endif // defined(_WIN32) // --- Stub Function Definitions --- @@ -175,6 +176,16 @@ static void Stub_GoogleAnalytics_NotifyAppLifecycleChange(GoogleAnalytics_AppLif // No return value. } +// Stub for GoogleAnalytics_IsInitialized +static bool Stub_GoogleAnalytics_IsInitialized() { + return 0; +} + +// Stub for GoogleAnalytics_SetDebugMode +static void Stub_GoogleAnalytics_SetDebugMode(bool enabled) { + // No return value. +} + // --- Function Pointer Initializations --- GoogleAnalytics_Options* (*ptr_GoogleAnalytics_Options_Create)() = &Stub_GoogleAnalytics_Options_Create; @@ -202,7 +213,8 @@ void (*ptr_GoogleAnalytics_ResetAnalyticsData)() = &Stub_GoogleAnalytics_ResetAn void (*ptr_GoogleAnalytics_SetAnalyticsCollectionEnabled)(bool enabled) = &Stub_GoogleAnalytics_SetAnalyticsCollectionEnabled; void (*ptr_GoogleAnalytics_SetLogCallback)(GoogleAnalytics_LogCallback callback) = &Stub_GoogleAnalytics_SetLogCallback; void (*ptr_GoogleAnalytics_NotifyAppLifecycleChange)(GoogleAnalytics_AppLifecycleState state) = &Stub_GoogleAnalytics_NotifyAppLifecycleChange; - +bool (*ptr_GoogleAnalytics_IsInitialized)() = &Stub_GoogleAnalytics_IsInitialized; +void (*ptr_GoogleAnalytics_SetDebugMode)(bool enabled) = &Stub_GoogleAnalytics_SetDebugMode; // --- Dynamic Loader Function for Windows --- #if defined(_WIN32) int FirebaseAnalytics_LoadDynamicFunctions(HMODULE dll_handle) { @@ -333,6 +345,16 @@ int FirebaseAnalytics_LoadDynamicFunctions(HMODULE dll_handle) { count++; } + FARPROC proc_GoogleAnalytics_IsInitialized = GetProcAddress(dll_handle, "GoogleAnalytics_IsInitialized"); + if (proc_GoogleAnalytics_IsInitialized) { + ptr_GoogleAnalytics_IsInitialized = (bool (*)())proc_GoogleAnalytics_IsInitialized; + count++; + } + FARPROC proc_GoogleAnalytics_SetDebugMode = GetProcAddress(dll_handle, "GoogleAnalytics_SetDebugMode"); + if (proc_GoogleAnalytics_SetDebugMode) { + ptr_GoogleAnalytics_SetDebugMode = (void (*)(bool enabled))proc_GoogleAnalytics_SetDebugMode; + count++; + } return count; } @@ -361,6 +383,8 @@ void FirebaseAnalytics_UnloadDynamicFunctions(void) { ptr_GoogleAnalytics_SetAnalyticsCollectionEnabled = &Stub_GoogleAnalytics_SetAnalyticsCollectionEnabled; ptr_GoogleAnalytics_SetLogCallback = &Stub_GoogleAnalytics_SetLogCallback; ptr_GoogleAnalytics_NotifyAppLifecycleChange = &Stub_GoogleAnalytics_NotifyAppLifecycleChange; + ptr_GoogleAnalytics_IsInitialized = &Stub_GoogleAnalytics_IsInitialized; + ptr_GoogleAnalytics_SetDebugMode = &Stub_GoogleAnalytics_SetDebugMode; } #endif // defined(_WIN32) diff --git a/analytics/src/analytics_desktop_dynamic.h b/analytics/src/analytics_desktop_dynamic.h index 49bafc6f6c..ca41908880 100644 --- a/analytics/src/analytics_desktop_dynamic.h +++ b/analytics/src/analytics_desktop_dynamic.h @@ -213,6 +213,8 @@ extern void (*ptr_GoogleAnalytics_ResetAnalyticsData)(); extern void (*ptr_GoogleAnalytics_SetAnalyticsCollectionEnabled)(bool enabled); extern void (*ptr_GoogleAnalytics_SetLogCallback)(GoogleAnalytics_LogCallback callback); extern void (*ptr_GoogleAnalytics_NotifyAppLifecycleChange)(GoogleAnalytics_AppLifecycleState state); +extern bool (*ptr_GoogleAnalytics_IsInitialized)(); +extern void (*ptr_GoogleAnalytics_SetDebugMode)(bool enabled); #define GoogleAnalytics_Options_Create ptr_GoogleAnalytics_Options_Create #define GoogleAnalytics_Options_Destroy ptr_GoogleAnalytics_Options_Destroy @@ -238,6 +240,8 @@ extern void (*ptr_GoogleAnalytics_NotifyAppLifecycleChange)(GoogleAnalytics_AppL #define GoogleAnalytics_SetAnalyticsCollectionEnabled ptr_GoogleAnalytics_SetAnalyticsCollectionEnabled #define GoogleAnalytics_SetLogCallback ptr_GoogleAnalytics_SetLogCallback #define GoogleAnalytics_NotifyAppLifecycleChange ptr_GoogleAnalytics_NotifyAppLifecycleChange +#define GoogleAnalytics_IsInitialized ptr_GoogleAnalytics_IsInitialized +#define GoogleAnalytics_SetDebugMode ptr_GoogleAnalytics_SetDebugMode // clang-format on // Number of Google Analytics functions expected to be loaded from the DLL. diff --git a/analytics/src/analytics_ios.mm b/analytics/src/analytics_ios.mm index e1ed883fa7..38aa5275e7 100644 --- a/analytics/src/analytics_ios.mm +++ b/analytics/src/analytics_ios.mm @@ -419,6 +419,12 @@ void SetLogCallback(const LogCallback&) {} // No-Op on iOS and Android. Only used in Windows desktop apps. void NotifyAppLifecycleChange(AppLifecycleState) {} +// NO-OP in Android and iOS. Only used in Windows. +bool IsDesktopInitialized() { return false; } + +// NO-OP in Android and iOS. Only used in Windows. +void SetDesktopDebugMode(bool) {} + Future GetAnalyticsInstanceId() { MutexLock lock(g_mutex); FIREBASE_ASSERT_RETURN(Future(), internal::IsInitialized()); diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index 22d4e8fd60..47a5aab72b 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -634,7 +634,7 @@ enum AppLifecycleState { kUnknown = 0, kTermination }; /// /// This method is used to notify the Analytics SDK about the current state of /// the app's lifecycle. The Analytics SDK will use this information to log -/// events, update user properties, upload data, etc. The method only work on +/// events, update user properties, upload data, etc. The method only works on /// windows and is a NO-OP on iOS and Android. /// /// kTermination is used to indicate that the app is about to be terminated. @@ -645,6 +645,20 @@ enum AppLifecycleState { kUnknown = 0, kTermination }; /// @param[in] state The current state of the app's lifecycle. void NotifyAppLifecycleChange(AppLifecycleState state); +/// @brief Returns whether the desktop Analytics SDK is initialized. +/// +/// Returns true if the Analytics SDK is initialized, false otherwise. The +/// method only works on windows and is a NO-OP on iOS and Android. +bool IsDesktopInitialized(); + +/// @brief Sets whether desktop debug mode is enabled. +/// +/// This methods enables desktop debug mode for the analytics SDK. The +/// method only works on windows and is a NO-OP on iOS and Android. +/// +/// @param[in] enabled A flag that enables or disables debug mode. +void SetDesktopDebugMode(bool enabled); + /// Get the instance ID from the analytics service. /// /// @note This is *not* the same ID as the ID returned by diff --git a/analytics/windows/google_analytics.dll b/analytics/windows/google_analytics.dll index 0dee614a43..f24ff4a379 100644 Binary files a/analytics/windows/google_analytics.dll and b/analytics/windows/google_analytics.dll differ diff --git a/analytics/windows/include/public/analytics.h b/analytics/windows/include/public/analytics.h index 48435695c6..df55c7dcdb 100644 --- a/analytics/windows/include/public/analytics.h +++ b/analytics/windows/include/public/analytics.h @@ -1,19 +1,21 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_ANALYTICS_H_ -#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_ANALYTICS_H_ +#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_ANALYTICS_H_ +#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_ANALYTICS_H_ #include #include @@ -60,6 +62,15 @@ class Analytics { * @brief The app is about to be terminated. */ kTermination, + /** + * @brief The application has user focus (e.g., is in the foreground). + */ + kFocused, + /** + * @brief The application does not have user focus (e.g., is in the + * background). + */ + kUnfocused, }; /** @@ -155,13 +166,26 @@ class Analytics { google_analytics_options->analytics_collection_enabled_at_first_launch = options.analytics_collection_enabled_at_first_launch; google_analytics_options->app_data_directory = - (options.app_data_directory.has_value() && - !options.app_data_directory->empty()) - ? options.app_data_directory->c_str() - : nullptr; + options.app_data_directory.value_or("").empty() + ? nullptr + : options.app_data_directory.value().c_str(); return GoogleAnalytics_Initialize(google_analytics_options); } + /** + * @brief Returns whether the Analytics SDK is initialized. + * + * @return true if the Analytics SDK is initialized, false otherwise. + */ + bool IsInitialized() { return GoogleAnalytics_IsInitialized(); } + + /** + * @brief Sets whether debug mode is enabled. + * + * @param[in] enabled A flag that enables or disables debug mode. + */ + void SetDebugMode(bool enabled) { GoogleAnalytics_SetDebugMode(enabled); } + /** * @brief Logs an app event. * @@ -353,16 +377,16 @@ class Analytics { [](GoogleAnalytics_LogLevel log_level, const char* message) { LogLevel cpp_log_level; switch (log_level) { - case GoogleAnalytics_LogLevel::kDebug: + case GoogleAnalytics_LogLevel_kDebug: cpp_log_level = LogLevel::kDebug; break; - case GoogleAnalytics_LogLevel::kInfo: + case GoogleAnalytics_LogLevel_kInfo: cpp_log_level = LogLevel::kInfo; break; - case GoogleAnalytics_LogLevel::kWarning: + case GoogleAnalytics_LogLevel_kWarning: cpp_log_level = LogLevel::kWarning; break; - case GoogleAnalytics_LogLevel::kError: + case GoogleAnalytics_LogLevel_kError: cpp_log_level = LogLevel::kError; break; default: @@ -392,11 +416,23 @@ class Analytics { * occurs. The caller must ensure the OS does not terminate background threads * before the call returns. * + * kFocused is used to indicate that the app has user focus (e.g., is in the + * foreground). + * + * kUnfocused is used to indicate that the app does not have user focus (e.g., + * is in the background). + * * @param[in] state The current state of the app's lifecycle. */ void NotifyAppLifecycleChange(AppLifecycleState state) { GoogleAnalytics_AppLifecycleState c_state; switch (state) { + case AppLifecycleState::kFocused: + c_state = GoogleAnalytics_AppLifecycleState_kFocused; + break; + case AppLifecycleState::kUnfocused: + c_state = GoogleAnalytics_AppLifecycleState_kUnfocused; + break; case AppLifecycleState::kTermination: c_state = GoogleAnalytics_AppLifecycleState_kTermination; break; @@ -417,4 +453,4 @@ class Analytics { } // namespace google::analytics -#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_ANALYTICS_H_ +#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_ANALYTICS_H_ diff --git a/analytics/windows/include/public/c/analytics.h b/analytics/windows/include/public/c/analytics.h index 6b87226f20..2bdc1d6d90 100644 --- a/analytics/windows/include/public/c/analytics.h +++ b/analytics/windows/include/public/c/analytics.h @@ -1,19 +1,21 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_C_ANALYTICS_H_ -#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_C_ANALYTICS_H_ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_C_ANALYTICS_H_ +#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_C_ANALYTICS_H_ #include #include @@ -99,16 +101,37 @@ typedef enum GoogleAnalytics_AppLifecycleState { * @brief The app is about to be terminated. */ GoogleAnalytics_AppLifecycleState_kTermination = 1, + /** + * @brief The application has user focus (e.g., is in the foreground). + */ + GoogleAnalytics_AppLifecycleState_kFocused = 2, + /** + * @brief The application does not have user focus (e.g., is in the + * background). + */ + GoogleAnalytics_AppLifecycleState_kUnfocused = 3, } GoogleAnalytics_AppLifecycleState; /** * @brief The log level of a log message. */ typedef enum GoogleAnalytics_LogLevel { - kDebug, - kInfo, - kWarning, - kError, + /** + * @brief The log message is a debug message. + */ + GoogleAnalytics_LogLevel_kDebug = 0, + /** + * @brief The log message is an info message. + */ + GoogleAnalytics_LogLevel_kInfo = 1, + /** + * @brief The log message is a warning message. + */ + GoogleAnalytics_LogLevel_kWarning = 2, + /** + * @brief The log message is an error message. + */ + GoogleAnalytics_LogLevel_kError = 3, } GoogleAnalytics_LogLevel; /** @@ -363,6 +386,20 @@ ANALYTICS_API void GoogleAnalytics_EventParameters_Destroy( */ ANALYTICS_API bool GoogleAnalytics_Initialize(GoogleAnalytics_Options* options); +/** + * @brief Returns whether the Analytics SDK is initialized. + * + * @return true if the Analytics SDK is initialized, false otherwise. + */ +ANALYTICS_API bool GoogleAnalytics_IsInitialized(); + +/** + * @brief Sets whether debug mode is enabled. + * + * @param[in] enabled A flag that enables or disables debug mode. + */ +ANALYTICS_API void GoogleAnalytics_SetDebugMode(bool enabled); + /** * @brief Logs an app event. * @@ -509,4 +546,4 @@ ANALYTICS_API void GoogleAnalytics_NotifyAppLifecycleChange( } #endif -#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_C_ANALYTICS_H_ +#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_C_ANALYTICS_H_ diff --git a/analytics/windows/include/public/event_names.h b/analytics/windows/include/public/event_names.h index 10a71dfab5..4b1b9448a0 100644 --- a/analytics/windows/include/public/event_names.h +++ b/analytics/windows/include/public/event_names.h @@ -1,19 +1,21 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_EVENT_NAMES_H_ -#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_EVENT_NAMES_H_ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_EVENT_NAMES_H_ +#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_EVENT_NAMES_H_ // Predefined event names. // @@ -447,4 +449,4 @@ inline constexpr char kEventViewSearchResults[] = "view_search_results"; } // namespace google::analytics -#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_EVENT_NAMES_H_ +#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_EVENT_NAMES_H_ diff --git a/analytics/windows/include/public/parameter_names.h b/analytics/windows/include/public/parameter_names.h index 52029ab9f9..5d470262e4 100644 --- a/analytics/windows/include/public/parameter_names.h +++ b/analytics/windows/include/public/parameter_names.h @@ -1,19 +1,21 @@ -// Copyright 2025 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_PARAMETER_NAMES_H_ -#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_PARAMETER_NAMES_H_ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_PARAMETER_NAMES_H_ +#define ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_PARAMETER_NAMES_H_ namespace google::analytics { @@ -263,4 +265,4 @@ inline constexpr char kParameterVirtualCurrencyName[] = "virtual_currency_name"; } // namespace google::analytics -#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PUBLIC_PARAMETER_NAMES_H_ +#endif // ANALYTICS_MOBILE_CONSOLE_MEASUREMENT_PRERELEASE_PARAMETER_NAMES_H_ diff --git a/analytics/windows/known_dll_hashes.txt b/analytics/windows/known_dll_hashes.txt index 86f1b5b6b5..0da98fae2d 100644 --- a/analytics/windows/known_dll_hashes.txt +++ b/analytics/windows/known_dll_hashes.txt @@ -1,3 +1,4 @@ c1b9ff6e9119c30bbeb7472326dcde418f45682e6b822e25eed922fe6e3cc698 13ae5f9349b24186f1f3667b52832076e8d14ad9656c3546b1b7fca79ac8144b 3f1fb1bb21bce0061c4b89bb674d3b6c94eaea2c8de98802198a35ea94c97900 +1e944cd4a2b8d115a32d01f4cc900f23805934b5587b55305df9cd189f9d78d5 \ No newline at end of file