React-native-onesignal: (v3.2.1) (iOS) pushToken null sur un appareil réel

Créé le 14 mai 2018  ·  36Commentaires  ·  Source: OneSignal/react-native-onesignal

La description:
Impossible d'obtenir pushToken, aucun utilisateur ios sur le tableau de bord, j'essaie tout, je recrée des certificats, des clés, j'utilise des outils de provisionnement, j'essaye différents appareils réels.

Sur Android, tout fonctionne comme un charme.

Environnement

  1. Quelle version du SDK OneSignal React-Native utilisez-vous : latest 3.2.1
  2. Comment avez-vous ajouté le SDK à votre projet (par exemple, npm) npm i --save react-native-onesignal
  3. [email protected]
  4. Xcode Version 9.3 (9E145)
  5. Node.js 8.4.0

mon paquet.json

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

Étapes pour reproduire le problème :

  1. Suivez toutes les variantes possibles dans les instructions sur onesignal.com
  2. Ajouter le code js du dossier d'exemple dans ce référentiel
  3. Test sur de vrais appareils (iphone x avec ios 11, iphone 6s avec ios 10)

code 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);
    });
  }

J'ai reçu une réponse de getPermissionSubscriptionState :

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

Bien sûr, aucun utilisateur ios sur le tableau de bord.

Je vois des journaux supplémentaires dans 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

Commentaire le plus utile

Salut tout le monde @dooboolab @hhunaid @408dev @el-lsan @neo125874 @Jarred-Sumner

La nouvelle mise à jour (3.2.3) a été publiée et devrait résoudre ce problème. N'hésitez pas à me faire savoir si vous revoyez ce problème (ou d'autres problèmes) et je serai ravi d'enquêter.

Tous les 36 commentaires

J'ai trouvé le même problème https://github.com/geektimecoil/react-native-onesignal/issues/502
J'essaie donc de rétrograder vers https://github.com/geektimecoil/react-native-onesignal/tree/3.1.4 - suivez toutes les étapes et maintenant cela fonctionne !

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

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

Donc la dernière version ne fonctionne pas

Bonjour, lorsque vous installez la dernière version de react-native-onesignal (3.2.2) et exécutez react-native link react-native-onesignal , pouvez-vous ouvrir le projet Xcode et vérifier que RCTOneSignal s'affiche correctement en tant que dépendance dans votre projet comme celui-ci ?

alt text

pushToken et userId sont également nuls pour moi sur les appareils réels (en mode release)
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"

(ce n'est pas dans mon podfile cette fois)

@Jarred-Sumner Essayez de désinstaller l'application de votre appareil, puis réinstallez-la, cela vous invite-t-il à accepter les autorisations de notification push ?

De plus, juste pour vérifier, vous avez activé la fonctionnalité de notifications push dans Paramètres du projet > Capacités, n'est-ce pas ?

@Jarred-Sumner Essayez de désinstaller l'application de votre appareil, puis réinstallez-la, cela vous invite-t-il à accepter les autorisations de notification push ?

Oui

De plus, juste pour vérifier, vous avez activé la fonctionnalité de notifications push dans Paramètres du projet > Capacités, n'est-ce pas ?

Oui
image
image

J'ai rétrogradé à v3.1.4 et maintenant il envoie les pushToken et userId

@Jarred-Sumner Juste pour mieux comprendre ce problème, les ID sont nuls, mais les notifications push fonctionnent-elles réellement ? Ils ne devraient pas, mais je voulais vérifier.

Aussi, pouvez-vous essayer de mettre à jour vers 3.2.2, initialiser avec JS et appeler OneSignal.setLogLevel(6, 0) avant d'appeler init. Pouvez-vous me dire si vous voyez des erreurs imprimées sur la console ?

Le problème persiste sur 3.2.2.
La configuration du niveau de journal imprime la sortie suivante

Appelé init avec l'ID d'application : (null)
(Puis quelque part ci-dessous dans les journaux)
Appelé init avec l'ID d'application : (my-app-id)

Mais userId est toujours nul. J'ai inclus la bibliothèque en utilisant CocoaPods si cela peut aider

@hhunaid, il est prévu que l'ID de l'application soit nul la première fois (nous devrions peut-être supprimer cette première instruction de journal pour éviter toute confusion).

Il est également prévu que l'ID utilisateur soit nul jusqu'à ce que l'utilisateur accepte l'autorisation push sur un véritable appareil iOS. Pouvez-vous confirmer que c'est le cas ? Si tel est le cas, pouvez-vous publier un lien vers au moins 15 secondes de sortie de journal de Xcode avec ce niveau de journal (assurez-vous d'appeler setLogLevel avant d'appeler init)

@ Nightsd01 ce n'est pas seulement l'instruction LOG. Il y a en fait un appel à l'initialiseur OneSignal avec null appId. Je viens de vérifier que si je supprime cette ligne d'initialisation dans la méthode initOneSignal , tout fonctionne.

@hhunaid oui, il est prévu que le premier appel à l'initialiseur soit avec un ID d'application nul, c'est le nombre de travaux de notre SDK wrapper. Vous dites que si vous supprimez ce premier appel, « tout fonctionne »... ?

Afin d'exclure d'autres modifications que vous avez pu apporter, pouvez-vous à nouveau décommenter initOneSignal pour vérifier qu'il ne fonctionne plus... ?

Pouvez-vous publier votre package.json afin que je puisse voir quelles dépendances vous utilisez ?

J'ai essayé avec et sans le morceau de code mentionné et maintenant je peux dire avec confiance que c'est bien le coupable. Au moins dans mon application.
Le supprimer me donne un playerId valide et mon appareil s'affiche sur le tableau de bord OneSignal. Ce qui n'arrivait pas avant.

Pareil ici. PushToken est toujours nul. Je vais coller la capture d'écran ci-dessous.
screen shot 2018-05-16 at 3 55 07 am

mon package.json est comme ci-dessous.

    "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 Vous utilisez l'initialisation JS, n'est-ce pas ?

Pouvez-vous me dire où dans votre projet vous appelez OneSignal.init() ?

Pour la vie de moi, je ne peux pas reproduire ce problème. Si quelqu'un pouvait reproduire ce problème dans un projet de démonstration et le publier, nous serions en mesure de résoudre ce problème _beaucoup_ plus rapidement.

@tavriaforever salut, alors rétrograder et appeler onesignal.init('app id') fonctionnerait?

même problème ici, une solution ?

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

@Nightsd01
J'appelle ma racine index.tsx où elle enveloppe 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>
    );

Je souffre toujours d'avoir un jeton nul.

@ Nightsd01 Idem ici.
Supprimer init avec appId:nil dans RCToneSignal.m a aidé

@ Nightsd01 Je viens d'essayer sur Android, et Android a le même problème.

Je suppose que l'initialisation côté JS n'était pas une si bonne idée.
Je comprends cependant que cela permet aux développeurs Web ou aux personnes sans expérience native d'utiliser facilement la bibliothèque.

@hhunaid semble-t-il que je devrais rétrograder ?

@dooboolab @408dev oui, je recommanderais que si vous rencontrez ce problème, vous rétrogradez à 3.1.4 pour le moment jusqu'à ce que nous résolvions ce problème. Excuses. Gardez à l'esprit que JS init n'était pas pris en charge dans 3.1.4, vous voudrez donc suivre le guide pour ajouter le code d'initialisation natif à votre projet.

@hhunaid, cela facilite en effet les choses pour les développeurs de réaction.

En tant que mise à jour, nous avons pu reproduire ce problème et en avons identifié la cause, nous allons bientôt déployer une mise à jour pour le résoudre.

Salut tout le monde - ce problème a été résolu dans un nouveau PR (#512). Nous nous attendons à ce que cela soit fusionné et qu'une nouvelle mise à jour soit publiée d'ici une heure ou deux. Merci pour votre patience!

Salut tout le monde @dooboolab @hhunaid @408dev @el-lsan @neo125874 @Jarred-Sumner

La nouvelle mise à jour (3.2.3) a été publiée et devrait résoudre ce problème. N'hésitez pas à me faire savoir si vous revoyez ce problème (ou d'autres problèmes) et je serai ravi d'enquêter.

@Nightsd01
j'utilise

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

sur un appareil réel, tout fonctionne comme prévu, mais je reçois toujours null userId au hasard sur simulators et je ne vois aucun appareil ajouté à ma liste de joueurs ! (jusqu'à présent, j'ai testé plus de 50 fois et seulement 2 fois j'ai fonctionné !)
J'ai essayé de nettoyer et de reconstruire l'application ainsi que rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache mais je n'obtiens toujours pas le statut attendu de OneSignal.getPermissionSubscriptionState

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

@el-lsan qui est attendu. C'est la restriction d'Apple, pas la nôtre. Les simulateurs iOS ne peuvent pas recevoir de notifications push. Ils n'obtiendront pas de jeton push APNS et ne seront pas enregistrés auprès de OneSignal.

Si vous testez les notifications push, vous devez le faire sur un vrai appareil iOS, que vous utilisiez ou non OneSignal.

@Nightsd01
Désolé, mon dernier message n'était pas si clair. Je ne voulais pas dire recevoir la poussée sur les simulateurs, mais obtenir la liste du dispositif de simulation.
Donc, après OneSignal.init('ONESIGNAL_APP_ID'); je m'attends à ce que l'appareil de simulation soit répertorié dans mes utilisateurs abonnés avec l'étiquette Ios Simulator Unsupported comme vous le voyez dans la capture d'écran suivante :

image

Voici la réponse de OneSignal.getPermissionSubscriptionState pour le simulateur répertorié :

image

Mais la plupart du temps, l'initialisation échoue sur les simulateurs et je ne le vois pas sous https://onesignal.com/apps/ONESIGNAL_APP_ID/players

@el-lsan J'ai le même problème que le jeton push est nul, avez-vous trouvé une solution ?

@adirzoari après la mise à jour vers "react-native-onesignal": "^3.2.3" le problème a été résolu pour les appareils réels, si vous vouliez recevoir un jeton nul pour le simulateur, je pense que c'est comme ça que c'est censé être.

D'un autre côté, je m'attends userId ce que

J'utilise un appareil réel et j'obtiens un jeton nul

@adirzoari C'est bizarre ! Essayez de vider le cache rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache et vérifiez les étapes

@el-lsan pushToken est nul mais dans userId a une chaîne unique. en un seul signal je reçois
Erreur de bibliothèque de services Google Play

J'ai eu le même problème avec 3.2.7 (simulateurs - OK/appareils réels - NOK) mais le nettoyage du cache comme suggéré par @el-lsan l'a fait fonctionner sans problème

@ Nightsd01 Idem ici.
Supprimer init avec appId:nil dans RCToneSignal.m a aidé

salut, voudriez-vous ajouter l'image du changement suivant.

@adirzoari après la mise à jour vers "react-native-onesignal": "^3.2.3" le problème a été résolu pour les appareils réels, si vous vouliez recevoir un jeton nul pour le simulateur, je pense que c'est comme ça que c'est censé être.

D'un autre côté, je m'attends userId ce que

salut, je reçois pushToken: null dans le simulateur et je n'obtiens que l'ID utilisateur du simulateur.
Vais-je obtenir le pushToken pour le périphérique réel, veuillez confirmer (si je dois m'inquiéter du problème nul de pushToken dans le simulateur ou non ?).

Cette page vous a été utile?
0 / 5 - 0 notes