
 При 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
}
Объединить несколько публикаций

 Вы можете объединить несколько публикаций для 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
- Если ваши клиентские вызовы JavaScript для привязки подписки исходят из ранее проверенного доменного имени, никаких действий не требуется.
- Если ваш JavaScript запускается с нового доменного имени, следуйте инструкциям по настройке идентификатора клиента SwG OAuth .
Тестирование
Чтобы протестировать реализацию Subscription Linking на стороне клиента, код должен быть запущен с сервера с авторизованным источником JavaScript.
- Для производственного использования авторизованные источники могут поступать либо из настроенного клиента OAuth, либо из списка проверенных доменов в настройках публикации в Центре издателей.
- Для разработки или промежуточного использования с непроверяемым доменом (например, localhost или непубличный сервер) домен должен быть указан в настроенном клиенте OAuth.
Устранение ошибок
 Наиболее распространенной проблемой при тестировании клиентского javascript является получение ошибки 403 - Not Authorized при попытке запустить javascript. Чтобы решить эту проблему, убедитесь, что вы запускаете javascript из проверенного домена в Publisher Center или что вы запускаете код на хосте, который находится в авторизованных источниках js связанного клиента OAuth.
Следующий шаг
 Поздравляем с завершением клиентской интеграции JavaScript. Теперь вы можете перейти к серверной интеграции . Это обязательный шаг для синхронизации прав ваших читателей. При реализации и использовании требуемой серверной функции UpdateReaderEntitlements вы гарантируете, что нужные статьи будут выделены для нужных подписчиков.