React-native-onesignal: (v3.2.1) (iOS) pushToken null no dispositivo real

Criado em 14 mai. 2018  ·  36Comentários  ·  Fonte: OneSignal/react-native-onesignal

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

  1. Qual versão do OneSignal React-Native SDK você está usando: latest 3.2.1
  2. Como você adicionou o SDK ao seu projeto (por exemplo, npm) npm i --save react-native-onesignal
  3. [email protected]
  4. Xcode Version 9.3 (9E145)
  5. Node.js 8.4.0

meu package.json

package json rbtse 2018-05-14 11-59-05

Etapas para reproduzir o problema:

  1. Siga todas as variantes possíveis na introdução em onesignal.com
  2. Adicione o código js da pasta de exemplo neste repo
  3. Teste em dispositivos reais (iphone x com ios 11, iphone 6s com ios 10)

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

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.

Todos 36 comentários

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!

react native debugger - connected port 8081 2018-05-14 12-24-59

users rbtse onesignal 2018-05-14 12-27-59

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?

alt text

pushToken e userId são nulos para mim também em dispositivos reais (no modo de liberação)
image

[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
image
image

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.
screen shot 2018-05-16 at 3 55 07 am

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:

image

Esta é a resposta de OneSignal.getPermissionSubscriptionState para o simulador listado:

image

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?).

Esta página foi útil?
0 / 5 - 0 avaliações