Создание контактов с исключением API Google - доступ для записи запрещен - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь создать контакты Google, используя Google API в ASP .NET Core (c #). Но это вызывает исключение что-то вроде:

доступ на запись в gmail запрещен.

Я использую https://www.google.com/m8/feeds/contacts/ для получения / публикации. Не могу найти, где мне не хватает.

Можно ли создавать контакты, используя обычную учетную запись gmail. Какие шаги я должен следовать?

Заранее спасибо

1 Ответ

0 голосов
/ 02 июля 2018

доступ на запись в gmail запрещен.

Означает, что у вас нет разрешения на запись в учетную запись пользователя.

API данных контактов предоставляет два типа каналов: канал контактов и канал групп контактов.

Фиды - это частные каналы для чтения / записи, которые можно использовать для просмотра и управления контактами / группами пользователя. Поскольку они являются частными, программист может получить к ним доступ только с помощью аутентифицированного запроса. То есть запрос должен содержать токен аутентификации для пользователя, чьи контакты вы хотите получить. Подробнее о проверке подлинности см. В руководстве разработчика .

Вы также можете рассмотреть следующее. Что может сделать вашу жизнь проще, чем использовать этот старый API.

  1. Вы должны использовать API Google People.
  2. Вы должны использовать клиентскую библиотеку google .net.
  3. Вам необходимо пройти аутентификацию для вставки данных в контакты пользователей.

Пример аутентификации

   private static UserCredential GetUserCredential(string clientSecretJson, string userName, string[] scopes)
        {
            try
            {
                if (string.IsNullOrEmpty(userName))
                    throw new ArgumentNullException("userName");
                if (string.IsNullOrEmpty(clientSecretJson))
                    throw new ArgumentNullException("clientSecretJson");
                if (!File.Exists(clientSecretJson))
                    throw new Exception("clientSecretJson file does not exist.");

                // These are the scopes of permissions you need. It is best to request only what you need and not all of them               
                using (var stream = new FileStream(clientSecretJson, FileMode.Open, FileAccess.Read))
                {
                    string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                    credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);

                    // Requesting Authentication or loading previously stored authentication for userName
                    var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
                                                                             scopes,
                                                                             userName,
                                                                             CancellationToken.None,
                                                                             new FileDataStore(credPath, true)).Result;

                    credential.GetAccessTokenForRequestAsync();
                    return credential;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Get user credentials failed.", ex);
            }
        }

Oauth2Authentication.cs

...