2012-10-31 39 views
6

Sto sviluppando il lato server per un'app iOS con Google App Engine e JDO in Java e ho appena realizzato che GAE non supporta Apple Push Notification Service, e sono molto frustrato.Google App Engine APNS

Sono stato visto piuttosto di soluzioni come Urban Airship, xtify, ecc; ma è troppo costoso se raggiungo un numero importante di utenti.

Inoltre, ho indagato su Javapns e simili, ma GAE non supporta neanche BouncyCastle.

Voglio sapere se esiste una soluzione gratuita oa basso costo per supportare APNS nel mio server GAE, perché non posso pagare 200 $ al mese. Se non c'è una soluzione per il mio problema, sarebbe stato possibile costruire un altro server solo per fare la notazione push Apple con javapns e che il mio GAE parla con esso?

risposta

0

C'è una discussione che discute questo here, ed è possibile registrarsi per le prese beta here.

Non ho idea se questo ti permetterà di fare ciò che vuoi fare, ma le persone sul secondo thread sembrano pensarlo.

+0

Grazie ma è ancora in fase beta, e ho bisogno in breve tempo. Mi sono iscritto ma non ho speranza. –

+0

Se si dispone di una quantità importante di utenti, è improbabile che la quota gratuita fornita da GAE sia comunque sufficiente. Sì, puoi costruire un altro server a cui GAE parla, ovviamente. –

+0

Ovviamente, ma non voglio creare un solo server per le notifiche di Apple. Sto cercando un modo per rendere gli APNS in GAE, ma non so se Urban Airship è gratuito per una piccola quantità di utenti o se il mio server avrà un sacco di utenti con troppe notifiche (sto costruendo una chat, quindi se Scrivo un messaggio, una notifica deve essere inviata all'altra persona). Grazie comunque. –

0

Dal momento che è necessario per la chat, provare a pensare di inviare le notifiche push internamente dal client stesso (mentre il server fornisce i token push dei propri amici). Può adattarsi bene alla tua proposta di chat.

1

AppEngine ora supporta socket, quindi dovresti essere in grado di utilizzare una versione leggermente modificata di javapns ora. Sono riuscito a far funzionare correttamente i PyAPN su AppEngine (python) che utilizza la nuova funzionalità Socket in 1.7.7.

Se sei interessato a vedere il mio progetto AppEngine Python che fa APNS, fammelo sapere e modificherai la mia risposta con un link ad esso. Ogni volta che pubblico qui un link, un moderatore cancella la mia risposta per qualche motivo

3

Io uso la libreria di terze parti notnoop/java-apns. È facile da usare L'unico problema si può incontrare è la limitazione filo sul GAE come qui di seguito eccezione java:

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") 

il problema viene risolto nella versione 1.0.0.Beta3 nella centrale Maven. La soluzione di dettaglio è spiegata in questa richiesta pull #162.

Così, l'esempio di codice frammento di preparare e inviare notifiche push a APN è come qui di seguito, la chiave per risolvere la limitazione filo è il metodo withErrorDetectionThreadFactory come di seguito

// Prepare ApnsService 
ClassPathResource certificate = new ClassPathResource("aps_production.p12"); 

ApnsService service = null; 
try { 
    service = APNS.newService() 
     .withErrorDetectionThreadFactory(ThreadManager.currentRequestThreadFactory()) // use GAE currentRequestThreadFactory 
     .withCert(certificate.getInputStream(), certificatePassword) 
     .withProductionDestination() 
     .build(); 
} catch (InvalidSSLConfig | IOException e) { 
    logger.warn("Fail to initialize APNs service"); 
} 

// Send notification 
String apnsPayload = APNS.newPayload() 
    .alertBody("test alert") 
    .badge(1) 
    .sound("default") 
    .customField("type", "general") 
    .build(); 

service.push(<your device id>, apnsPayload); 
0

Check-out java-apns-gae.

È uno open-source Java APNS library progettato specificamente per funzionare (e per essere utilizzato) su Google App Engine.