Google Analytics (обновление специальных параметров) Недостаточное разрешение 403

Я пытаюсь обновить поля настраиваемых параметров (https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtReference/management/customDimensions/update) в Google Analytics, вызвав API аналитики из C#.

Я создал проект в https://console.developers.google.com, добавил служебную учетную запись (загрузил .p12, файл закрытого ключа), включил аналитический API и связал электронную почту служебной учетной записи в https://analytics.google.com

Я могу читать «аналитические данные» (например, сводки по счетам и т. д.), Но не могу их вставлять или обновлять. Когда я пытаюсь это сделать, я получаю ошибку 403 «Недостаточно разрешения». У учетной записи службы, добавленной в Google Analytics, есть все привилегии.

 class Program
    {
        static void Main(string[] args)
        {
            test();
        }

        public static void test() //takes clientid as input
        {

            string[] scopes = new string[] { AnalyticsService.Scope.Analytics }; // view and manage your Google Analytics data

            var keyFilePath = @"C:\Users\xyz\Desktop\CustomDimUpdate\xxxxxxxx.p12";    // Downloaded from https://console.developers.google.com
            var serviceAccountEmail = "xxxx.iam.gserviceaccount.com";  // found https://console.developers.google.com

            //loading the Key file
            var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.Exportable);
            var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
            {
                Scopes = scopes
            }.FromCertificate(certificate));


            var service = new AnalyticsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential
                //ApplicationName = "Analytics API Sample",
            });


            CustomDimension body = new CustomDimension();
            body.Name = "Configurable"; //Found in https://analytics.google.com
            body.Scope = "Product"; //Found in https://analytics.google.com
            body.Active = true;


            try
            {
                //analytics.management().customDimensions()
                //    .update("123456", "UA-123456-1", "ga:dimension2", body).execute();
                ManagementResource.CustomDimensionsResource.UpdateRequest update = service.Management.CustomDimensions.Update(body, "123456", "UA-123456-1", "ga:dimension1");

                update.Execute(); //Errors out here

                ManagementResource.AccountsResource.ListRequest list = service.Management.Accounts.List();
                list.MaxResults = 1000; // Maximum number of Accounts to return, per request. 
                Accounts feed1 = list.Execute(); //Works perfectly fine

                foreach (Account account in feed1.Items)
                {
                    // Account
                    Console.WriteLine(string.Format("Account: {0}({1})", account.Name, account.Id));
                }

                ManagementResource.ProfilesResource.ListRequest list1 = service.Management.Profiles.List("123456", "UA-123456-1");
                Profiles feed = list1.Execute();
                foreach (Profile profile in feed.Items)
                {
                    Console.WriteLine(string.Format("\t\tProfile: {0}({1})", profile.Name, profile.Id));
                }

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);

            }


        }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
129
1

Ответы 1

Мне удалось решить эту проблему, изменив приведенную ниже строку кода.

string[] scopes = new string[] { AnalyticsService.Scope.Analytics }; // view and manage your Google Analytics data

к

string[] scopes = new string[] { AnalyticsService.Scope.AnalyticsEdit }; // view and manage your Google Analytics data

Другие вопросы по теме