Skip to content

Update Analytics to use new options struct. #1745

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

jonsimantov
Copy link
Contributor

Description

Provide details of the change, and generalize the change in the PR title above.


Testing

Describe how you've tested these changes. Link any manually triggered Integration tests or CPP binary SDK Packaging Github Action workflows, if applicable.


Type of Change

Place an x the applicable box:

  • Bug fix. Add the issue # below if applicable.
  • New feature. A non-breaking change which adds functionality.
  • Other, such as a build process or documentation change.

Notes

  • Bug fixes and feature changes require an update to the Release Notes section of release_build_files/readme.md.
  • Read the contribution guidelines CONTRIBUTING.md.
  • Changes to the public API require an internal API review. If you'd like to help us make Firebase APIs better, please propose your change in a feature request so that we can discuss it together.

This change updates the desktop analytics initialization to use the
newly required Options struct for the Windows C API.

- In `analytics/src/analytics_desktop.cc`:
  - `firebase::analytics::Initialize(const App& app)` now retrieves
    `app_id` and `package_name` from `app.options()`.
  - It calls `GoogleAnalytics_Options_Create()` to create the options struct.
  - Populates `app_id`, `package_name`, and sets a default for
    `analytics_collection_enabled_at_first_launch`.
  - Calls `GoogleAnalytics_Initialize()` with the populated options struct.
  - String lifetimes for `app_id` and `package_name` are handled by
    creating local `std::string` copies before passing their `c_str()`
    to the C API.
@jonsimantov jonsimantov changed the base branch from main to analytics_windows_dll_updated June 25, 2025 19:29
@jonsimantov jonsimantov marked this pull request as ready for review June 25, 2025 19:47
@jonsimantov jonsimantov merged commit fcd9aaa into analytics_windows_dll_updated Jun 25, 2025
10 of 12 checks passed
@github-actions github-actions bot added the tests: in-progress This PR's integration tests are in progress. label Jun 25, 2025
Copy link

github-actions bot commented Jun 25, 2025

✅  Integration test succeeded!

Requested by @jonsimantov on commit fcd9aaa
Last updated: Wed Jun 25 13:14 PDT 2025
View integration test log & download artifacts

@github-actions github-actions bot added the tests: succeeded This PR's integration tests succeeded. label Jun 25, 2025
@firebase-workflow-trigger firebase-workflow-trigger bot removed the tests: in-progress This PR's integration tests are in progress. label Jun 25, 2025
jonsimantov added a commit that referenced this pull request Jun 25, 2025
… of Options struct. (#1744)

* Update script and code to handle known hashes for multiple DLLs.

* Fixed issues on Windows with multi-dll-hash code.

* Fix: Link Crypt32.lib for firebase_analytics on Windows

Add Crypt32.lib to the linked libraries for the firebase_analytics
target on Windows. This resolves a linker error LNK2019 for
_CryptBinaryToStringA@20, which was occurring in builds that
included analytics_windows.obj (e.g., firebase_analytics_test).

While CryptBinaryToStringA is not directly called in
analytics_windows.cc, the linker indicates that analytics_windows.obj
requires this symbol, possibly due to an indirect dependency or
other build system interactions. Linking Crypt32.lib provides the
necessary symbol.

* Fix: Link Crypt32.lib for firebase_analytics_test on Windows

I've added Crypt32.lib to the dependencies of the firebase_analytics_test
target in `analytics/tests/CMakeLists.txt` when building on Windows.

This is to resolve a persistent LNK2019 error for
_CryptBinaryToStringA@20, which occurs during the linking phase of
firebase_analytics_test.obj. This change directly links the
required system library at the test executable level.

* Update DLL.

* Remove unused file.

* Remove extra file.

* Initialize Analytics C SDK with AppOptions on desktop

This change updates the desktop analytics initialization to use the
newly required Options struct for the Windows C API.

- In `analytics/src/analytics_desktop.cc`:
  - `firebase::analytics::Initialize(const App& app)` now retrieves
    `app_id` and `package_name` from `app.options()`.
  - It calls `GoogleAnalytics_Options_Create()` to create the options struct.
  - Populates `app_id`, `package_name`, and sets a default for
    `analytics_collection_enabled_at_first_launch`.
  - Calls `GoogleAnalytics_Initialize()` with the populated options struct.
  - String lifetimes for `app_id` and `package_name` are handled by
    creating local `std::string` copies before passing their `c_str()`
    to the C API.

* Update stub generation.

* Format code.

* Fix build issues.

* Update Analytics to use new options struct. (#1745)

* Initialize Analytics C SDK with AppOptions on desktop

This change updates the desktop analytics initialization to use the
newly required Options struct for the Windows C API.

- In `analytics/src/analytics_desktop.cc`:
  - `firebase::analytics::Initialize(const App& app)` now retrieves
    `app_id` and `package_name` from `app.options()`.
  - It calls `GoogleAnalytics_Options_Create()` to create the options struct.
  - Populates `app_id`, `package_name`, and sets a default for
    `analytics_collection_enabled_at_first_launch`.
  - Calls `GoogleAnalytics_Initialize()` with the populated options struct.
  - String lifetimes for `app_id` and `package_name` are handled by
    creating local `std::string` copies before passing their `c_str()`
    to the C API.

* Format code.

* Fix build issues.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Format code.

* Only display Analytics warnings if we are not in stub mode.

* Format code.

* Address review comments and add missing copyright notices.

* Remove extraneous commented out code.

* Add another known hash to the list.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
tests: succeeded This PR's integration tests succeeded.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant