# googleAnalyticsR 1.2.0

* Migrate to new `gargle` OOB flow 
* Add `ga_data()` quota messages on `potentiallyThresholdedRequestsPerHour` and `tokensPerProjectPerHour` (#424)
* Fix documentation for CRAN checks

# googleAnalyticsR 1.1.0

* Allow json_file argument in ga_auth() to be  any one of the forms supported for the txt argument of jsonlite::fromJSON() (typically, a file path or JSON string), to align with implementation in downstream libraries (googleAuthR and gargle)
* Fix bug in parsing out quota messages (#403 - thanks @elalbaicin)


# googleAnalyticsR 1.0.0

* Allow authentication with service JSON keys without needing to change default client.id e.g. `ga_auth(json_file="auth-key.json")` (#324 - thanks @adamribaudo)
* Fix GA Adwords list parsing (#322 - thanks @millett-a)
* Add getUniversalMetadata API fetch to `ga_meta(version="data")` (#335)
* Fix for passing `ganalytics`-style expressions for dimension and metric filters/segments (#339 and #305), which also resolves #279 (and improves on #253) for continued support of combining expressions (for filters and segments) using `list()`.
* Support new Google Analytics 4 APIs via `ga_data()` (#335) 
* Add `ga_data_aggregations()`, `ga_data_filter()`, `ga_data_order()` for working with `ga_data()` (#335)
* Remove support for API v3 multi-account batching (#347)
* Deprecate `google_analytics_3()` (#347)
* Add GA4's Admin API to `ga_account_list("ga4")` (#350)
* Remove `ga_model_tweet()`
* Add new Shiny module for GA4 web properties - `accountPicker()` (#357)
* Add new Shiny module for GA4 fields - `metricDimensionSelect()` (#357)
* Enable generation of Shiny apps from `ga_model()` objects using template files `ga_model_shiny()` (#358)
* Create Dockerfile for deployment of shiny apps so they can be deployed to shinyapps.io and Cloud Run via `googleCloudRunner` (#367)
* From 0.9.0 there will be a dev version of the website at `https://code.markedmondson.me/googleAnalyticsR/dev/` with the development documentation.  `https://code.markedmondson.me/googleAnalyticsR/` will only carry the CRAN version.
* Add Measurement Protocol v2 functions `ga_mp_send()`, `ga_mp_event()` and `ga_mp_event_item()` (#370)
* Clean up a lot of functions and objects in the NAMESPACE

# googleAnalyticsR 0.8.0

* fix `ga_account_list()` not downloading starred columns (#284 - thanks @hidekoji)
* Allow millisecond parsing of times (#314 - thanks @VadimChernik)
* Update to use `cli` for nicer looking user messaging
* Change the default client.id (#311)
* Allow authentication via a service account key directly in `ga_auth(json = "file.json")`
* Remove `GARGLE_EMAIL` auto-auth on package load as could stop package loading under some circumstances.
* Add `ga_auth_setup()` to help walk through some of the advanced authentication setups
* Fix fetching all rows for `google_analytics()` when `slow_fetch=TRUE` and `max=-1` (#321 - thanks @wdwatkins)
* Move to Cloud Build authenticated tests via `googleCloudRunner`

# googleAnalyticsR 0.7.1

* `slow_fetch=TRUE` now respects the `max_rows` argument (#282)
* remove trailing slash breaking v3 API calls (#286 - thanks @octaviancorlade)

# googleAnalyticsR 0.7.0

* Clean up error messages
* Fix anti_sampling breaking if using date formats "4daysAgo" etc.
* Removed `google_analytics_meta()` for `ga_meta()`
* Add `accountId` to the output of Shiny module `authDropdown` when `viewIdOnly=FALSE`
* Add `quotaUser` to reporting v4 API requests to avoid quota limits if several users from same ip attempt to run API calls (#235) - default is `Sys.info()[["user"]]` or set via `options("googleAuthR.quotaUser")`
* Add `ga_model_*` functions to use GA data (#234)
* Add `ga_model_tweet` to enable data viz in tweets
* Add userActivity API via `gar_clientid_activity()`
* Use new authentication setup via `googleAuthR v1.0.0` and `gargle`
* Prevent use of default client id project in non-interactive scripts.  
* Update docs to use `clientId` dimension in user activity API calls
* Update `tidyr::unnest` to use `cols` parameter (#266)
* Add `ga_custom_upload_delete()` - thanks @byapprov (#263)
* Fix sending in multiple segment definitions in a list (#253)
* Fix `ga_segment_list()` returning data if no custom segments created (#259)
* Fix ability to list multiple dimensions and segments (#279)

# googleAnalyticsR 0.6.0

* Add goal management
* Add `ga_clientid_deletion()` function (#168) (renamed from `ga_user_deletion()`)
* Let `authDropdown` return more than just the viewId (#172)
* Export segment related classes and implicitly coerce table filters and segments to their appropriate classes in order to improve integration with the ganalytics package.
* Add support for `dataLastRefreshed` and stop caching if its present (e.g. query includes today) (#183)
* Export dim_ga4, met_ga4 and order_type_ga4 classes in order to support the complete conversion of `ganalytics` query objects into googleAnalyticsR API requests.
* Fix segments that were not respecting "IMMEDIATELY_PRECEDES" vs "PRECEDES" (thanks @digitos) (#180)
* Fix default of pivot groups so they include first column (thanks @gilliganondata) (#107)
* Support for creating remarketing audiences (#161)
* Support "NdaysAgo" in antisample calls (#209)
* Support more than 1000 entries in various management list functions (#174)
* Parse management API list responses into data.frames (#194)
* Add user management functions such as `ga_users_delete`, `ga_users_update` and `ga_users_add`
* Add custom dimension functions `ga_custom_vars_create` and `ga_custom_vars_patch`

# googleAnalytics 0.5.0

## Breaking changes!

If you were using `google_analytics()` before to fetch the v3 API, this is now available via `google_analytics_3()` - replace all instances and it should work as before.  However, you are encouraged to migrate to v4, which now runs when you use `google_analytics()`(and for a while still at `google_analytics_4()` too)

## Major changes

* Add support for resource based quotas if you are on GA360 (#127)
* Improve support for using different auth cache files with `ga_auth()`
* Changed `google_analytics` to be the v4 API, `google_analytics_3` now supports v3
* change default cache token name from `.httr-oauth` to `ga.oauth` to avoid clashes
* You can now change the rows fetched per API page in v4 up to 100k
* Add unsampled report downloads (#44 - many thanks to @j450h1 for this work on this) 
* Add management of View and account filters (#108 - many thanks to @zselinger for the work on this)
* If an `google_analytics` batch API call fails, it will automatically retry with a slower request rate
* v4 API requests will report how long it took to help with configurations

## Bug fixes

* Fix bug where anti-sampling with no dimensions broke (#149 - thanks @smach)
* Let v3 API calls use batching when also using other googleAuthR batching functions

# googleAnalytics 0.4.2

## Bug fixes

* Fix bug of argument match in `multi_select`(#99 - thanks @sdhaus)
* Fix bug for data dimensions starting with a number (#100 - thanks @kennyengci)
* Remove hourly anti-sampling as it doesn't work
* Use tidy eval instead of dplyr underscore funcs (thanks @kiendang)
* Fix multi-channel funnels raising error when no data available (thanks @octaviancorlade)
* Fix NULL validaation if no results returns in v4 API (#81 again - thanks @ricardopinto)

## Additions

* You can now set your `GA_CLIENT_ID`, `GA_CLIENT_SECRET` in environment arguments and they will be added to the project options on startup. 
* Authenticate on startup with `GA_AUTH_FILE` pointing to your cache file.
* Add support for "today" and "yesterday" date values in anti_sample (#112)
* Add that `max` is ignored during `anti_sample=TRUE` (#111)

# googleAnalyticsR 0.4.1

## Fixed

* Fix `attempt to set an attribute on NULL` error for anti-sample
* Fixed `anti_sample="auto"` math to actually limit the number of sessions for the auto-batches
* Fixed error when no data present in requested `date_range` for a view, and `max = -1`
* Fix logic of `anti_sample_batches` to allow accurate day batches. (#74)
* Fix parsing of `ga_account_summary` broken by upgrade from `dplyr 0.5.0` > `dplyr 0.7.0`

## Added

* Add warning if using default project, and if API quota is tripped (#79)
* refactor defensive checks from `testthat` to `assertthat`

# googleAnalyticsR 0.4.0

## Added

* Deprecate `google_analytics_account_list` for `ga_account_list` to be in line with other functions
* Add custom data uploads via `ga_custom_upload_file()`
* Cleaned up documentation a bit
* Added auto-authentication if you specify environment var `GA_AUTH_FILE`
* Add Remarketing Audience functions - `ga_remarketing_get` and `ga_remarketing_list`
* Add `aggregateGAData` which will aggregate over GA dimensions
* Add `antiSampleWorked` TRUE/FALSE attribute to tables when anti-sampling attempted
* Add a `slow_fetch` flag to `google_analytics_4` that will avoid batching for big complicated fetches
* Add `ga_users_list` for listing users on account, webProperty or View level
* Set default Google Project API permissions to:
    - `"https://www.googleapis.com/auth/analytics"`
    - `"https://www.googleapis.com/auth/analytics.readonly"`
    - `"https://www.googleapis.com/auth/analytics.manage.users.readonly"`
    - `"https://www.googleapis.com/auth/analytics.edit"`
    - `"https://www.googleapis.com/auth/analytics.manage.users"`

## Fixed 

* Use `aggregateGAData` to solve issue with anti_sampling repeating rows (#49)
* Fix bug with anti-sample when periods included 0-row data (#42)
* Fix `google_analytics_account_list()` parsing bug if only one view available (#52, #41)
* Fix segments not being able to be used in Cohort reports (#63)
* Fix bug with anti-sample when querying over 1000 days (#66 - thanks @olivia-icivics)

# googleAnalyticsR  0.3.0

## Added

* Add BigQuery asynch fetch to Google Analytics 360 exports, for over 1,000,000 rows.
* A GA v4 example Shiny app added that runs on `https://mark.shinyapps.io/googleAnalyticsRv4Demo/`
* New argument `anti_sample` for `google_analytics_4()` which will split up the calls into efficient batches to avoid sampling. Includes experimental sub-day hourly batching.
* Set argument `max = -1` in `google_analytics_4()` to fetch all results. 
* Add fix for `google_analytics_account_summary` parsing when no views in web properties.
* New argument `anti_sample_batches` lets you choose batch sizes (daily is equal to `anti_sample_batches=1`)
* Add several management API functions:
    - `ga_accounts`
    - `ga_adwords`
    - `ga_adwords_list`
    - `ga_custom_datasource`
    - `ga_custom_upload`
    - `ga_custom_upload_list`
    - `ga_custom_vars`
    - `ga_custom_vars_list`
    - `ga_experiment`
    - `ga_experiment_list`
    - `ga_filter`
    - `ga_filter_list`
    - `ga_filter_view`
    - `ga_filter_view_list`
    - `ga_goal`
    - `ga_goal_list`
    - `ga_segment_list`
    - `ga_unsampled`
    - `ga_unsampled_list`
    - `ga_view`
    - `ga_view_list`
    - `ga_webproperty`
    - `ga_webproperty_list`

## Fixed

* Fix bug for calculated metrics if expression not starting with `ga:` (#28)
* Fix a parse bug if only metrics and no dimensions were used in `google_analytics_4()`
* Refactoring v4 batching


# googleAnalyticsR 0.2.1 

## Fixed

* Fix v4 bug where batches over 10000 had extra rows added (#19)

# googleAnalyticsR 0.2.0

## Added

* segment helper as RStudio Addin or `gadget_GASegment()`
* Local tests added
* Multi-account batching for v3 (#17)
* Add BigQuery fetching for GoogleAnalytics 360 accounts via `google_analytics_bq()`

## Fixed

* Fix order_type() for v4 (#18)

# googleAnalyticsR  0.1.1

## Fixed

* Patch to fix ignoring first row of v4 API results (#16)

# googleAnalyticsR 0.1.0

## Added

* v4 API calls implemented
