OneSignal вводит жёсткий потолок на бесплатный план. Скоро мобильный push и in-app сообщения перестанут быть бесплатными выше 1000 MAU. Новые аккаунты упрутся в лимит 1 сентября 2026, существующие — 1 октября. Если в вашем приложении больше тысячи активных пользователей в месяц, у вас есть три варианта: остаться и платить, урезать аудиторию или переехать.

Что меняется и когда

Калькулятор стоимости плана OneSignal Growth показывает $31 в месяц при 1000 активных мобильных пользователей
Source: OneSignal
  • Бесплатный план продолжает работать ниже 1000 MAU. Выше этой отметки мобильный push и in-app переходят на платный тариф.
  • Даты: лимит вступает в силу для новых аккаунтов с 1 сентября 2026 и для существующих — с 1 октября 2026, согласно billing FAQ OneSignal.
  • Порог: менее 1000 MAU для мобильного push и in-app. При превышении эти каналы перестают отправлять сообщения до апгрейда.
  • Что не тронули: web push, email и SMS продолжают работать в рамках тех же лимитов плана, что и раньше. Изменение касается только мобильных каналов.
  • Journeys тоже затрагиваются: любой шаг journey, который отправляет push или in-app сообщение, просто пропускает мобильные подписки.
  • Удаление подписчиков не выход. Если вы удалите мобильные подписки, которые были активны за последние 30 дней, план сможет заново включить отправку только через 30 дней после удаления — и только если весь этот период вы остаётесь под лимитом.

Как работает миграция

Если вы решили переехать, вот главное, что меняет весь план: миграцию проводим мы. Ваша часть работы — три пункта: файл экспорта, ваши push-credentials и замена SDK в следующем релизе приложения. Всё остальное (очистка данных, маппинг платформ, восстановление тегов, импорт аудитории, проверка доставляемости) — на нашей стороне.

Переход идёт по двум трекам одновременно. Разовый импорт переносит вашу существующую базу, так что аудитория остаётся доступной с первого дня — ещё до того, как хоть один пользователь обновит приложение. Дальше SDK берёт на себя каждое устройство по мере того, как его владелец устанавливает новую сборку. Нужны оба трека, и ни один не блокирует другой.

1. Что мы можем и не можем перенести

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

КаналПереносится?Как
iOS push (APNs)ДаМы импортируем ваши существующие device tokens. Они продолжают работать, потому что токен принадлежит вашему приложению и вашему APNs-ключу, а не OneSignal.
Android push (FCM)ДаТак же: токены принадлежат вашему проекту Firebase.
Huawei push (HMS)ДаТак же, с использованием ваших HMS-credentials.
Подписчики email и SMSДа, с настройкой каналаАдреса и номера телефонов импортируются. Для отправки также нужно настроить канал на нашей стороне: верифицированный домен отправки с DKIM для email, отправителя или провайдера для SMS. Мы настраиваем это вместе с вами до первой отправки.
Web pushНет, вместо этого — повторная подпискаБраузерные подписки криптографически привязаны к ключам OneSignal и не могут быть перенесены ни одним провайдером. Ваши подписчики возвращаются незаметно для них самих: см. раздел про web push.
История сообщений, статистика доставки, journeysНетИсторические данные остаются в OneSignal. Экспортируйте все отчёты, которые хотите сохранить, до закрытия аккаунта.
Определения сегментовПересобираются, а не импортируютсяAPI OneSignal возвращает названия и размеры сегментов, но не их фильтры, так что импортировать нечего. Мы воссоздаём их в Pushwoosh.
Канал
1 / 7
iOS push (APNs)
Переносится?
Да
Как
Мы импортируем ваши существующие device tokens. Они продолжают работать, потому что токен принадлежит вашему приложению и вашему APNs-ключу, а не OneSignal.
Канал
2 / 7
Android push (FCM)
Переносится?
Да
Как
Так же: токены принадлежат вашему проекту Firebase.
Канал
3 / 7
Huawei push (HMS)
Переносится?
Да
Как
Так же, с использованием ваших HMS-credentials.
Канал
4 / 7
Подписчики email и SMS
Переносится?
Да, с настройкой канала
Как
Адреса и номера телефонов импортируются. Для отправки также нужно настроить канал на нашей стороне: верифицированный домен отправки с DKIM для email, отправителя или провайдера для SMS. Мы настраиваем это вместе с вами до первой отправки.
Канал
5 / 7
Web push
Переносится?
Нет, вместо этого — повторная подписка
Как
Браузерные подписки криптографически привязаны к ключам OneSignal и не могут быть перенесены ни одним провайдером. Ваши подписчики возвращаются незаметно для них самих: см. раздел про web push.
Канал
6 / 7
История сообщений, статистика доставки, journeys
Переносится?
Нет
Как
Исторические данные остаются в OneSignal. Экспортируйте все отчёты, которые хотите сохранить, до закрытия аккаунта.
Канал
7 / 7
Определения сегментов
Переносится?
Пересобираются, а не импортируются
Как
API OneSignal возвращает названия и размеры сегментов, но не их фильтры, так что импортировать нечего. Мы воссоздаём их в Pushwoosh.

Сколько это занимает по времени

Замена SDK и чистая тестовая отправка — работа на день для одного разработчика. Импорт идёт параллельно на нашей стороне, и именно он сохраняет ваш охват нетронутым с первого дня: импортированные устройства доступны для отправки ещё до того, как кто-то обновит приложение. Дальше аудитория вашего приложения переходит на Pushwoosh SDK в темпе, с которым пользователи устанавливают новую сборку, — это вопрос недель, и он никогда не охватывает буквально каждое устройство. Именно поэтому и существует импорт.

Порядок важен:

  1. Экспортируйте вашу аудиторию. Пришлите нам ваш OneSignal app_id и App API key — и мы сами вытянем экспорт, либо экспортируйте CSV самостоятельно. Подробности ниже.
  2. Пришлите нам ваши push-credentials. Те же ключи, с которыми уже отправляет OneSignal. Мы загружаем их до начала импорта, чтобы каждое импортированное устройство было доступно для отправки.
  3. Замените SDK. Удалите OneSignal SDK, добавьте Pushwoosh SDK, инициализируйте его с вашим application code Pushwoosh и device API token. Шаги по платформам — в разделах «Вариант A–C».
  4. Проверьте доставку. Зарегистрируйте тестовое устройство и отправьте себе push, прежде чем трогать продакшн-трафик.
  5. Утвердите таблицу тегов. Мы строим её на основе вашего экспорта; вы вычёркиваете неиспользуемые теги и отмечаете те, что могут содержать несколько значений. Мы импортируем и воссоздаём ваши сегменты.
  6. Переключите отправку. Как только тестовая доставка чистая, а импорт подтверждён, направьте кампании на Pushwoosh и остановите отправку из OneSignal.

2. Экспортируйте вашу аудиторию

Вариант A (рекомендуем): мы делаем это за вас. Пришлите нам ваш OneSignal app_id и App API key — и мы сами вытянем экспорт. На этом ваша часть заканчивается.

Вариант B: делаете сами. В OneSignal перейдите в Audience > Subscriptions и экспортируйте CSV, либо вызовите export endpoint:

Terminal window
curl -X POST 'https://api.onesignal.com/players/csv_export?app_id=YOUR_APP_ID' \
-H 'Authorization: Key YOUR_APP_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"extra_fields":["external_user_id","timezone_id","notification_types"]}'

В ответе возвращается csv_file_url — gzip-сжатый CSV, доступный для скачивания в течение трёх дней.

Экран OneSignal Subscription Records с выделенной кнопкой Export в правом верхнем углу
Source: OneSignal

Эти столбцы обязательно должны быть в файле. Всё остальное — опционально, мы это игнорируем.

СтолбецЗачем он нужен
identifierСам push-токен. Строку без него перенести нельзя.
idID подписки OneSignal. На нашей стороне становится идентификатором устройства.
device_typeСообщает нам платформу: iOS, Android, Huawei, email, SMS.
invalid_identifierПомечает строки отписавшихся, чтобы мы их пропустили.
tagsВаши кастомные теги. Мы воссоздаём их в Pushwoosh.
external_user_idВаш собственный user id. Не даёт устройству задублироваться, когда его зарегистрирует наш SDK.
timezone_idВключает Send by Timezone в Pushwoosh.
Столбец
1 / 7
identifier
Зачем он нужен
Сам push-токен. Строку без него перенести нельзя.
Столбец
2 / 7
id
Зачем он нужен
ID подписки OneSignal. На нашей стороне становится идентификатором устройства.
Столбец
3 / 7
device_type
Зачем он нужен
Сообщает нам платформу: iOS, Android, Huawei, email, SMS.
Столбец
4 / 7
invalid_identifier
Зачем он нужен
Помечает строки отписавшихся, чтобы мы их пропустили.
Столбец
5 / 7
tags
Зачем он нужен
Ваши кастомные теги. Мы воссоздаём их в Pushwoosh.
Столбец
6 / 7
external_user_id
Зачем он нужен
Ваш собственный user id. Не даёт устройству задублироваться, когда его зарегистрирует наш SDK.
Столбец
7 / 7
timezone_id
Зачем он нужен
Включает Send by Timezone в Pushwoosh.

Обратите внимание: external_user_id и timezone_id не входят в экспорт по умолчанию. Запросите их явно через параметр extra_fields выше или через column picker в дашборде.

3. Пришлите нам ваши push-credentials

Это те же credentials, которые OneSignal уже использует для отправки от вашего имени, так что создавать ничего нового не нужно. Мы не можем вытащить их из OneSignal сами: загруженный ключ больше никогда не скачивается обратно, поэтому этот шаг — только ваш.

ПлатформаЧто нам нужноГде это взять
iOSAPNs Auth Key (.p8), Key ID, Team ID, app bundle idApple Developer > Certificates, Identifiers & Profiles > Keys. Не отзывайте ключ, который использует OneSignal — один ключ может обслуживать оба сервиса.
AndroidFirebase service account JSON (FCM v1)Firebase Console > Project settings > Service accounts. Это должен быть тот же проект Firebase, который уже использует ваше приложение.
HuaweiApp ID и App SecretAppGallery Connect > your project > App information.
Платформа
1 / 3
iOS
Что нам нужно
APNs Auth Key (.p8), Key ID, Team ID, app bundle id
Где это взять
Apple Developer > Certificates, Identifiers & Profiles > Keys. Не отзывайте ключ, который использует OneSignal — один ключ может обслуживать оба сервиса.
Платформа
2 / 3
Android
Что нам нужно
Firebase service account JSON (FCM v1)
Где это взять
Firebase Console > Project settings > Service accounts. Это должен быть тот же проект Firebase, который уже использует ваше приложение.
Платформа
3 / 3
Huawei
Что нам нужно
App ID и App Secret
Где это взять
AppGallery Connect > your project > App information.

Мы загружаем credentials в ваше приложение Pushwoosh до начала импорта. Этот порядок важен: импорт без credentials даёт базу, полную устройств, которым ничего нельзя доставить.

4. Проверьте теги и сегменты

Редактор сегментов OneSignal с сегментом, построенным на фильтре Last Session less than 168 hours ago
Source: OneSignal

Теги переносятся, и вам не нужно инвентаризировать их самостоятельно. В OneSignal тег — это обычная строка key/value без объявленного типа. В Pushwoosh каждый тег объявляется один раз для приложения с типом (String, Integer, Boolean, Date, List или Price), и только после этого хранит значения.

Как только у нас есть ваш экспорт, мы присылаем вам таблицу для проверки тегов, построенную прямо из файла. В ней перечислен каждый найденный тег с заполненными данными: примеры значений, сколько устройств несут значение, и предлагаемый тип. Ваша часть — две колонки: вычеркнуть теги, которыми вы больше не пользуетесь, и отметить те, что могут содержать несколько значений сразу. Всё остальное — предложение, которое можно утвердить как есть.

Почему мы спрашиваем, а не угадываем: тип тега фиксируется в момент создания, поэтому многозначный тег, который мы создадим как обычный String, придётся удалять и импортировать заново. Тег, который в экспорте выглядит однозначным, — это именно тот случай, который мы не можем определить по данным. Если ответа нет, мы импортируем каждый тег с тем типом, который вывели сами, и сообщаем, где именно догадывались.

Сегменты пересобираются. API OneSignal умеет фильтровать экспорт по сегменту и перечислять названия ваших сегментов, но не возвращает фильтры, которые за ними стоят, — поэтому импортировать нечего. Два пути:

  1. Пересобрать условия (рекомендуем). Пришлите нам список сегментов с их фильтрами — скриншоты подойдут. Мы воссоздаём их поверх импортированных тегов. Пересобранные сегменты динамические: они продолжают обновляться по мере изменения аудитории.
  2. Заморозить состав. Мы делаем один экспорт на каждый сегмент и помечаем каждый файл тегом-маркером, например os_segment = vip_users. Быстро, но результат — снимок, который сам себя не обновляет.

Сегменты, построенные на собственных поведенческих данных OneSignal (количество сессий, время в приложении, «Active Users», «Engaged Users»), нельзя воспроизвести в момент импорта, потому что эта история остаётся в OneSignal. Их аналоги в Pushwoosh начинают наполняться, как только наш SDK попадает в ваше приложение.

5. Что делаем мы со своей стороны

  1. Создаём и настраиваем ваше приложение Pushwoosh, загружаем credentials из шага 3.
  2. Чистим экспорт: убираем строки отписавшихся и строки с пустым токеном, мапим коды платформ OneSignal на наши, конвертируем теги, мапим ваш external_user_id на наш User ID.
  3. Создаём схему тегов, затем импортируем аудиторию батчами, проверяя каждый батч.
  4. Отправляем тестовый push небольшой контрольной группе и сверяем результат с ожидаемым.
  5. Отчитываемся: сколько подписок было в файле, сколько импортировано и причина для каждой пропущенной строки.

6. Выпустите Pushwoosh SDK в следующем релизе приложения

Импорт делает существующую аудиторию доступной сразу, но это мост, а не конечная точка. Только Pushwoosh SDK внутри вашего приложения может подхватить новый токен, когда ОС его ротирует (переустановка, восстановление, апгрейд ОС), регистрировать пользователей, которые устанавливают приложение после миграции, и репортить открытия, in-app сообщения и удаления приложения.

Удалите OneSignal SDK в том же релизе. Два push SDK в одной сборке конкурируют за одни и те же notification callbacks, и мы не тестируем такую комбинацию. Пока OneSignal продолжает отправлять сообщения во время раскатки новой сборки — это нормально и ожидаемо; держать оба SDK внутри одной сборки — нет. Шаги по конкретным платформам — в разделах «Вариант A–C» ниже.

7. Web push: как возвращаются ваши подписчики

Web push не импортируется, и это жёсткое техническое ограничение, а не решение Pushwoosh. Подписка web push подписана парой VAPID-ключей того, кто её создал, а приватный ключ OneSignal никогда не покидает OneSignal — в их собственной документации ключи web-подписки помечены как доступные только SDK OneSignal. Ни один провайдер не может импортировать web-подписки другого провайдера. Вместо этого работает незаметная повторная подписка:

  1. Удалите сниппет OneSignal и явно отмените регистрацию его service worker. Если оставить старый worker на месте, два worker’а начнут конкурировать на одном домене.
  2. Установите Pushwoosh Web Push SDK с нашим service worker в корне вашего домена.
  3. Инициализируйте его с вашим application code и вашим device API token (apiToken), затем включите автоматическую подписку (autoSubscribe: true, либо вызовите Pushwoosh.subscribe()). Без токена вызовы SDK будут возвращать 401.

Вернувшийся посетитель после этого подписывается заново незаметно для себя. Разрешение на уведомления, которое хранит браузер, принадлежит вашему домену, а не предыдущему провайдеру, так что второй запрос не появляется, и пользователь ничего не замечает. Скорость восстановления базы зависит от того, как быстро люди возвращаются: обычно основная часть аудитории возвращается в течение недели, с хвостом в течение следующего месяца.

Три случая, о которых стоит знать:

  • Посетители, заблокировавшие уведомления, не могут быть подписаны заново. Браузер отказывает и больше не будет их спрашивать. Они остаются вне базы — и это правильный итог.
  • Посетители, которые отписались на вашем сайте, но при этом разрешение браузера осталось выданным, будут подписаны заново незаметно для себя. Технически всё корректно, но это возвращает людей, которые ушли осознанно. Если у вас есть suppression-лист (по вашему user id или email), пришлите его нам — мы исключим этих пользователей из каждой кампании. Если списка нет, рекомендуем подписывать по явному клику (колокольчик или запрос), а не автоматически.
  • Если ваш web push работал на поддомене, предоставленном предыдущим вендором, а не на вашем собственном домене, разрешение принадлежит этому поддомену. Таких подписчиков вернуть нельзя — им придётся подписаться заново на вашем сайте. Проверьте, какая у вас настройка, прежде чем планировать переход.

8. Чего ожидать после импорта

  • Устройство может ненадолго появиться дважды. Импортированная запись несёт идентификатор OneSignal; когда на том же устройстве запускается наш SDK, оно регистрируется под собственным идентификатором. Устаревшая запись удаляется отслеживанием удаления приложения или автоматической очисткой неактивности через 90 дней. Указание external_user_id тем временем удерживает обе записи в рамках одного профиля пользователя.
  • Мёртвые токены уходят на первой же кампании. Apple и Google раскрывают, что токен недействителен, только когда сообщение реально отправлено, так что первая отправка после миграции заодно чистит вашу базу.
  • Импортированное число будет меньше, чем счётчик в OneSignal. Строки отписавшихся, строки с пустым токеном и строки web push исключаются намеренно. Наш отчёт точно показывает, сколько попало в каждую группу.

9. Куда кликать

Точные пути для пунктов на вашей стороне, чтобы никому не пришлось искать их по дашбордам.

ЗадачаПуть клика
OneSignal: экспортировать аудиториюAudience > Subscriptions > опциональный фильтр по сегменту > column picker > Export
OneSignal: App ID и API keySettings > Keys & IDs. Возьмите App ID и App API key; в запросе экспорта он передаётся как Authorization: Key <App API key>
Apple: APNs Auth Keydeveloper.apple.com > Certificates, Identifiers & Profiles > Keys > + > Apple Push Notification service (APNs) > Continue > Register > Download. Файл .p8 скачивается только один раз; Key ID — на том же экране, а Team ID находится в Membership details.
Firebase: service account JSONconsole.firebase.google.com > your project > иконка шестерёнки > Project settings > Service accounts > Generate new private key
Huawei: App ID и App SecretAppGallery Connect > My projects > your project > your app > Project settings > App information
Pushwoosh: application code и device API tokenControl Panel > your application > Settings > API Access. Токен должен иметь права для этого приложения.
Ваш сайт: удалите старый workerУдалите файлы service worker OneSignal из корня сайта и отмените регистрацию запущенного worker'а: navigator.serviceWorker.getRegistrations().then(rs => rs.forEach(r => r.unregister()))
Задача
1 / 7
OneSignal: экспортировать аудиторию
Путь клика
Audience > Subscriptions > опциональный фильтр по сегменту > column picker > Export
Задача
2 / 7
OneSignal: App ID и API key
Путь клика
Settings > Keys & IDs. Возьмите App ID и App API key; в запросе экспорта он передаётся как Authorization: Key <App API key>
Задача
3 / 7
Apple: APNs Auth Key
Путь клика
developer.apple.com > Certificates, Identifiers & Profiles > Keys > + > Apple Push Notification service (APNs) > Continue > Register > Download. Файл .p8 скачивается только один раз; Key ID — на том же экране, а Team ID находится в Membership details.
Задача
4 / 7
Firebase: service account JSON
Путь клика
console.firebase.google.com > your project > иконка шестерёнки > Project settings > Service accounts > Generate new private key
Задача
5 / 7
Huawei: App ID и App Secret
Путь клика
AppGallery Connect > My projects > your project > your app > Project settings > App information
Задача
6 / 7
Pushwoosh: application code и device API token
Путь клика
Control Panel > your application > Settings > API Access. Токен должен иметь права для этого приложения.
Задача
7 / 7
Ваш сайт: удалите старый worker
Путь клика
Удалите файлы service worker OneSignal из корня сайта и отмените регистрацию запущенного worker'а: navigator.serviceWorker.getRegistrations().then(rs => rs.forEach(r => r.unregister()))

Чек-лист до 1 октября

Держите это открытым по ходу дела. Ничего здесь не требует скачивания форм.

  • Экспорт отправлен нам, либо переданы app_id и App API key, чтобы мы вытянули его сами
  • Push-credentials отправлены: APNs key, FCM service account JSON, HMS-ключи, если используются
  • Каналы email и SMS настроены с нами, если вы переносите этих подписчиков
  • Таблица проверки тегов возвращена, неиспользуемые теги удалены, многозначные — отмечены
  • Фильтры сегментов отправлены нам (скриншоты подойдут) для пересборки
  • Pushwoosh SDK интегрирован в тестовую сборку, тестовый push получен
  • Импорт завершён, отчёт об импортированных и пропущенных проверен
  • Web Push SDK работает, старый service worker деактивирован — если вы используете web push
  • Тестовая доставка чистая на продакшн-сборке
  • Отправка переключена на Pushwoosh, отправка из OneSignal остановлена

Вариант A: нативные iOS и Android

iOS. Добавьте Pushwoosh iOS SDK, затем задайте два ключа в Info.plist: Pushwoosh_APPID с вашим application code Pushwoosh и PW_API_TOKEN с вашим device API token. Вызовите registerForPushNotifications() там, где сейчас вызывается запрос разрешения OneSignal, и сверьтесь с iOS quick start за точным сниппетом инициализации для вашей версии SDK. Удалите OneSignal SDK и его вызов регистрации, чтобы оба SDK не запрашивали токены одновременно.

Android. Добавьте зависимость com.pushwoosh:pushwoosh-firebase, затем добавьте две записи meta-data внутри тега <application> в AndroidManifest.xml: com.pushwoosh.appid с вашим application code и com.pushwoosh.apitoken с вашим device API token. Вызовите Pushwoosh.getInstance().registerForPushNotifications() из вашей логики инициализации. Конфигурация Firebase остаётся как есть, с google-services.json в проекте; FCM-credentials идут в Control Panel в настройках вашей Android-платформы.

Задавайте теги через setTags(), а идентификатор пользователя — через setUserId() в тех же местах, где вызывали аналоги OneSignal, чтобы сегментация продолжала работать после замены.

Вариант B: Flutter и FlutterFlow

FlutterFlow оборачивает Pushwoosh Flutter SDK, так что миграция — это в основном конфигурация, а не код.

  1. Добавьте пакет Pushwoosh Flutter как кастомную зависимость в проект.
  2. В кастомном action инициализируйте SDK с вашим application code и зарегистрируйтесь на push-уведомления, следуя Flutter quick start для текущего API инициализации.
  3. Задайте нативные credentials так же, как в любом Flutter-приложении: Pushwoosh_APPID и PW_API_TOKEN в Info.plist для iOS, com.pushwoosh.appid и com.pushwoosh.apitoken в AndroidManifest.xml для Android.
  4. Удалите интеграцию OneSignal, чтобы оба SDK не регистрировались одновременно.
  5. Мапите теги и user id через setTags() и setUserId() в ваших custom actions.

Вариант C: React Native

  1. Установите плагин: npm install pushwoosh-react-native-plugin --save, затем pod install для iOS.
  2. Инициализируйте и зарегистрируйтесь в корневом компоненте:
import Pushwoosh from 'pushwoosh-react-native-plugin';
Pushwoosh.init({ pw_appid: "YOUR_APPLICATION_CODE" });
Pushwoosh.register();
  1. Добавьте device API token нативно: PW_API_TOKEN в Info.plist для iOS, com.pushwoosh.apitoken как meta-data в AndroidManifest.xml для Android. На Android оставьте google-services.json в проекте — сами FCM-credentials хранятся в Control Panel.
  2. Удалите пакет OneSignal React Native и его вызов инициализации.
  3. Перенесите теги и user id через setTags() и setUserId() из API плагина.
Планируете переезд с OneSignal?

Свяжитесь с нашей командой — поможем с переходом.

Записаться на звонок

FAQ

Замена SDK и чистая тестовая отправка — работа на день для одного разработчика. Импорт вашей существующей базы идёт параллельно на нашей стороне и делает аудиторию доступной с первого дня, так что ничего не ждёт ревью в app store или обновлений у пользователей. Пришлите экспорт или API key заранее, чтобы мы могли начать.

Вопросы на любом этапе — к вашему onboarding-контакту в Pushwoosh. Мы предпочитаем ответить до импорта, чем сверять цифры после него.


Pushwoosh Team
Контент-команда в Pushwoosh
Поделиться

Похожие статьи

Показать все