@pushplatform/web-sdk

中文文档
0.3.0发布于 2026/11/02MITTypeScriptESM + CJS零依赖

PushPilotдлясайтов:Web推,подпискаиотписка,обработканажатийнауведомления

中文使用文档
文档目录8 节
  1. Установка
  2. Настройкасайта
  3. Минимальныйпример
  4. Подключение обычным脚本标签
  5. Service worker * переход по нажатию
  6. Поддержка браузеров * ограничения
  7. Совместимость
  8. Документация

PushPilot Web SDK

PushPilotподключает网络推动квашемусайту:запрашиваетразрешениепользователя, регистрируетподпискувPushPilot,позволяетотписатьсяиобрабатыватьнажатия науведомления。Работает через NPM или обычный <script>.

Установка

npm install @pushplatform/[email protected]
import { PushPilot } from '@pushplatform/web-sdk';

ПакетвключаетESM, CommonJS,打印稿声明исборкудля脚本标记。 运行时——зависимостейнет。

Настройкасайта

Для подключения нужны:

  • HTTPS URL API PushPilot, без /v1 вконце。
  • UUIDприложенияPushPilot——тогоже,чтодляiOS和Android。
  • Общий бессрочный ключ приложения из консоли。ОннамеренноизвлекаемизJavaScriptиразрешаетрегистрациюустройствиотправкувэтомприложении。
  • Разрешённый起源сайтавнастройкахWeb推,например https://shop.example.
  • VAPID公钥этого приложения。私人索然乏味的关键иapn / FCM凭证остаютсянасервере。

Настройки находятся приложении→Web推送。Проект * окружение выбирать не нужно。Отдельный шлюз не требуется。

Разместите工人на своём сайте。Для проекта * публичной директорией public:

mkdir -p public
cp node_modules/@pushplatform/web-sdk/dist/service-worker.js public/pushpilot-sw.js

После публикации сайта файл должен открываться по /pushpilot-sw.js сJavaScript MIME类型,без HTML回退。Обновляйте копию worker при обновлении SDK。

Минимальныйпример

Добавьтекнопкинастраницуиподключитефайлприложениячерезваш打包机:

<button id="subscribe" disabled>Разрешить уведомления</button>
<button id="unsubscribe" disabled>Отписаться</button>
<p id="push-status" role="status"></p>

ВфайлеприложениязаменитеURL, UUIDипубличныеключисвоимизначениями:

import { PushPilot } from '@pushplatform/web-sdk';

const subscribe = document.getElementById('subscribe');
const unsubscribe = document.getElementById('unsubscribe');
const output = document.getElementById('push-status');
const showError = error => {
  output.textContent = `${error.code || 'error'}: ${error.message}`;
};

subscribe.onclick = async () => {
  subscribe.disabled = true;
  try {
    // Запрос разрешения вызывается только по нажатию пользователя.
    const permission = await PushPilot.requestPermission();
    if (permission !== 'granted') {
      output.textContent = permission === 'denied'
        ? 'Уведомления запрещены. Разрешите их в настройках сайта в браузере.'
        : 'Запрос закрыт. Нажмите кнопку, чтобы повторить.';
      return;
    }
    await PushPilot.subscribe();
    output.textContent = 'Подписка зарегистрирована в PushPilot';
  } catch (error) { showError(error); }
  finally { subscribe.disabled = false; }
};

unsubscribe.onclick = async () => {
  unsubscribe.disabled = true;
  try {
    await PushPilot.unsubscribe();
    output.textContent = 'Подписка удалена';
  } catch (error) { showError(error); }
  finally { unsubscribe.disabled = false; }
};

async function start() {
  if (!PushPilot.isSupported()) {
    output.textContent = 'Web Push недоступен в этом браузере или на этом origin.';
    return;
  }
  try {
    await PushPilot.initialize({
      apiBaseURL: 'https://api.example.com',
      applicationId: 'YOUR_APPLICATION_UUID',
      apiKey: 'APPLICATION_KEY',
      vapidPublicKey: 'YOUR_PUBLIC_VAPID_KEY',
      serviceWorkerPath: '/pushpilot-sw.js',
      serviceWorkerScope: '/',
    });
    PushPilot.onNotificationClicked(notification => {
      output.textContent = `Открыто уведомление: ${notification.title || notification.id}`;
    });
    subscribe.disabled = false;
    unsubscribe.disabled = false;
    output.textContent = 'PushPilot подключён';
  } catch (error) { showError(error); }
}

start();

initialize() не запрашивает разрешение。При denied повторный вызов кнопкой не изменит настройку браузера;пользовательдолженразрешитьуведомлениявручную。 Ошибки API доступны через error.code и error.context?.status. Неуспешную операцию можно повторить явно。При ошибке API во время отписки SDK сохраняет браузерную подписку для повтора。

Подключение обычным脚本标签

Скопируйте dist/sdk.global.js из установленного пакета, публичную директорию ,сайтанапример /assets/pushpilot/sdk.global.js. 工人разместите как описано выше。

<script src="/assets/pushpilot/sdk.global.js"></script>
<script src="/main.js"></script>

В main.js используйте код примера, заменив строку import на:

const { PushPilot } = window.PushPilot;

Подключайте скрипты после HTML кнопок。打包机и type="module" для этого способа ненужны。

Service worker * переход по нажатию

工人должен находиться на来源сайта。Файл /pushpilot-sw.js позволяет范围 /;для /shop/sw.js стандартный scope - /shop/. Текущая страница должна находиться находиться этом范围。Более широкий范围требует заголовка Service-Worker-Allowed ответе工人。

Если на сайте уже есть经典工作者,скопируйте dist/service-worker.js по адресу /assets/pushpilot/service-worker.js * добавьте * существующий工人:

importScripts('/assets/pushpilot/service-worker.js');

Укажите путь существующего工人 serviceWorkerPath. Не регистрируйте второй 工人:тем же范围。

ДляпереходапонажатиюпередайтURLевданныхуведомления:

{"title":"Заказ готов","body":"Откройте заказ","data":{"url":"/orders/123"}}

工人открываестURLвоего起源илифокусируетужеоткрытуюстраницусэтим URL。Относительныйадресразрешаетсяотносительно范围;внешний или некорректный URL заменяется адресом范围。 custom_data.url такжеподдерживается。

onNotificationClicked() сообщаетсобытиеужеоткрытойиинициализированной странице。Призапускесайтаиззакрытогосостоянияобрабатывайтеадресстраницы иегопараметры:回调послеоткрытияновойстраницынегарантируется。

Поддержка браузеров * ограничения

  • Дляустановкипакетачерезnpmиспользуйтеnode . js 22.14 +。Сам SDK выполняется вбраузере。
  • Нужны Service Worker, Push API, Notifications API。Проверяйте PushPilot.isSupported() доинициализации:наличиефункцийзависитотбраузера, платформы * настроек пользователя。 Таблица совместимости推送API.
  • В生产нужны HTTPS для сайта * API。Для локальной разработки допустимы http://localhost и http://127.0.0.1.
  • НWeb推动даiOS / iPadOS 16.4 +оступенвеб——приложениям,добавленнымнадомашний экран。 УсловияWebKit.
  • Нужендоступный localStorage. Один экземпляр SDK использует одно приложение настранице;не переключайте их после инициализации。
  • Только, прежнем режиме browserAuth: true:浏览器凭证действует 7 суток。 renewInstallationCredential() заменяет действующую凭据。Длявосстановленияпросроченнойилиутраченной凭据 идля login(userId, identityProof) нужен доверенный сервер вашего сайта。 Конфигурация * методы.
  • SDK регистрирует经典worker。Существующий模块工作者требует адаптации регистрации на стороне сайта。Обновление工人может ждать закрытия вкладок; согласуйтеего push и notificationclick обработчики r . PushPilot。
  • Успешный subscribe() подтверждает регистрацию подписки * api。Доставка * показ уведомлениязависятотсервера,推动——сервиса,ОСибраузера;этот ответ их не подтверждает。

Совместимость

Также доступны именованный экспорт PushPlatform 默认导出。Длянового кодаиспользуйте PushPilot.

По умолчанию SDK обращается /v1/installations 网址:общим ключом приложения。ОдинIDиключиспользуютсянасайте,iOS、Androidисервере。У ключа нет срока действия;отзыв/перевыпуск доступны / консоли。Ключнедаётадминистративныхправидоступакдругимприложениям。

Прежнийрежим browserAuth: true с wbpub_/安装证明сохранёндлясовместимостисуществующихсайтов。Он не нужен для новой модели общего ключа。Егоистечение/更新/ identityProofотносятсятолькокэтому遗产——режиму。

Документация

Лицензия: 麻省理工学院.

版本与发布记录

@pushplatform/web-sdk 共发布 5 个版本,首次发布于 2026/10/12;过去 12 个月发布了 5 个版本。

版本发布日期距今
0.3.0latest2026/11/021 天前
0.2.02026/11/011 天前
0.1.1next2026/10/1222 天前
0.1.02026/10/1222 天前
0.0.0-stage2026/10/1222 天前

关于 @pushplatform/web-sdk 的常见问题

@pushplatform/web-sdk 是什么?

PushPilotдлясайтов:Web推,подпискаиотписка,обработканажатийнауведомления

如何安装 @pushplatform/web-sdk?

在项目目录运行 npm install @pushplatform/web-sdk,或使用 pnpm add / yarn add / bun add。

@pushplatform/web-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@pushplatform/web-sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@pushplatform/web-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.14.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@pushplatform/web-sdk 可以商用吗?

@pushplatform/web-sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@pushplatform/web-sdk 还在维护吗?

最新版本 0.3.0 发布于 2026/11/02(1 天前);至今共发布 5 个版本,其中过去 12 个月发布了 5 个;首次发布于 2026/10/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。