8
votes

Utiliser le service de notification push apple via Java

J'essaie de mettre en œuvre un programme Java qui envoie une notification Apple Push à une application client iPhone ... a trouvé la bibliothèque suivante: Java Apns

Code du fournisseur: H2>

Créé le code suivant (à partir de Javapns) à utiliser dans mon application: P>

  WARN  [MyCode] Initializing connectiong with APNS...
  WARN  [MyCode] Sending push notification...


1 commentaires

Est-ce que les appareilsID et le jeton de l'appareil sont identiques?


6 Réponses :


0
votes

Vous semblez manquer le jeton

pushManager.addDevice("iPhone", "f4201f5d8278fe39545349d0868a24a3b60ed732");



1
votes
  1. Votre code Java semble solide! Cependant, n'oubliez pas de fermer la connexion, via pushnotificationmanager.closeconnection () . Il est important de nettoyer après vous-même.

    comme un commentaire latéral, je remarque que vous ajoutez l'appareil 'iPhone' mais interrogeez-vous par la suite de 'Lambo'. Ceci est une indication d'un bug.

  2. Le jeton d'appareil indiqué dans le code est incorrect. Jetons de périphérique, actuellement en tant que valeur longue 32 bits, qui est hexagonible en 64 caractères. Je suppose que le serveur échoue silencieusement lorsque vous appuyez sur la notification à un jeton invalide!

  3. Le seul moyen d'obtenir le jeton de l'appareil provient de l'application elle-même. Tel que fourni par le Guide de notification Push suggère, l'application iPhone doit s'inscrire à la notification lors du lancement. Dans le Application: DidregisterforremotenotificationsWithDeviceToken: , l'iPhone doit envoyer le jeton de périphérique à votre serveur de fournisseur Java. (À des fins de débogage, vous pouvez simplement NSLOG le jeton de l'appareil et l'utiliser; il ne change jamais à travers les courses).

    Je vous recommanderais de créer un serveur dans votre serveur de fournisseur Java pour recevoir des jetons de périphérique. Configurez un ServerSocket Pour recevoir des connexions à partir de l'iPhone et de leur jeton de périphérique (et de toute information supplémentaire dont vous avez besoin) et insérez les jetons de la base de données.


1 commentaires

Pouvez-vous s'il vous plaît me guider si je peux utiliser ce libarary pour envoyer une en-tête d'APNS-Push-Type pour APNS PayLowload, qui est requis dans iOS13? Ma question: Stackoverflow.com/Questtions/61278008/...



8
votes

Juste un petit conseil, afin de convertir votre jeton reçu en format approprié pour l'enregistrement avec Javapns, ce code fera le truc: xxx

}


1 commentaires

Est-ce toujours nécessaire avec la version la plus récente de Java-Apns?



18
votes

7 commentaires

Avec la mise en garde que son Deviceetoken est tort, aussi, non? Cela ressemble à un [[Uidevice CurrentDevice] UniqueIdentifier], mais la classe APNS Java souhaite que le jeton de périphérique binaire converti sur une chaîne hexagonale de 64 caractères.


D'accord, super. J'ai pu obtenir le code exact que vous avez collé au-dessus de travailler, tant que je suis remplacé Deviceetoken avec la chaîne Full 64 Char Hex générées par code semblable à Zablanc. Grande bibliothèque, au fait!


@Nate. Merci, veuillez rejoindre le groupe Google et influencer l'évolution de la bibliothèque.


hi.i vérifié avec ceci ..mais le son par défaut ne fonctionne pas dans ce cas.


@notnoop, le code ci-dessus est bon pour une charge utile unique à un ou plusieurs périphériques. Si nous devons faire cela à plusieurs reprises en fonction de l'appel de service Web, créez l'apnsservice chaque fois que chaque fois ne sera pas bon. Y a-t-il un moyen de garder cette connexion ouverte aussi longtemps que possible? Je ne vois pas d'ouverture ni de fermeture de la connexion. Quand cela se passe-t-il exactement. Guidez-moi s'il-vous-plaît.


Comment nous allons-nous savoir que la notification push a été envoyée avec succès par l'APNS API? Comme GCM donne un message de réussite ou de défaillance. Les apns fournissent-ils la même chose pour iOS?


@notnoop Comment envoyer un attribut d'en-tête APNS-push-Type? Pour iOS 13, nous devons envoyer cet en-tête ref: Onesignal.com/blog/... .



2
votes

J'ai essayé cela et je continue à être suspendu lors de l'envoi de la notification, et rien n'est envoyé.

Le problème découle de la fonction suivante: p> xxx pré>

Il semble que La bufferedReader a NULL P>

      while ( ! this.socket.isInputShutdown() ) {
          while( in.ready() ) {
              logger.debug("ready now");
              logger.debug(in.readLine());
              System.out.println( this.socket.getInputStream().read() );
          }
      }


1 commentaires

Pouvez-vous s'il vous plaît me guider si je peux utiliser ce libarary pour envoyer une en-tête d'APNS-Push-Type pour APNS PayLowload, qui est requis dans iOS13? Ma question: Stackoverflow.com/Questtions/61278008/...



0
votes

Javapns a été récemment mis à jour à 2.0 et corrigé tous les problèmes rapportés jusqu'à la date de sortie. Il corrige le problème que vous décrivez et utiliser la bibliothèque est beaucoup plus simple que jamais (vous pouvez appuyer sur une notification avec une seule ligne de code maintenant).


3 commentaires

Pourriez-vous s'il vous plaît coller du code pour soutenir votre réponse? Ici dans mon cas, je n'obtiens aucune erreur, les notifications ne vont pas. S'il vous plaît aider


Ici, c'est: push.alert ("bonjour monde!", "Keystore.p12", "keystore_password", faux, "votre jeton"); Tout est assez bien documenté dans le wiki du projet sur le code de Google. Il existe des exemples de code de base et avancés.


@Syslvain P. Pouvez-vous s'il vous plaît guider-moi si je peux utiliser ce libarary pour envoyer une en-tête de type poussoir APNS pour la charge utile APNS, qui est requise dans iOS13? Ma question: Stackoverflow.com/Questtions/61278008/...