UA相关Google Analytics API 2023年7月后可用性及代码适配咨询
Google UA与GA4相关技术问题及代码咨询
现有UA数据读取代码(基于Google.Apis.Analytics.v3)
private readonly AnalyticsService service; private readonly IConfiguration _config; private ILogger<PageViewService> _logger; public PageViewService(IConfiguration config, ILogger<PageViewService> logger) { try { _config = config; _logger = logger; var sercretFileLocation = _config["SecretFileLocation"]; var password = _config["Password"]; var accountEmail = _config["AccountEmail"]; X509KeyStorageFlags storageFlag = X509KeyStorageFlags.MachineKeySet; var flag = _config["X509KeyStorageFlags"]; if (flag == "UserKeySet") { storageFlag = X509KeyStorageFlags.UserKeySet; } else if (flag == "MachineKeySet") { storageFlag = X509KeyStorageFlags.MachineKeySet; } else if (flag == "Exportable") { storageFlag = X509KeyStorageFlags.Exportable; } else if (flag == "UserProtected") { storageFlag = X509KeyStorageFlags.UserProtected; } else if (flag == "PersistKeySet") { storageFlag = X509KeyStorageFlags.PersistKeySet; } else if (flag == "EphemeralKeySet") { storageFlag = X509KeyStorageFlags.EphemeralKeySet; } else if (flag == "DefaultKeySet") { storageFlag = X509KeyStorageFlags.DefaultKeySet; } var certificate = new X509Certificate2(sercretFileLocation, password, storageFlag); var scopes = new string[] { AnalyticsService.Scope.AnalyticsReadonly }; var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(accountEmail) { Scopes = scopes }.FromCertificate(certificate)); service = new AnalyticsService(new BaseClientService.Initializer() { HttpClientInitializer = credential }); } catch (Exception e) { _logger.LogError(e.ToString()); } } public string GetPageViews(List<string> paths) { string pathsString = ""; try { var webSiteCode = _config["WebSiteCode"]; var startDate = _config["StartDate"]; if (webSiteCode != null && startDate != null) { pathsString = GenerateFilter(paths); DataResource.GaResource.GetRequest request = service.Data.Ga.Get( "ga:" + webSiteCode, startDate, "today", "ga:uniquePageviews"); request.Filters = pathsString; var data = request.Execute(); string uniquePageViews = data?.Rows?.FirstOrDefault()?.FirstOrDefault(); return uniquePageViews; } else { return "0"; } } catch (Exception e) { _logger.LogError($"{e.ToString()} {pathsString}"); } return null; //null means there is an error. }
背景说明
本人已于2022年4月通过GA4设置助手将UA与GA4关联,GA4自该月起已开始采集指标。现咨询以下技术问题:
- 上述基于Google.Apis.Analytics.v3的代码是否会在2023年7月停止工作?
- UA与GA4的关联设置是否不会影响上述代码的正常运行?
- 是否必须改用Google.Apis.AnalyticsReporting.v4包?若使用该包,采用UA的View ID在2023年7月后是否仍有效?
基于Google.Apis.AnalyticsReporting.v4的原型代码(使用UA的View ID)
static async Task Main(string[] args) { var dateRange = new DateRange { StartDate = "2020-06-01", EndDate = "2020-06-30" }; var dimensions = new List<Dimension> { new Dimension { Name = "ga:pagePath" }, new Dimension { Name = "ga:pageTitle" } }; var metrics = new List<Metric> { new Metric { Expression = "ga:pageViews" }, new Metric { Expression = "ga:users" } }; var reportRequest = new ReportRequest { DateRanges = new List<DateRange> { dateRange }, Dimensions = dimensions, Metrics = metrics, FiltersExpression = filtersExpression, ViewId = "ga:12345678" }; var getReportsRequest = new GetReportsRequest { ReportRequests = new List<ReportRequest> { reportRequest } }; var credential = GetGoogleCredential("C:\\Code\\PrototypeAnalytics4\\PrototypeAnalytics4\\mychuva.json"); // Create an AnalyticsReportingService object to make the Google Analytics API call var analyticsService = new AnalyticsReportingService(new BaseClientService.Initializer { ApplicationName = "chuva-123", HttpClientInitializer = credential }); var batchGetRequest = analyticsService.Reports.BatchGet(getReportsRequest); var getReportsResponse = await batchGetRequest.ExecuteAsync(); var analyticsData = getReportsResponse.Reports[0].Data; } static GoogleCredential GetGoogleCredential(string pathGAKey) { GoogleCredential credential; using (FileStream stream = new FileStream(pathGAKey, FileMode.Open, FileAccess.Read, FileShare.Read)) { credential = GoogleCredential.FromStream(stream); } string[] scopes = new string[] { AnalyticsReportingService.Scope.AnalyticsReadonly }; credential = credential.CreateScoped(scopes); return credential; }
问题解答
核心问题解答
基于Google.Apis.Analytics.v3的代码在2023年7月后的状态
是的,这套代码会在2023年7月停止工作。UA(Universal Analytics)的核心服务包括v3 API在2023年7月1日正式终止支持,之后无法再通过该API获取UA数据,历史数据查询也会被停止。UA与GA4的关联对现有代码的影响
UA与GA4的关联设置不会影响现有代码的正常运行,直到UA服务终止。关联仅用于数据同步和迁移辅助,不会改变UA本身的服务逻辑,因此2023年7月前原代码仍可正常读取UA数据。是否必须改用Google.Apis.AnalyticsReporting.v4包及UA View ID的有效性
Google.Apis.AnalyticsReporting.v4本质还是针对UA的API,同样会在2023年7月后停止服务,所以即使切换到这个包,使用UA View ID的方式也会失效。不需要切换到该包,应直接迁移到GA4对应的Google.Apis.AnalyticsData.v1betaAPI,使用GA4的Property ID获取数据。
关于AnalyticsReporting.v4原型代码的有效性
该原型代码在2023年7月后不可用,因为它依赖UA的View ID和UA相关API服务,而UA服务已终止。不需要切换到这个实现,应直接基于GA4的Data API进行开发。
内容的提问来源于stack exchange,提问作者Jeipi Oyams
相关产品推荐
相关产品推荐

