2012-09-05 5 views
6

Ich verwende das Java-APNS-Framework, um Push-Benachrichtigungen an iOS-Geräte zu senden. Es funktioniert sehr gut (danke an den Entwickler!) Und ich kann zu meinen Geräten senden, wenn alles richtig eingerichtet ist. Ich möchte jedoch Fehlerfälle richtig behandeln. Es gibt einige APNS dokumentierte Fehlercodes, die für bestimmte Fälle empfangen werden sollte:Verwenden von Java-Apns zum Erkennen von Problemen mit Push

http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

Wie würde ich einige der nicht Fälle schaffen? Ich habe meine eigene Klasse, die ApnsDelegate implementiert und mein ApnsService-Objekt mit meinem Delegaten erstellt. Ich habe versucht, einen ungültigen Token in meinem Ruf vorbei sowie eine leere Zeichenfolge für Nutzlast drücken:

service.push("ab", "") 

aber die messagesent Methode meiner ApnsDelegate wird noch genannt. Ich würde erwarten, dass dies in der Methode messageSendFailed oder vielleicht connectionClosed endet, aber keiner wird aufgerufen. Hat jemand dieses Zeug getestet und es zur Arbeit gebracht? Hier ist ein Beispiel meiner Klasse ... Ich mache das eigentlich in Scala, aber ich dachte, ich hätte mehr Glück, wenn ich Java gepostet hätte. Beim Aufruf wird nur "Nachricht an AB gesendet" gedruckt.

public class ApnsSender implements ApnsDelegate { 

    public void send(Notification Notification) { 
     ApnsService service = getApnsService(); 

     String payload = getPayload(notification); 

     service.push("ab", ""); 
    } 

    private ApnsService getApnsService() { ... } 

    private String getPayload(Notification notification) { ... } 

    public void messageSent(ApnsNotification message) { 
     String token = Utilities.toHexString(message.getDeviceToken()); 
     System.out.println("Message sent to " + token); 
    } 

    public void messageSendFailed(ApnsNotification message, Throwable e) { 
     System.out.println("Message failed"); 
    } 

    public void messageSent(DeliveryError e, Int messageIdentifier) { 
     System.out.println("Message closed with error code " + e.code()); 
    } 

} 
+0

Ich lasse die Frage da draußen für den Fall, dass jemand immer noch die Antwort will, aber ich sehe jetzt [JavaPNS] (http://code.google.com/p/javapns) als Alternative. Es scheint viel besser für Fail-Fälle aktiviert und wurde zuletzt im letzten Monat aktualisiert. Ich war in der Lage, meine Push-Benachrichtigungen leicht zu senden sowie einen Fehlerfall zu erstellen. java-apns scheint seit über einem Jahr nicht mehr angefasst worden zu sein. – ShatyUT

Antwort

5

Wie in meinem Kommentar erwähnt, schaute ich in JavaPNS als Alternative und dies ist eine viel bessere Rahmenbedingungen zu verwenden. Es wird auch gerade gearbeitet (zuletzt Commit vor 2 Tagen zum Zeitpunkt der Buchung), wo java-apns seit Dezember 2011 nicht aktualisiert wurde.

Ich schlage vor, dass die Verwendung von Java-Apns durch die Verwendung von JavaPNS für jedermann ersetzt werden Versuchen, Push-Benachrichtigungen an iOS-Geräte zu senden. Es reagiert auf empfangene Fehlerpakete und leitet die Ergebnisse leicht zugänglich an den Aufrufer weiter.

+1

Die Umkehrung scheint jetzt wahr zu sein (2014 für java-apns | 2012 für javaPNS) – Enigma

Verwandte Themen