2012-10-31 29 views
6

Im Entwickeln der Server-Seite für eine iOS-App mit Google App Engine und JDO in Java, und ich habe gerade festgestellt, dass GAE Apple Push Notification Service nicht unterstützen, und ich bin sehr frustriert.Google App Engine APNS

Ich habe schon ziemlich gesehen von Lösungen wie Urban Airship, xtify, etc; Aber es ist zu teuer, wenn ich eine große Anzahl von Benutzern erreiche.

Außerdem habe ich über Javapns und ähnliche untersucht, aber GAE unterstützt BouncyCastle auch nicht.

Ich möchte wissen, ob es eine kostenlose oder kostengünstige Lösung für Support APNS in meinem GAE-Server gibt, weil ich 200 $ pro Monat nicht bezahlen kann. Wenn es keine Lösung für mein Problem gibt, wäre es möglich gewesen, einen anderen Server nur für die Apple-Push-Benachrichtigung mit javapns zu bauen, und dass mein GAE damit spricht?

Antwort

0

Es gibt einen Thread, der diese here diskutiert, und Sie können sich für die Sockel Beta here anmelden.

Ich habe keine Ahnung, ob das Sie tun lassen wird, was Sie tun wollen, aber die Leute auf dem letzten Thread scheinen zu denken, dass es wird.

+0

Danke, aber es ist immer noch auf Beta-Phase, und ich brauche in kurzer Zeit. Ich habe mich angemeldet, aber ich habe keine Hoffnung. –

+0

Wenn Sie eine große Anzahl von Benutzern haben, ist es unwahrscheinlich, dass das von GAE bereitgestellte freie Kontingent in jedem Fall ausreicht. Ja, Sie können natürlich einen anderen Server bauen, mit dem GAE spricht. –

+0

Natürlich, aber ich möchte keinen Server nur für die Apple-Benachrichtigungen erstellen. Ich suche einen Weg, die APNS in GAE zu machen, aber ich weiß nicht, ob Urban Airship für eine kleine Anzahl von Benutzern frei ist oder ob mein Server eine Menge Benutzer mit zu vielen Benachrichtigungen bekommt (ich baue einen Chat, also wenn Ich schreibe eine Nachricht, eine Benachrichtigung muss an die andere Person gesendet werden). Danke trotzdem. –

0

Da Sie es für den Chat benötigen, versuchen Sie, die Push-Benachrichtigungen intern vom Client selbst zu posten (während Ihr Server die Push-Token Ihrer Freunde bereitstellt). Es kann gut zu Ihrem Chatvorschlag passen.

1

AppEngine unterstützt jetzt Sockets, so dass Sie jetzt eine leicht modifizierte Version von javapns verwenden können. Ich habe erfolgreich PyAPNs auf AppEngine (Python) arbeiten, die die neue Socket-Funktionalität in 1.7.7 verwendet.

Wenn Sie interessiert sind, mein Python AppEngine-Projekt zu sehen, das APNS ausführt, lassen Sie es mich wissen und ich werde meine Antwort mit einem Link darauf bearbeiten. Jedes Mal, wenn ich hier einen Link poste, löscht ein Moderator meine Antwort aus irgendeinem Grund.

3

Ich verwende die 3rd-Party-Bibliothek notnoop/java-apns. Es ist einfach zu bedienen. Das einzige Problem ist, dass Sie treffen könnten die Fadenbegrenzung auf dem GAE wie unter Java-Ausnahme:

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

Das Problem in der Version 1.0.0.Beta3 im Maven zentralen gelöst. Die Detaillösung wird in dieser Pull-Anforderung #162 erläutert.

So ist das Beispiel-Code-Snippet zur Vorbereitung und Push-Benachrichtigung auf APNs senden wie unten ist, ist der Schlüssel der Faden Einschränkung zu lösen, ist das Verfahren withErrorDetectionThreadFactory wie unten

// 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

Sie java-apns-gae Check-out.

Es ist ein open-source Java APNS library, das speziell entwickelt wurde, um auf Google App Engine zu funktionieren (und verwendet werden).