Descrição:
Não consigo obter pushToken, ninguém usa ios no painel, tento tudo, recrio certificados, chaves, uso ferramentas de provisionamento, experimento dispositivos reais diferentes.
No Android, tudo funciona perfeitamente.
Ambiente
latest 3.2.1
npm i --save react-native-onesignal
Version 9.3 (9E145)
meu package.json
Etapas para reproduzir o problema:
código js
export default class App extends Component {
componentWillMount() {
OneSignal.setLogLevel(7, 0);
OneSignal.init('here my ONESIGNAL APP ID - I checked it twenty times', { kOSSettingsKeyAutoPrompt: true });
OneSignal.setSubscription(true);
OneSignal.enableSound(true);
OneSignal.enableVibrate(true);
OneSignal.inFocusDisplaying(2);
OneSignal.getPermissionSubscriptionState((response) => {
console.log('Received permission subscription state: ', response);
});
}
Recebi resposta de getPermissionSubscriptionState
:
{
emailAddress:null
emailSubscribed:false
emailUserId:null
hasPrompted:true
notificationsEnabled:true
pushToken:null
subscriptionEnabled:false
userId:null
userSubscriptionEnabled:true
}
Claro, nenhum usuário ios no painel.
Adicional eu vejo logs no xcode
Called init with app ID: (null)
2018-05-14 11:21:03.636571+0300 rbtse[15320:6135130] Called init with app ID: xxxxxx-ea78-4b29-8b91-xxxxxxxxx (I changed app id)
2018-05-14 11:21:03.636758+0300 rbtse[15320:6135130] DEBUG: Downloading iOS parameters for this application
2018-05-14 11:21:03.642023+0300 rbtse[15320:6135181] VERBOSE: getNotificationTypes:mSubscriptionStatus: -1
2018-05-14 11:21:03.643531+0300 rbtse[15320:6135130] VERBOSE: registerForPushNotifications Called:waitingForApnsResponse: 1
2018-05-14 11:21:03.690752+0300 rbtse[15320:6135130] VERBOSE: oneSignalApplicationWillResignActive
2018-05-14 11:21:03.986984+0300 rbtse[15320:6135181] VERBOSE: network response (OSRequestGetIosParams): {
fba = 1;
}
2018-05-14 11:21:05.778574+0300 rbtse[15320:6135130] VERBOSE: oneSignalApplicationDidBecomeActive
2018-05-14 11:21:05.778918+0300 rbtse[15320:6135130] VERBOSE: getNotificationTypes:mSubscriptionStatus: -1
2018-05-14 11:21:05.792324+0300 rbtse[15320:6135130] VERBOSE: updateNotificationTypes called: 15
2018-05-14 11:21:05.792388+0300 rbtse[15320:6135130] VERBOSE: startedRegister: 1
Encontrei o mesmo problema https://github.com/geektimecoil/react-native-onesignal/issues/502
Então eu tento fazer o downgrade para https://github.com/geektimecoil/react-native-onesignal/tree/3.1.4 - siga todas as etapas e agora funciona!
Então a última versão não está funcionando
Oi, quando você instala a versão mais recente do react-native-onesignal (3.2.2) e executa react-native link react-native-onesignal
, você pode abrir o projeto Xcode e verificar se RCTOneSignal aparece corretamente como uma dependência em seu projeto como este?
pushToken
e userId
são nulos para mim também em dispositivos reais (no modo de liberação)
[email protected]:
version "3.2.2"
resolved "https://registry.yarnpkg.com/react-native-onesignal/-/react-native-onesignal-3.2.2.tgz#d1ae1e95cc301b940120de29a29ae90f478c9a97"
dependencies:
invariant "^2.2.2"
(não está no meu podfile neste momento)
@ Jarred-Sumner Tente desinstalar o aplicativo do seu dispositivo e, em seguida, reinstale-o. Ele solicita que você aceite as permissões de notificação push?
Além disso, apenas para verificar, você ativou o recurso Push Notifications em Project Settings> Capabilities, correto?
@ Jarred-Sumner Tente desinstalar o aplicativo do seu dispositivo e, em seguida, reinstale-o. Ele solicita que você aceite as permissões de notificação push?
sim
Além disso, apenas para verificar, você ativou o recurso Push Notifications em Project Settings> Capabilities, correto?
sim
Eu fiz downgrade para v3.1.4
e agora ele envia pushToken
e userId
@ Jarred-Sumner Só para entender esse problema um pouco melhor, os IDs são nulos, mas as notificações push realmente funcionam? Eles não deveriam, mas eu queria verificar novamente.
Além disso, você pode tentar atualizar para 3.2.2, inicializar com JS e chamar OneSignal.setLogLevel(6, 0)
antes de chamar init. Você pode me dizer se você vê algum erro impresso no console?
O problema persiste em 3.2.2.
Definir o nível de registro imprime a seguinte saída
Init chamado com ID de aplicativo: (nulo)
(Então, em algum lugar abaixo nos registros)
Init chamado com ID do aplicativo: (my-app-id)
Mas userId ainda é nulo. Incluí a biblioteca usando CocoaPods, se isso ajudar
@hhunaid , espera-se que o ID do aplicativo seja nulo na primeira vez (talvez devêssemos remover a primeira instrução de log para evitar confusão).
Também é esperado que o ID do usuário seja nulo até que o usuário aceite a permissão push em um dispositivo iOS real. Você pode confirmar que este é o caso? Em caso afirmativo, você pode postar um link para pelo menos 15 segundos de saída de log do Xcode com esse nível de log (certifique-se de chamar setLogLevel antes de chamar init)
@ Nightsd01 não é apenas a instrução LOG. Na verdade, há uma chamada para o inicializador OneSignal com appId nulo. Acabei de verificar que se eu remover a linha init no método initOneSignal
, tudo funciona.
@hhunaid sim, espera-se que a primeira chamada para o inicializador seja com um ID de aplicativo nulo, este é o número de trabalhos do nosso wrapper SDK. Você está dizendo que se você remover esta primeira chamada, “tudo funciona” ...?
Para descartar outras alterações que você possa ter feito, você pode descomentar initOneSignal novamente para verificar se ele parou de funcionar ...?
Você pode postar seu package.json
para que eu possa ver quais dependências você está usando?
Eu tentei e desliguei com e sem o trecho de código mencionado e agora posso dizer com confiança que de fato é o culpado. Pelo menos no meu aplicativo.
Removê-lo me dá um playerId válido e meu dispositivo mostra no painel OneSignal. O que não estava acontecendo antes.
Mesmo aqui. PushToken é sempre nulo. Vou colar a imagem abaixo.
meu package.json é como abaixo.
"abortcontroller-polyfill": "^1.1.9",
"immutability-helper": "^2.7.0",
"mobx": "^4.2.1",
"mobx-react": "^5.1.2",
"moment": "^2.22.1",
"react": "^16.3.2",
"react-native": "^0.55.4",
"react-native-amplitude-analytics": "^0.1.15",
"react-native-animatable": "^1.2.4",
"react-native-audio-recorder-player": "^1.0.15",
"react-native-iap": "^1.0.1",
"react-native-image-picker": "^0.26.10",
"react-native-linear-gradient": "^2.4.0",
"react-native-loading-spinner-overlay": "^0.5.2",
"react-native-localization": "^1.0.7",
"react-native-marquee": "^0.3.1",
"react-native-modalbox": "^1.4.2",
"react-native-onesignal": "^3.2.2",
"react-native-permissions": "^1.1.1",
"react-native-pinch-zoom-view": "^0.1.6",
"react-native-sentry": "^0.36.0",
"react-native-status-bar-height": "^2.0.0",
"react-native-swiper": "^1.5.13",
"react-navigation": "^2.0.1",
"serializr": "^1.2.0"
@dooboolab Você está usando inicialização JS, correto?
Você pode me dizer em que parte do seu projeto está chamando OneSignal.init()
?
Por toda a minha vida, _não posso_ reproduzir esse problema. Se alguém pudesse reproduzir esse problema em um projeto de demonstração e postá-lo, poderíamos corrigir esse problema _muito_ mais rápido.
@tavriaforever oi, então fazer downgrade e chamar onesignal.init ('id do aplicativo') funcionaria?
mesma questão aqui, alguma solução?
"react": "16.3.1",
"react-native": "0.55.3",
"react-native-onesignal": "^3.2.0",
@ Nightsd01
Estou chamando minha raiz index.tsx
onde envolve o RootStackNavigator.
class App extends React.Component {
public componentDidMount() {
OneSignal.init('****');
OneSignal.addEventListener('received', this.onReceived);
OneSignal.addEventListener('opened', this.onOpened);
OneSignal.addEventListener('ids', this.onIds);
OneSignal.enableVibrate(true);
OneSignal.enableSound(true);
.....
public render() {
return (
<Provider
store={ appStore }
user={ userStore }
player={ playerStore }
>
<View style={styles.container}>
<RootStackNavigator />
</View>
</Provider>
);
Ainda sofrendo por obter token nulo.
@ Nightsd01 O mesmo aqui.
Remover init com appId: nil em RCTOneSignal.m ajudou
@ Nightsd01 Acabei de experimentar no Android, e o Android tem o mesmo problema.
Eu acho que a inicialização do lado JS não foi uma boa ideia.
Eu entendo, entretanto, que torna mais fácil para desenvolvedores da web ou pessoas sem experiência nativa usarem a biblioteca.
@hhunaid soa como se eu deveria fazer o downgrade?
@dooboolab @ 408dev sim, recomendo que, se você estiver enfrentando esse problema, faça o downgrade para 3.1.4 por enquanto até resolvermos o problema. Desculpas. Lembre-se de que o JS init não era compatível com o 3.1.4, então você vai querer seguir o guia para adicionar o código de inicialização nativo ao seu projeto.
@hhunaid realmente torna as coisas mais fáceis para os desenvolvedores de reação.
Como uma atualização, conseguimos reproduzir esse problema e identificamos a causa. Estaremos lançando uma atualização para resolvê-lo em breve.
Olá a todos - este problema foi resolvido em um novo PR (# 512). Esperamos ter esta fusão e uma nova atualização lançada nas próximas uma ou duas horas. Obrigado pela sua paciência!
Olá a todos, @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Jarred-Sumner
A nova atualização (3.2.3) foi lançada e deve corrigir esse problema. Sinta-se à vontade para me avisar se você vir este problema (ou outros problemas) novamente e terei prazer em investigar.
@ Nightsd01
estou a usar
"react": "16.3.1",
"react-native": "0.55.3",
"react-native-onesignal": "^3.2.3",
no dispositivo real tudo funciona bem como o esperado, mas ainda estou recebendo null userId
aleatoriamente em simulators
e não vejo nenhum dispositivo sendo adicionado à minha lista de jogadores! (até agora eu testei tipo> 50 vezes e apenas 2 vezes funcionou!)
Eu tentei limpar e reconstruir o aplicativo, bem como rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
mas ainda não recebo o status esperado de OneSignal.getPermissionSubscriptionState
{ userSubscriptionEnabled: true,
subscriptionEnabled: false,
pushToken: null,
emailAddress: null,
userId: null,
hasPrompted: true,
notificationsEnabled: true,
emailUserId: null,
emailSubscribed: false }
@ el-lsan que é esperado. É uma restrição da Apple, não nossa. Os simuladores iOS não podem receber notificações push. Eles não receberão um token de push APNS e não serão registrados no OneSignal.
Se você está testando notificações push, deve fazê-lo em um dispositivo iOS real, usando OneSignal ou não.
@ Nightsd01
Desculpe, minha última postagem não foi tão clara. Eu não quis dizer receber o push em simuladores, mas obter o dispositivo do simulador listado.
Portanto, depois de OneSignal.init('ONESIGNAL_APP_ID');
, espero que o dispositivo de simulação seja listado em meus usuários inscritos com o rótulo Ios Simulator Unsupported
, como você vê na captura de tela a seguir:
Esta é a resposta de OneSignal.getPermissionSubscriptionState para o simulador listado:
Mas na maioria das vezes a inicialização falha em simuladores e eu não vejo isso em https://onesignal.com/apps/ONESIGNAL_APP_ID/players
@ el-lsan Tenho o mesmo problema que o token push é nulo, você encontrou a solução?
@adirzoari após atualizar para "react-native-onesignal": "^3.2.3"
o problema foi corrigido para dispositivos reais, se você quisesse receber token nulo para o simulador, acredito que é assim que deve ser.
Por outro lado, estou esperando que userId
seja definido para simuladores, mas por alguma razão estranha ele falha na maioria das vezes e retorna nulo!
Estou usando um dispositivo real e recebo um token nulo
@adirzoari Isso é estranho! Tente limpar o cache rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
e verifique as etapas
@ el-lsan pushToken é nulo, mas em userId tem uma string exclusiva. em um sinal eu recebo
Erro de biblioteca do Google Play Services
Tive o mesmo problema com o 3.2.7 (simuladores - dispositivos OK / reais - NOK), mas a limpeza do cache, conforme sugerido por @ el-lsan, funcionou sem problemas
@ Nightsd01 O mesmo aqui.
Remover init com appId: nil em RCTOneSignal.m ajudou
oi, por favor, adicione a imagem da seguinte alteração.
@adirzoari após atualizar para
"react-native-onesignal": "^3.2.3"
o problema foi corrigido para dispositivos reais, se você quisesse receber token nulo para o simulador, acredito que é assim que deve ser.Por outro lado, estou esperando que
userId
seja definido para simuladores, mas por alguma razão estranha ele falha na maioria das vezes e retorna nulo!
oi estou recebendo pushToken: null no simulador e recebendo apenas o userId para o simulador.
Eu pegaria o pushToken para o dispositivo real, por favor, confirme (se devo me preocupar com o problema de pushToken no simulador ou não?).
Comentários muito úteis
Olá a todos, @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Jarred-Sumner
A nova atualização (3.2.3) foi lançada e deve corrigir esse problema. Sinta-se à vontade para me avisar se você vir este problema (ou outros problemas) novamente e terei prazer em investigar.