2012-09-05 11 views
6

Sto utilizzando il framework Java-APNS per inviare notifiche push ai dispositivi iOS. Funziona molto bene (grazie allo sviluppatore!) E sono in grado di inviare ai miei dispositivi quando tutto è impostato correttamente. Vorrei, tuttavia, gestire correttamente i casi di errore. Ci sono alcuni codici di errore APNS documentati che dovrebbero essere ricevuti per alcuni casi:Utilizzare java-apns per rilevare problemi con il push

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

Come dovrei creare alcuni dei casi falliscono? Ho una mia classe che implementa ApnsDelegate e costruisco il mio oggetto ApnsService con il mio delegato. Ho provato passando un token non valido nella mia chiamata a spingere così come una stringa vuota per carico utile:

service.push("ab", "") 

ma il metodo messageSent della mia ApnsDelegate ancora viene chiamato. Mi aspetterei che questo finisca nel metodo messageSendFailed o forse nella connessioneClosed ma nessuno dei due viene chiamato. Qualcuno ha provato questa roba e l'ha messa al lavoro? Ecco un esempio della mia classe ... In realtà sto facendo questo in Scala, ma ho pensato che avrei avuto più fortuna se avessi postato Java. Quando chiamato, questo stamperà solo "Messaggio inviato ad AB".

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

Lascerò la domanda là fuori nel caso qualcuno voglia ancora la risposta, ma ora sto guardando [JavaPNS] (http://code.google.com/p/javapns) come alternativa. Sembra molto meglio abilitato per i casi di errore ed è stato aggiornato di recente nel mese scorso. Sono stato in grado di inviare facilmente le mie notifiche push e creare un caso di errore. java-apns non sembra essere stato toccato in più di un anno. – ShatyUT

risposta

5

Come detto nel mio commento, ho guardato in JavaPNS come alternativa e questo è un quadro molto meglio utilizzare. È attualmente in fase di elaborazione (ultimo commit 2 giorni fa al momento della pubblicazione) dove java-apns non è stato aggiornato da dicembre 2011.

Suggerisco che l'uso di java-apns venga sostituito con l'uso di JavaPNS per chiunque cercando di inviare notifiche push ai dispositivi iOS. Reagisce ai pacchetti di errore ricevuti e passa i risultati al chiamante in modo facile da accedere.

+1

L'inverso sembra essere vero ora (2014 per java-apns | 2012 per javaPNS) – Enigma

Problemi correlati