O OneSignal colocou um teto rígido no plano grátis. Em breve, push mobile e mensagens in-app deixam de ser gratuitos acima de 1.000 usuários ativos mensais (MAU). Contas novas batem no limite em 1º de setembro de 2026, contas existentes em 1º de outubro. Se o seu app passa de mil usuários ativos por mês, você tem 3 caminhos: ficar e pagar, cortar audiência, ou migrar.
O que muda e quando
- O plano grátis continua funcionando abaixo de 1.000 MAU. Acima disso, push mobile e mensagens in-app passam para um nível pago.
- As datas: o limite vale para contas novas a partir de 1º de setembro de 2026 e contas existentes a partir de 1º de outubro de 2026, segundo o FAQ de cobrança do OneSignal.
- O limite: menos de 1.000 MAU para push mobile e in-app. Ao ultrapassar, esses canais param de enviar até você fazer upgrade.
- O que não muda: web push, email e SMS continuam funcionando dentro dos mesmos limites de plano de antes. A mudança é específica para mobile.
- As jornadas também são afetadas: qualquer etapa de jornada que envia um push ou uma mensagem in-app simplesmente pula as assinaturas mobile.
- Apagar assinantes não é uma saída. Se você apagar assinaturas mobile que estavam ativas nos últimos 30 dias, seu plano só pode ser reabilitado 30 dias após a exclusão, e somente se você ficar abaixo do limite durante todo esse período.
Como funciona a migração
Se você decidiu migrar, aqui está a parte que muda como você planeja isso: nós rodamos a migração para você. Do seu lado, o trabalho são três itens: um arquivo de exportação, suas credenciais de push, e a troca do SDK no seu próximo release do app. Tudo o mais (limpar os dados, mapear plataformas, recriar tags, importar a audiência, verificar a entregabilidade) é com a gente.
A troca roda em duas frentes ao mesmo tempo. Uma importação única move sua base existente, então sua audiência continua alcançável desde o primeiro dia, antes de qualquer usuário atualizar o app. O SDK então assume cada dispositivo conforme o dono instala o novo build. Você precisa das duas, e uma não trava a outra.
1. O que conseguimos e não conseguimos migrar
Você não precisa auditar isso sozinho. Aqui está o panorama completo desde já, para nada te pegar de surpresa no meio da migração.
| Canal | Migra? | Como |
|---|---|---|
| Push iOS (APNs) | Sim | Importamos seus tokens de dispositivo existentes. Eles continuam funcionando, porque um token pertence ao seu app e à sua chave APNs, não ao OneSignal. |
| Push Android (FCM) | Sim | Mesma lógica: os tokens pertencem ao seu projeto Firebase. |
| Push Huawei (HMS) | Sim | Mesma lógica, usando suas credenciais HMS. |
| Assinantes de email e SMS | Sim, com configuração de canal | Endereços e números de telefone são importados. O envio também precisa do canal configurado do nosso lado: um domínio de envio verificado com DKIM para email, um remetente ou provedor para SMS. Configuramos isso com você antes do primeiro envio. |
| Web push | Não, reinscrição no lugar | Assinaturas de navegador são vinculadas criptograficamente às chaves do OneSignal e não podem ser transferidas por nenhum provedor. Seus assinantes voltam silenciosamente: veja a seção de web push. |
| Histórico de mensagens, estatísticas de entrega, jornadas | Não | Dados históricos ficam no OneSignal. Exporte os relatórios que quiser manter antes de encerrar a conta. |
| Definições de segmento | Reconstruídas, não importadas | A API do OneSignal retorna nomes e contagens de segmentos, mas não os filtros por trás deles, então não há nada para importar. Nós recriamos os segmentos no Pushwoosh. |
Quanto tempo leva
A troca do SDK e um envio de teste limpo são um dia de trabalho para um desenvolvedor. A importação roda em paralelo do nosso lado, e é ela que mantém seu alcance intacto desde o primeiro dia: dispositivos importados já são alcançáveis antes de qualquer atualização do app. A audiência do seu app então migra para o SDK do Pushwoosh no ritmo em que seus usuários instalam o novo build, o que leva semanas e nunca chega a 100% dos dispositivos. É exatamente por isso que a importação existe.
A ordem importa:
- Exporte sua audiência. Nos envie seu
app_iddo OneSignal e uma App API key, e nós puxamos a exportação por conta própria, ou exporte o CSV você mesmo. Detalhes abaixo. - Nos envie suas credenciais de push. As mesmas chaves que o OneSignal já usa para enviar. Nós fazemos o upload delas antes da importação, para que todo dispositivo importado seja alcançável.
- Troque o SDK. Remova o SDK do OneSignal, adicione o SDK do Pushwoosh, inicialize com o seu código de aplicação do Pushwoosh e o token de API do dispositivo. Os passos por plataforma estão nas Versões A a C.
- Verifique a entrega. Registre um dispositivo de teste e envie um push para você mesmo antes de mexer no tráfego de produção.
- Aprove a planilha de tags. Nós a montamos a partir da sua exportação; você risca as tags mortas e marca as que têm múltiplos valores. Nós importamos e recriamos seus segmentos.
- Troque o envio. Assim que a entrega de teste estiver limpa e a importação confirmada, aponte suas campanhas para o Pushwoosh e pare de enviar pelo OneSignal.
2. Exporte sua audiência
Opção A (recomendada): nós fazemos por você. Nos envie seu app_id do OneSignal e uma App API key, e nós puxamos a exportação por conta própria. Sua parte termina aqui.
Opção B: você mesmo faz. No OneSignal, vá em Audience > Subscriptions e exporte o CSV, ou chame o endpoint de exportação:
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"]}'A resposta retorna csv_file_url, um CSV comprimido em gzip que fica disponível para download por três dias.
Estas colunas precisam estar no arquivo. Qualquer outra coisa é opcional e nós ignoramos.
| Coluna | Por que precisamos dela |
|---|---|
identifier | O próprio token de push. Uma linha sem ele não pode ser migrada. |
id | O id de assinatura do OneSignal. Ele se torna o identificador do dispositivo do nosso lado. |
device_type | Indica a plataforma: iOS, Android, Huawei, email, SMS. |
invalid_identifier | Marca linhas de quem cancelou a inscrição, para que sejam ignoradas. |
tags | Suas tags personalizadas. Nós as recriamos no Pushwoosh. |
external_user_id | O seu próprio user id. Ele evita que um dispositivo seja duplicado quando o nosso SDK o registra. |
timezone_id | Habilita o Send by Timezone no Pushwoosh. |
identifieriddevice_typeinvalid_identifiertagsexternal_user_idtimezone_idNota: external_user_id e timezone_id não fazem parte da exportação padrão. Peça explicitamente pelo parâmetro extra_fields acima, ou pelo seletor de colunas no dashboard.
3. Envie suas credenciais de push
Estas são as mesmas credenciais que o OneSignal já usa para enviar em seu nome, então nada novo precisa ser criado. Não conseguimos puxá-las do OneSignal por conta própria: uma chave que já foi enviada nunca mais pode ser baixada, então esse passo é seu.
| Plataforma | O que precisamos | Onde conseguir |
|---|---|---|
| iOS | APNs Auth Key (.p8), Key ID, Team ID, app bundle id | Apple Developer > Certificates, Identifiers & Profiles > Keys. Não revogue a chave que o OneSignal usa; uma chave pode servir para os dois. |
| Android | JSON de service account do Firebase (FCM v1) | Firebase Console > Project settings > Service accounts. Precisa ser o mesmo projeto Firebase que o seu app já usa. |
| Huawei | App ID e App Secret | AppGallery Connect > seu projeto > App information. |
Nós fazemos o upload das credenciais na sua aplicação Pushwoosh antes de a importação começar. Essa ordem importa: uma importação sem credenciais gera um banco cheio de dispositivos para os quais nada consegue entregar.
4. Revise suas tags e segmentos
As tags são migradas, e você não precisa inventariá-las sozinho. No OneSignal, uma tag é uma string simples de chave/valor, sem tipo declarado. No Pushwoosh, cada tag é declarada uma vez por aplicação com um tipo (String, Integer, Boolean, Date, List ou Price), e só então passa a guardar valores.
Assim que temos sua exportação, te enviamos uma planilha de revisão de tags montada a partir do próprio arquivo. Ela lista cada tag que encontramos, com os dados preenchidos: valores de amostra, quantos dispositivos carregam um valor, e o tipo que propomos. Sua parte são duas colunas: riscar as tags que você não usa mais, e marcar as que podem guardar vários valores ao mesmo tempo. Tudo o mais é uma proposta que você pode aprovar como está.
Por que perguntamos em vez de adivinhar: o tipo de uma tag é fixado assim que ela é criada, então uma tag multi-valor que criarmos como String simples precisa ser apagada e reimportada. Uma tag que parece ter valor único na exportação é exatamente o caso que não conseguimos detectar só pelos dados. Se não recebermos resposta, importamos cada tag com o tipo que inferimos e te avisamos quais foram um chute.
Os segmentos são reconstruídos. A API do OneSignal consegue filtrar uma exportação por segmento e listar os nomes dos seus segmentos, mas não retorna os filtros por trás deles, então não há nada para importar. Dois caminhos possíveis:
- Reconstruir as condições (recomendado). Nos envie sua lista de segmentos com os filtros; screenshots servem. Nós os recriamos em cima das tags importadas. Segmentos reconstruídos são dinâmicos: continuam se atualizando conforme sua audiência muda.
- Congelar a composição. Fazemos uma exportação por segmento e marcamos cada arquivo com uma tag de marcador, por exemplo
os_segment = vip_users. Rápido, mas o resultado é um retrato estático que não se atualiza sozinho.
Segmentos construídos em cima de dados comportamentais próprios do OneSignal (contagem de sessões, tempo de uso, “Active Users”, “Engaged Users”) não podem ser reproduzidos no momento da importação, porque esse histórico fica no OneSignal. Os equivalentes no Pushwoosh começam a se preencher assim que o nosso SDK entra no seu app.
5. O que fazemos do nosso lado
- Criamos e configuramos a sua aplicação Pushwoosh e fazemos upload das credenciais do passo 3.
- Limpamos a exportação: descartamos linhas de quem cancelou a inscrição e linhas com token vazio, mapeamos os códigos de plataforma do OneSignal para os nossos, convertemos as tags, e mapeamos o seu
external_user_idpara o nosso User ID. - Criamos o schema de tags, depois importamos a audiência em lotes, verificando cada lote.
- Enviamos um push de teste para um pequeno grupo de controle e comparamos o resultado com o esperado.
- Reportamos de volta: quantas assinaturas estavam no arquivo, quantas foram importadas, e o motivo de cada linha que ignoramos.
6. Coloque o SDK do Pushwoosh no seu próximo release do app
A importação torna sua audiência existente alcançável imediatamente, mas é uma ponte, não o destino final. Só o SDK do Pushwoosh dentro do seu app consegue pegar um novo token quando o SO o rotaciona (reinstalação, restauração, upgrade de SO), registrar usuários que instalarem depois da migração, e reportar aberturas, mensagens in-app e desinstalações.
Remova o SDK do OneSignal no mesmo release. Dois SDKs de push em um único build competem pelos mesmos callbacks de notificação, e nós não testamos essa combinação. Manter o OneSignal enviando enquanto o novo build é distribuído é normal e esperado; manter os dois SDKs dentro de um mesmo build não é. Os passos específicos de cada plataforma estão nas Versões A a C abaixo.
7. Web push: como seus assinantes voltam
Web push não é importável, e isso é um limite técnico real, não uma escolha do Pushwoosh. Uma assinatura de web push é assinada com o par de chaves VAPID de quem a criou, e a chave privada do OneSignal nunca sai do OneSignal — a própria documentação deles marca as chaves de assinatura web como disponíveis somente para os SDKs do OneSignal. Nenhum provedor consegue importar as assinaturas web de outro provedor. O que funciona no lugar disso é a reinscrição silenciosa:
- Remova o snippet do OneSignal e cancele explicitamente o registro do service worker dele. Deixar o worker antigo no lugar faz dois workers competirem no mesmo domínio.
- Instale o SDK de Web Push do Pushwoosh, com o nosso service worker na raiz do seu domínio.
- Inicialize com o seu código de aplicação e o seu token de API do dispositivo (
apiToken), depois habilite a inscrição automática (autoSubscribe: true, ou chamePushwoosh.subscribe()). Sem o token, as chamadas do SDK voltam como 401.
Um visitante que retorna é então reinscrito silenciosamente. A permissão de notificação que o navegador guarda pertence ao seu domínio, não ao seu provedor anterior, então nenhum segundo prompt aparece e o usuário não percebe nada. A velocidade com que sua base se recupera depende da velocidade com que as pessoas voltam: a maior parte da audiência costuma voltar dentro de uma semana, com uma cauda ao longo do mês seguinte.
Três casos para ficar de olho:
- Visitantes que bloquearam notificações não podem ser reinscritos. O navegador recusa e não vai perguntar de novo a eles. Eles ficam de fora, o que é o resultado correto.
- Visitantes que cancelaram a inscrição no seu site, mas mantiveram a permissão do navegador concedida, seriam reinscritos silenciosamente. Tecnicamente válido, mas traz de volta pessoas que saíram de propósito. Se você tem uma lista de supressão (pelo seu próprio user id ou email), nos envie e nós excluímos esses usuários de todas as campanhas. Se não tem, recomendamos inscrever só em um clique explícito (um sino ou um prompt) em vez de automaticamente.
- Se o seu web push rodava em um subdomínio do seu fornecedor anterior em vez do seu próprio domínio, a permissão pertence a esse subdomínio. Esses assinantes não podem ser recuperados e precisam optar por receber de novo no seu site. Confira qual configuração você tem antes de planejar a troca.
8. O que esperar depois da importação
- Um dispositivo pode aparecer duas vezes por um tempo. O registro importado carrega o identificador do OneSignal; quando o nosso SDK roda no mesmo dispositivo, ele se registra com o próprio identificador. O registro antigo é removido pelo rastreamento de desinstalação ou pela limpeza automática de 90 dias de inatividade. Fornecer o
external_user_idmantém os dois registros sob um único perfil de usuário nesse meio-tempo. - Tokens mortos saem na sua primeira campanha. Apple e Google só revelam que um token é inválido quando uma mensagem é de fato enviada, então o primeiro envio depois da migração também limpa sua base.
- Seu número importado vai ser menor que o contador do OneSignal. Linhas de quem cancelou a inscrição, linhas com token vazio e linhas de web push são excluídas por design. Nosso relatório te diz exatamente quantas caíram em cada grupo.
9. Onde clicar
Caminhos exatos para os itens do seu lado, para ninguém precisar caçar em dashboards.
| Tarefa | Caminho de clique |
|---|---|
| OneSignal: exportar a audiência | Audience > Subscriptions > filtro de segmento opcional > column picker > Export |
| OneSignal: App ID e API key | Settings > Keys & IDs. Pegue o App ID e uma App API key; a requisição de exportação envia como Authorization: Key <App API key> |
| Apple: APNs Auth Key | developer.apple.com > Certificates, Identifiers & Profiles > Keys > + > Apple Push Notification service (APNs) > Continue > Register > Download. O arquivo .p8 só é baixado uma vez; o Key ID está na mesma tela, e o Team ID fica em Membership details. |
| Firebase: JSON de service account | console.firebase.google.com > seu projeto > ícone de engrenagem > Project settings > Service accounts > Generate new private key |
| Huawei: App ID e App Secret | AppGallery Connect > My projects > seu projeto > seu app > Project settings > App information |
| Pushwoosh: código de aplicação e token de API do dispositivo | Control Panel > sua aplicação > Settings > API Access. O token precisa ter permissão para aquela aplicação. |
| Seu site: remova o worker antigo | Apague os arquivos do service worker do OneSignal da raiz do seu site, e cancele o registro do worker em execução: navigator.serviceWorker.getRegistrations().then(rs => rs.forEach(r => r.unregister())) |
Authorization: Key <App API key>navigator.serviceWorker.getRegistrations().then(rs => rs.forEach(r => r.unregister()))Checklist antes de 1º de outubro
Mantenha isso aberto enquanto avança. Nada aqui precisa de um formulário para baixar.
- Exportação enviada para nós, ou app_id mais uma App API key entregues para nós puxarmos
- Credenciais de push enviadas: chave APNs, JSON de service account do FCM, chaves HMS onde usado
- Canais de email e SMS configurados com a gente, se você migrar esses assinantes
- Planilha de revisão de tags devolvida, tags mortas removidas, tags multi-valor marcadas
- Filtros de segmento enviados para nós (screenshots servem) para reconstrução
- SDK do Pushwoosh integrado em um build de teste, push de teste recebido
- Importação concluída, relatório de importados e ignorados revisado
- SDK de web push no ar com o service worker antigo sem registro, se você usa web push
- Entrega de teste limpa em um build de produção
- Envio trocado para o Pushwoosh, envios do OneSignal parados
Versão A: iOS e Android nativos
iOS. Adicione o SDK iOS do Pushwoosh, depois defina duas chaves no Info.plist: Pushwoosh_APPID com o seu código de aplicação do Pushwoosh e PW_API_TOKEN com o seu token de API do dispositivo. Chame registerForPushNotifications() onde você hoje dispara o prompt do OneSignal, e siga o quick start de iOS para o snippet exato de inicialização da sua versão do SDK. Remova o SDK do OneSignal e a chamada de registro dele para que os dois não peçam token ao mesmo tempo.
Android. Adicione a dependência com.pushwoosh:pushwoosh-firebase, depois adicione duas entradas meta-data dentro da tag <application> do AndroidManifest.xml: com.pushwoosh.appid com o seu código de aplicação e com.pushwoosh.apitoken com o seu token de API do dispositivo. Chame Pushwoosh.getInstance().registerForPushNotifications() na sua lógica de inicialização. Sua configuração do Firebase continua como está, com o google-services.json no projeto; as credenciais do FCM vão no Control Panel, na configuração da sua plataforma Android.
Defina suas tags com setTags() e o identificador do seu usuário com setUserId() nos mesmos pontos onde você chamava os equivalentes do OneSignal, para a segmentação continuar funcionando depois da troca.
Versão B: Flutter e FlutterFlow
O FlutterFlow encapsula o SDK Flutter do Pushwoosh, então a migração é principalmente configuração, não código.
- Adicione o pacote Flutter do Pushwoosh como uma dependência customizada no seu projeto.
- Em uma custom action, inicialize o SDK com o seu código de aplicação e registre para notificações push, seguindo o quick start de Flutter para a API de inicialização atual.
- Defina as credenciais nativas do mesmo jeito que qualquer app Flutter faz:
Pushwoosh_APPIDePW_API_TOKENnoInfo.plistpara iOS,com.pushwoosh.appidecom.pushwoosh.apitokennoAndroidManifest.xmlpara Android. - Remova a integração do OneSignal para os dois SDKs não ficarem registrando ao mesmo tempo.
- Mapeie tags e user id com
setTags()esetUserId()nas suas custom actions.
Versão C: React Native
- Instale o plugin:
npm install pushwoosh-react-native-plugin --save, depoispod installpara iOS. - Inicialize e registre no seu componente raiz:
import Pushwoosh from 'pushwoosh-react-native-plugin';
Pushwoosh.init({ pw_appid: "YOUR_APPLICATION_CODE" });Pushwoosh.register();- Adicione o token de API do dispositivo de forma nativa:
PW_API_TOKENnoInfo.plistpara iOS,com.pushwoosh.apitokencomo meta-data noAndroidManifest.xmlpara Android. No Android, mantenha ogoogle-services.jsonno projeto — as credenciais do FCM em si ficam no Control Panel. - Remova o pacote React Native do OneSignal e a chamada de init dele.
- Leve suas tags e user id junto com
setTags()esetUserId()da API do plugin.
Fale com o nosso time para receber ajuda.
FAQ
Dúvidas a qualquer momento vão para o seu contato de onboarding no Pushwoosh. Preferimos responder antes da importação do que reconciliar números depois dela.
Artigos relacionados
Ver todos