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

Creado en 14 may. 2018  ·  36Comentarios  ·  Fuente: OneSignal/react-native-onesignal

Descripción:
No puedo obtener pushToken, no hay usuarios de iOS en el tablero, intento todo, recreo certificados, claves, uso herramientas de aprovisionamiento, pruebo diferentes dispositivos reales.

En Android todo funciona a las mil maravillas.

Medio ambiente

  1. ¿Qué versión de OneSignal React-Native SDK está utilizando: latest 3.2.1
  2. ¿Cómo agregaste el SDK a tu proyecto (por ejemplo, npm) npm i --save react-native-onesignal
  3. [email protected]
  4. Xcode Version 9.3 (9E145)
  5. Node.js 8.4.0

mi paquete.json

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

Pasos para reproducir el problema:

  1. Siga todas las variantes posibles en la instrucción en onesignal.com
  2. Agregue el código js de la carpeta de ejemplo en este repositorio
  3. Prueba en dispositivos reales (iphone x con ios 11, iphone 6s con 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);
    });
  }

Recibí respuesta de getPermissionSubscriptionState :

{
  emailAddress:null
  emailSubscribed:false
  emailUserId:null
  hasPrompted:true
  notificationsEnabled:true
  pushToken:null
  subscriptionEnabled:false
  userId:null
  userSubscriptionEnabled:true
}

Por supuesto, no hay un usuario de iOS en el tablero.

Adicional veo registros en 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

Comentario más útil

Hola a todos @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Jarred-Sumner

Se ha publicado la nueva actualización (3.2.3) y debería solucionar este problema. No dudes en avisarme si vuelves a ver este problema (u otros problemas) y estaremos encantados de investigarlo.

Todos 36 comentarios

Encontré el mismo problema https://github.com/geektimecoil/react-native-onesignal/issues/502
Así que trato de degradar a https://github.com/geektimecoil/react-native-onesignal/tree/3.1.4 - ¡sigue todos los pasos y ahora funciona!

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

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

Entonces la última versión no funciona

Hola, cuando instalas la última versión de react-native-onesignal (3.2.2) y ejecutas react-native link react-native-onesignal , ¿puedes abrir el proyecto Xcode y verificar que RCTOneSignal aparezca correctamente como una dependencia en tu proyecto como este?

alt text

pushToken y userId son nulos para mí en dispositivos reales (en modo de lanzamiento)
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"

(no está en mi archivo de pod esta vez)

@ Jarred-Sumner Intente desinstalar la aplicación de su dispositivo, luego vuelva a instalarla, ¿le pide que acepte los permisos de notificación automática?

Además, solo para verificar, habilitó la capacidad de notificaciones push en Configuración del proyecto> Capacidades, ¿correcto?

@ Jarred-Sumner Intente desinstalar la aplicación de su dispositivo, luego vuelva a instalarla, ¿le pide que acepte los permisos de notificación automática?

Además, solo para verificar, habilitó la capacidad de notificaciones push en Configuración del proyecto> Capacidades, ¿correcto?


image
image

Bajé la calificación a v3.1.4 y ahora envía pushToken y userId

@ Jarred-Sumner Solo para entender un poco mejor este problema, los ID son nulos, pero ¿funcionan realmente las notificaciones push? No deberían, pero quería comprobarlo dos veces.

Además, ¿puedes intentar actualizar a 3.2.2, inicializar con JS y llamar a OneSignal.setLogLevel(6, 0) antes de llamar a init? ¿Puede decirme si ve algún error impreso en la consola?

El problema persiste en 3.2.2.
Configurar el nivel de registro se imprime después de la salida

Se llama init con el ID de la aplicación: (nulo)
(Luego, en algún lugar debajo de los registros)
Se llama init con el ID de la aplicación: (my-app-id)

Pero userId sigue siendo nulo. He incluido la biblioteca usando CocoaPods si eso ayuda

@hhunaid se espera que el ID de la aplicación sea nulo la primera vez (quizás deberíamos eliminar esa primera declaración de registro para evitar confusiones).

También se espera que el ID de usuario sea nulo hasta que el usuario acepte el permiso de inserción en un dispositivo iOS real. ¿Puede confirmar que este es el caso? Si es así, ¿puede publicar un enlace a al menos 15 segundos de salida de registro de Xcode con ese nivel de registro (asegúrese de llamar a setLogLevel antes de llamar a init)

@ Nightsd01 no es solo la declaración LOG. En realidad, hay una llamada al inicializador de OneSignal con appId nulo. Acabo de comprobar que si elimino esa línea de inicio en el método initOneSignal , todo funciona.

@hhunaid sí, se espera que la primera llamada al inicializador sea con un ID de aplicación nulo, así es como funcionan muchos de nuestros SDK de envoltura. ¿Estás diciendo que si eliminas esta primera llamada, "todo funciona" ...?

Para descartar otros cambios que pueda haber realizado, ¿puede descomentar initOneSignal nuevamente para verificar que deja de funcionar ...?

¿Puedes publicar tu package.json para que pueda ver qué dependencias estás usando?

Lo he probado con y sin el fragmento de código mencionado y ahora puedo decir con confianza que de hecho es el culpable. Al menos en mi aplicación.
Al eliminarlo, obtengo un playerId válido y mi dispositivo se muestra en el panel de OneSignal. Lo que no estaba sucediendo antes.

Aquí igual. PushToken siempre es nulo. Pegaré la captura de pantalla a continuación.
screen shot 2018-05-16 at 3 55 07 am

mi package.json es el siguiente.

    "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 Está utilizando la inicialización de JS, ¿correcto?

¿Puede decirme en qué parte de su proyecto está llamando OneSignal.init() ?

Por mi vida, no puedo reproducir este problema. Si alguien pudiera reproducir este problema en un proyecto de demostración y publicarlo, podríamos solucionarlo _mucho_ más rápido.

@tavriaforever hola, así que bajar de categoría y llamar a onesignal.init ('app id') ¿funcionaría?

mismo problema aquí, alguna solución?

    "react": "16.3.1",
    "react-native": "0.55.3",
    "react-native-onesignal": "^3.2.0",

@ Nochesd01
Estoy llamando en mi raíz index.tsx donde envuelve 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>
    );

Todavía sufre de obtener un token nulo.

@ Nightsd01 Lo mismo aquí.
La eliminación de init con appId: nil en RCTOneSignal.m ayudó

@ Nightsd01 Acabo de probar en Android, y Android tiene el mismo problema.

Supongo que la inicialización del lado JS no fue tan buena idea.
Sin embargo, entiendo que facilita que los desarrolladores web o las personas sin antecedentes nativos utilicen fácilmente la biblioteca.

@hhunaid suena como que debería bajar de categoría?

@dooboolab @ 408dev sí, recomendaría que si se encuentra con este problema, baje a 3.1.4 por el momento hasta que solucionemos este problema. Disculpas. Tenga en cuenta que JS init no era compatible con 3.1.4, por lo que querrá seguir la guía para agregar el código de inicialización nativo a su proyecto.

@hhunaid , de hecho, facilita las cosas para los desarrolladores de React.

Como actualización, hemos podido reproducir este problema y hemos identificado la causa, implementaremos una actualización para resolverlo pronto.

Hola a todos: este problema se ha resuelto en un nuevo PR (# 512). Esperamos que esto se fusione y se publique una nueva actualización dentro de la próxima hora o dos. ¡Gracias por su paciencia!

Hola a todos @dooboolab @hhunaid @ 408dev @ el-lsan @ neo125874 @ Jarred-Sumner

Se ha publicado la nueva actualización (3.2.3) y debería solucionar este problema. No dudes en avisarme si vuelves a ver este problema (u otros problemas) y estaremos encantados de investigarlo.

@ Nochesd01
Estoy usando

  "react": "16.3.1",
  "react-native": "0.55.3",
  "react-native-onesignal": "^3.2.3",

en un dispositivo real, todo funciona bien como se esperaba, pero sigo recibiendo null userId al azar en simulators y no veo que se agregue ningún dispositivo a mi lista de reproductores. (¡Hasta ahora probé como> 50 veces y solo 2 veces funcionó!)
Intenté limpiar y reconstruir la aplicación, así como rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache pero aún no obtengo el estado 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 se esperaba. Es una restricción de Apple, no la nuestra. Los simuladores de iOS no pueden recibir notificaciones automáticas. No recibirán un token de inserción de APNS y no se registrarán en OneSignal.

Si está probando notificaciones push, debe hacerlo en un dispositivo iOS real, ya sea que use OneSignal o no.

@ Nochesd01
Lo siento, mi última publicación no fue tan clara. No me refería a recibir el empuje de los simuladores, sino a obtener el dispositivo del simulador en la lista.
Entonces, después de OneSignal.init('ONESIGNAL_APP_ID'); , espero que el dispositivo de simulación aparezca en mis usuarios suscritos con la etiqueta Ios Simulator Unsupported como se ve en la siguiente captura de pantalla:

image

Aquí está la respuesta de OneSignal.getPermissionSubscriptionState para el simulador enumerado:

image

Pero la mayoría de las veces la inicialización falla en los simuladores y no lo veo debajo de https://onesignal.com/apps/ONESIGNAL_APP_ID/players

@ el-lsan Tengo el mismo problema, el token de inserción es nulo, ¿encontraste una solución?

@adirzoari después de actualizar a "react-native-onesignal": "^3.2.3" el problema se solucionó para dispositivos reales, si se refería a recibir un token nulo para el simulador, creo que así es como se supone que debe ser.

Por otro lado, espero que userId se configure para simuladores, pero por alguna extraña razón falla la mayoría de las veces y devuelve nulo.

Estoy usando un dispositivo real y obtengo un token nulo

@adirzoari ¡ Eso es raro! Intente borrar el caché rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache y vuelva a verificar los pasos

@ el-lsan pushToken es nulo pero en userId tiene una cadena única. en una señal obtengo
Error de la biblioteca de servicios de Google Play

Tuve el mismo problema con 3.2.7 (simuladores - OK / dispositivos reales - NOK) pero limpiar el caché como lo sugirió @ el-lsan lo hizo funcionar sin problemas

@ Nightsd01 Lo mismo aquí.
La eliminación de init con appId: nil en RCTOneSignal.m ayudó

hola, ¿podría agregar la imagen del siguiente cambio?

@adirzoari después de actualizar a "react-native-onesignal": "^3.2.3" el problema se solucionó para dispositivos reales, si se refería a recibir un token nulo para el simulador, creo que así es como se supone que debe ser.

Por otro lado, espero que userId se configure para simuladores, pero por alguna extraña razón falla la mayoría de las veces y devuelve nulo.

Hola, estoy obteniendo pushToken: null en el simulador y obteniendo solo el ID de usuario para el simulador.
¿Obtendría el pushToken para el dispositivo real, por favor confirme (si tengo que preocuparme por el problema nulo de pushToken en el simulador o no?).

¿Fue útil esta página
0 / 5 - 0 calificaciones