Ich versuche, ein Java-Programm zu implementieren, das eine Apple Push-Benachrichtigung an eine iPhone-Client-App sendet ... Gefunden die folgende Bibliothek: Java-APNs
Ich habe den folgenden Code (von Javapns) für die Verwendung in meiner App erstellt:
%Vor%Wenn ich diese App starte (wie Sie in den Log4j-Anweisungen sehen können), gibt es keine Ausnahmen:
%Vor%Aber meine Client App erhält keine Benachrichtigungen!
Auch Folgendes wurde im iPhone Developer Program Portal (IDPP) ausgeführt:
Erstellt das APNS-basierte SSL-Zertifikat und Schlüssel
Erstellt und installiert das Bereitstellungsprofil
Installierte das SSL-Zertifikat und den Schlüssel auf dem Server.
Lesen Sie den Apple Push Notification Service Guide mehrmals durch und beachten Sie einige Dinge:
(1) Auf Seite 15 heißt es, dass das Geräte-Token nicht dasselbe ist wie das Geräte-UDID (das ich derzeit fälschlicherweise als zweiten Parameter innerhalb der PushNotificationManager.addDevice () -Methode übergebe (siehe oben)).
Auf Seite 17 heißt es:
"APNs generiert ein Geräte-Token unter Verwendung der im eindeutigen Gerätezertifikat enthaltenen Informationen. Das Geräte-Token enthält eine Kennung des Geräts. Anschließend verschlüsselt es das Geräte-Token mit einem Token-Schlüssel und gibt es an das Gerät zurück. Das Gerät gibt das Gerät zurück Token an die anfordernde Anwendung als NSData-Objekt gesendet werden, und die Anwendung das Geräte-Token entweder an den Provider im binären oder im hexadezimalen Format übermitteln muss. "
(2) Nachdem ich die Seiten 33 bis 34 gelesen hatte, entdeckte ich, dass ich den Objective-C-Code nicht eingefügt hatte, um die App bei APNs registrieren zu lassen.
Bin ich kein Objective-C-Entwickler, kann ich also den Gerätecode wiederherstellen oder muss ich ihn aus dem Zertifikat holen?
Wo erhalte ich das Geräte-Token (tut mir leid, jemand anderes hat die Objective-C-Client-App geschrieben und ich bin ein Java-Entwickler)?
Frage (n):
(1) Abgesehen davon, dass Sie nicht wissen, wo Sie das Geräte-Token und die Registrierung des mobilen Client-Codes erhalten, gibt es noch etwas, das ich nicht überprüft oder übersehen habe?
(2) Benutze ich die JavaPns-Bibliothek richtig?
Danke, dass Sie sich die Zeit genommen haben, dies zu lesen ...
Ich habe das versucht und ich werde immer gehängt, wenn ich die Benachrichtigung sende, und nichts wird gesendet.
Das Problem stammt von der folgenden Funktion:
%Vor%Es scheint, dass der bufferedreader NULL
hat %Vor%Wenn also dieser Teil des Codes getroffen wird, bleibt er dort in der Endlosschleife hängen
%Vor%Dieser Ausgang ist [null]
Dann werden dann die Schleifen ausgeführt:
%Vor%Der Code tritt in die erste while-Schleife ein und wartet darauf, dass der BufferedReader bereit ist und wartet nur weiter ..... ad das ist dein hängenden
Als beschämende Werbung rate ich dazu, PushNotificationManager.closeConnection()
zu verwenden. Ihr Code sieht folgendermaßen aus:
Ihr Java-Code sieht solide aus! Vergessen Sie jedoch nicht, die Verbindung durch application:didRegisterForRemoteNotificationsWithDeviceToken:
zu schließen. Es ist wichtig, nach sich selbst aufzuräumen.
Als Nebenkommentar merke ich, dass Sie das Gerät "iPhone" hinzufügen, aber danach nach "Lambo" fragen. Dies ist ein Hinweis auf einen Fehler.
Das im Code angezeigte Geräte-Token ist falsch. Geräte-Tokens, derzeit als 32-Bit-Wert, der in 64 Zeichen umgewandelt wird. Ich nehme an, dass der Server unbemerkt fehlschlägt, wenn er die Benachrichtigung an ein ungültiges Token weiterleitet!
Der Geräte-Token kann nur über die App selbst abgerufen werden. Wie durch die Push-Benachrichtigungsleitfaden schlägt vor, dass sich die iPhone-App beim Start zur Benachrichtigung anmelden muss. In der NSLog
, das iPhone muss das Geräte-Token an Ihren Java-Provider-Server senden. (Zu Debugging-Zwecken können Sie einfach ServerSocket
das Geräte-Token verwenden und es verwenden; es ändert sich nie zwischen Läufen).
Ich würde empfehlen, dass Sie einen Server in Ihrem Java-Provider-Server erstellen, um Geräte-Token zu erhalten. Richten Sie eine %code% ein, um Verbindungen vom iPhone und ihrem Geräte-Token (und allen zusätzlichen Informationen, die Sie benötigen) zu erhalten, und fügen Sie die Token in die Datenbank ein.
Nur ein kleiner Tipp, um Ihren empfangenen Token in ein Format zu konvertieren, das für die Registrierung mit Javapns geeignet ist, macht dieser Code den Trick:
%Vor%}
JavaPNS wurde vor kurzem auf 2.0 aktualisiert und ALLE berichteten Probleme bis zum Veröffentlichungsdatum behoben. Es behebt das Problem, das Sie beschreiben, und die Verwendung der Bibliothek ist VIEL einfacher als je zuvor (Sie können jetzt eine Benachrichtigung mit einer einzigen Codezeile senden).
Sie scheinen das Token zu verpassen
%Vor%Nimmt ID- und Token-Check:
Die einzige Möglichkeit, ein Token zu erhalten, ist von der iPhone App. Ein gültiges Token sieht etwa so aus: 1d2d6f34 c5028bca c50df5f9 1992c912 ce7deae8 3bbe7da5 447f6a68 cfecdc0e
Ich versuche, ein Java-Programm zu implementieren, das eine Apple Push-Benachrichtigung an eine iPhone-Client-App sendet ... Gefunden die folgende Bibliothek: Java-APNs
Ich habe den folgenden Code (von Javapns) für die Verwendung in meiner App erstellt:
%Vor%Wenn ich diese App starte (wie Sie in den Log4j-Anweisungen sehen können), gibt es keine Ausnahmen:
%Vor%Aber meine Client App erhält keine Benachrichtigungen!
Auch Folgendes wurde im iPhone Developer Program Portal (IDPP) ausgeführt:
Erstellt das APNS-basierte SSL-Zertifikat und Schlüssel
Erstellt und installiert das Bereitstellungsprofil
Installierte das SSL-Zertifikat und den Schlüssel auf dem Server.
Lesen Sie den Apple Push Notification Service Guide mehrmals durch und beachten Sie einige Dinge:
(1) Auf Seite 15 heißt es, dass das Geräte-Token nicht dasselbe ist wie das Geräte-UDID (das ich derzeit fälschlicherweise als zweiten Parameter innerhalb der PushNotificationManager.addDevice () -Methode übergebe (siehe oben)).
Auf Seite 17 heißt es:
"APNs generiert ein Geräte-Token unter Verwendung der im eindeutigen Gerätezertifikat enthaltenen Informationen. Das Geräte-Token enthält eine Kennung des Geräts. Anschließend verschlüsselt es das Geräte-Token mit einem Token-Schlüssel und gibt es an das Gerät zurück. Das Gerät gibt das Gerät zurück Token an die anfordernde Anwendung als NSData-Objekt gesendet werden, und die Anwendung das Geräte-Token entweder an den Provider im binären oder im hexadezimalen Format übermitteln muss. "
(2) Nachdem ich die Seiten 33 bis 34 gelesen hatte, entdeckte ich, dass ich den Objective-C-Code nicht eingefügt hatte, um die App bei APNs registrieren zu lassen.
Bin ich kein Objective-C-Entwickler, kann ich also den Gerätecode wiederherstellen oder muss ich ihn aus dem Zertifikat holen?
Wo erhalte ich das Geräte-Token (tut mir leid, jemand anderes hat die Objective-C-Client-App geschrieben und ich bin ein Java-Entwickler)?
Frage (n):
(1) Abgesehen davon, dass Sie nicht wissen, wo Sie das Geräte-Token und die Registrierung des mobilen Client-Codes erhalten, gibt es noch etwas, das ich nicht überprüft oder übersehen habe?
(2) Benutze ich die JavaPns-Bibliothek richtig?
Danke, dass Sie sich die Zeit genommen haben, dies zu lesen ...
Ich habe das versucht und ich werde immer gehängt, wenn ich die Benachrichtigung sende, und nichts wird gesendet.
Das Problem stammt von der folgenden Funktion:
%Vor%Es scheint, dass der bufferedreader NULL
hat %Vor%Wenn also dieser Teil des Codes getroffen wird, bleibt er dort in der Endlosschleife hängen
%Vor%Dieser Ausgang ist [null]
Dann werden dann die Schleifen ausgeführt:
%Vor%Der Code tritt in die erste while-Schleife ein und wartet darauf, dass der BufferedReader bereit ist und wartet nur weiter ..... ad das ist dein hängenden
JavaPNS wurde vor kurzem auf 2.0 aktualisiert und ALLE berichteten Probleme bis zum Veröffentlichungsdatum behoben. Es behebt das Problem, das Sie beschreiben, und die Verwendung der Bibliothek ist VIEL einfacher als je zuvor (Sie können jetzt eine Benachrichtigung mit einer einzigen Codezeile senden).
Tags und Links java apple-push-notifications