TrackJS и GDPR и SPA - PullRequest
       65

TrackJS и GDPR и SPA

2 голосов
/ 08 октября 2019

Я использую TrackJS в SPA, у меня есть логика, связанная с GDPR, поэтому я НЕ могу отправлять какие-либо данные до получения согласия.

Я нашел onError параметр конфигурации, который помогает с этим. Но у меня все еще есть внешний запрос к https://usage.trackjs.com/usage.gif. Я могу отключить это с помощью некоторых уловок, но это выглядит не совсем корректно.

Так, как предотвратить использование вызова?

Пример реализации:

import { TrackJS } from 'trackjs';

let GLOBAL_VARIABLE_IS_CONSENT_GIVEN = false;

TrackJS.install({
  usageURL: '#', // disable usage call
  onError: function() {
    if (!GLOBAL_VARIABLE_IS_CONSENT_GIVEN) {
      return false;
    }

    // other logic

    return true;
  },
});

Я такжеобнаружена проблема с использованием вызова в SPA. Это не будет показывать фактический результат просмотра страницы. Так что будет полезно иметь поддержку для вызова запроса на использование вручную, это решит две проблемы выше. Установлено, что известно ограничение: https://docs.trackjs.com/data-management/pageviews/

Ответы [ 2 ]

1 голос
/ 11 октября 2019

На данный момент я нашел только один способ ее решить. Я написал вспомогательный класс, который применяет monkey patch, чтобы предотвратить отправку вызова об использовании и отслеживание ошибок, пока это не разрешеноПатч Monkey обычно используется, когда вам нужно заблокировать загрузку внешних скриптов, например, iubenda, который мы уже используем.

Класс помощника:

class TrackJSUtil {
  static URL_PATTERN = /usage\.trackjs\.com/;

  /**
   * Keep usage url
   *
   * @private
   * @type {null|string}
   */
  usageUrl = null;

  /**
   * Is requests allowed
   *
   * @private
   * @type {boolean}
   */
  isRequestsAllowed = false;

  /**
   * Apply monkey patch
   */
  install() {
    if (this.isRequestsAllowed) {
      return;
    }

    const setUsageUrl = (value) => {
      this.usageUrl = value;
    };

    const ignore = () => this.isRequestsAllowed || this.usageUrl != null;

    const createElementOriginal = document.createElement.bind(document);

    document.createElement = function createElementForTrackJS(...args) {
      const element = createElementOriginal(...args);

      if (ignore() || element.tagName.toUpperCase() !== 'IMG') {
        return element;
      }

      Object.defineProperty(element, 'src', {
        get() {
          return this.getAttribute('src');
        },
        set(value) {
          if (TrackJSUtil.URL_PATTERN.test(value)) {
            setUsageUrl(value);
          } else {
            this.setAttribute('src', value);
          }
        },
      });

      return element;
    };
  }

  /**
   * Callback for onError in TrackJS
   * @return {boolean}
   */
  onTrackJSError() {
    return this.isRequestsAllowed;
  }

  /**
   * Call it when requests are allowed
   */
  allow() {
    if (this.isRequestsAllowed) {
      return;
    }

    this.isRequestsAllowed = true;

    if (this.usageUrl == null) {
      return;
    }

    document.createElement('img').src = this.usageUrl;
  }
}

Использование:

import { TrackJS } from 'trackjs';

const util = new TrackJSUtil();

if (IS_CONSENT_GIVEN) {
  util.allow()
} else {
  callItWhenConsentGiven(() => {
    util.allow();
  });
}

util.install();

TrackJS.install({
  onError: () => util.onTrackJSError(),
});
1 голос
/ 08 октября 2019

Тодд из Отслеживание ошибок внешнего интерфейса TrackJS здесь. Я не верю, что вам нужно замыкать призыв к использованию для GDPR, так как он не содержит никаких пользовательских данных. Это просто счетчик того, сколько раз данное приложение было загружено.

Использование только отправляет:

  • Токен учетной записи
  • Заявление
  • Сгенерированный идентификатор уникальности

Ничто из этого не прослеживается до пользователя, поэтому вы должны иметь возможность продолжить и разрешить вызов использования и использовать описанный вами метод, чтобы заблокировать отправку ошибок в onError.

В качестве альтернативы,Я бы порекомендовал вам отложить звонок на TrackJS.install до получения согласия. Недостатком этого подхода является то, что ошибки, которые происходят до согласия, не фиксируются. Но я думаю, это то, что хотел пользователь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...