Связывание учетных записей пользователей (клиентский JavaScript)

An example of the dialog asking the subscriber to link their subscription

При Subscription Linking клиентский javascript — единственный способ создать новую связь между PPID и учетной записью Google читателя. На настроенной странице читателю предлагается диалоговое окно с просьбой привязать свою подписку. После того, как читатель нажмет кнопку «Продолжить с Google», он может выбрать учетную запись для привязки и вернуться на настроенную страницу после завершения.

Связывание подписки не требует использования сторонних файлов cookie или активного сеанса Google для читателя. Это гибко позволяет запустить процесс связывания в любой момент в опыте читателя, а не только после покупки. Если читатель не вошел в учетную запись Google, ему предоставляется возможность сделать это в рамках потока.

Примеры кода

Эти примеры клиентского кода иллюстрируют, как инициировать ссылку, как выглядит допустимый ответ и (необязательно) как использовать eventManager swg.js для прослушивания аналитических событий и их соответствующей маршрутизации.

Связывание PPID с учетной записью читателя для одной публикации выполняется с помощью метода linkSubscription в swg.js Использование аналогично предыдущей функции Account Linking ( пример ), но вместо передачи обещания метод принимает объект, содержащий PPID.

const result = await subscriptions.linkSubscription({publisherProvidedId:6789})

Пример ответа ( интерфейс )

Допустимые ответы от успешно связанной учетной записи содержат как PPID , используемый в ссылке, так и логический статус success .

{
  publisherProvidedId: 6789,
  success: true
}

Объединить несколько публикаций

An example of the dialog asking the subscriber to link multiple their subscriptions with publications

Вы можете объединить несколько публикаций для Subscription Linking одновременно, передав объект в качестве аргумента функции linkSubscriptions . Свойство linkTo представляет собой массив объектов, где каждый объект представляет определенный publicationId и соответствующий ему publisherProvidedId (PPID) для связывания.

const result = await subscriptions.linkSubscriptions({linkTo: [
  { publicationId: 'pubId1', publisherProvidedId: 'ppid1' },
  { publicationId: 'pubId2', publisherProvidedId: 'ppid2' },
  
]});

Примеры ответов ( интерфейс )

Поля anyFailure (логическое значение) и anySuccess (логическое значение) указывают, были ли какие-либо сбои или успехи в попытке привязки подписки к пакету. Поле links содержит сведения о результатах для каждой из публикаций.

Успешное связывание со всеми публикациями
{
  "anyFailure": false,
  "anySuccess": true,
  "links": [{
    "publicationId": "CAowqfCKCw",
    "publisherProvidedId": "370720",
    "success": true
  },
  {
    "publicationId": "CAow5rTUCw",
    "publisherProvidedId": "171385",
    "success": true
  }]
}
{
  "anyFailure": true,
  "anySuccess": true,
  "links": [{
    "publicationId": "CAowqfCKCw",
    "publisherProvidedId": "370720",
    "success": false
  },
  {
    "publicationId": "CAow5rTUCw",
    "publisherProvidedId": "171385",
    "success": true
  }]
}

Полный пример клиентской части для linkSubscription

<script
  async
  type="application/javascript"
  subscriptions-control="manual"
  src="https://news.google.com/swg/js/v1/swg.js">
</script>

<script>

  function linkSubscription(ppid) {
    self.SWG.push(async (subscriptions) => {
      try {
        const result = await subscriptions.linkSubscription({
          publisherProvidedId: ppid,
        })
        console.log(result)
      } catch(e) {
        console.log(e)
      }
    })
  }

  document.addEventListener('DOMContentLoaded', function () {
    (self.SWG = self.SWG || []).push(subscriptions => {
      subscriptions.init("PUBLICATION_ID");

      //Configure the event manager for analytics integration
      subscriptions.getEventManager().then(manager => {
        manager.registerEventListener((event) => {
            // Add code here to send the event to your analytics
            // sendToAnalytics(event);
          console.log(event);
        });
      });
    });

    document
      .querySelector("SELECTOR")
      .addEventListener('click', function(){
        linkSubscription(PPID)
      })
  });
</script>

Создайте идентификатор клиента OAuth

Хотя клиент OAuth не требуется для Subscription Linking, клиент OAuth может использоваться для создания списка разрешенных доменов для вашего проекта. Авторизованные домены — это список доменов, с которых вашему клиентскому javascript разрешено совершать вызовы. Вероятно, у вашей публикации уже есть настроенный в Publisher Center идентификатор клиента OAuth для использования с swg.js

Тестирование

Чтобы протестировать реализацию Subscription Linking на стороне клиента, код должен быть запущен с сервера с авторизованным источником JavaScript.

  1. Для производственного использования авторизованные источники могут поступать либо из настроенного клиента OAuth, либо из списка проверенных доменов в настройках публикации в Центре издателей.
  2. Для разработки или промежуточного использования с непроверяемым доменом (например, localhost или непубличный сервер) домен должен быть указан в настроенном клиенте OAuth.

Устранение ошибок

Наиболее распространенной проблемой при тестировании клиентского javascript является получение ошибки 403 - Not Authorized при попытке запустить javascript. Чтобы решить эту проблему, убедитесь, что вы запускаете javascript из проверенного домена в Publisher Center или что вы запускаете код на хосте, который находится в авторизованных источниках js связанного клиента OAuth.

Следующий шаг

Поздравляем с завершением клиентской интеграции JavaScript. Теперь вы можете перейти к серверной интеграции . Это обязательный шаг для синхронизации прав ваших читателей. При реализации и использовании требуемой серверной функции UpdateReaderEntitlements вы гарантируете, что нужные статьи будут выделены для нужных подписчиков.