2012-10-31 22 views
6

Zajmuję się opracowywaniem strony serwera dla aplikacji na iOS z Google App Engine i JDO w Javie, i właśnie zdałem sobie sprawę, że GAE nie wspierają usługi powiadamiania Apple Push i jest bardzo sfrustrowany.Google App Engine APNS

Widziałem dość różnych rozwiązań, takich jak Urban Airship, xtify, itp .; ale jest zbyt kosztowne, gdy docieram do dużej liczby użytkowników.

Poza tym, badałem Javapns i podobne, ale GAE nie wspiera również BouncyCastle.

Chcę wiedzieć, czy istnieje bezpłatny lub tani sposób obsługi APNS na moim serwerze GAE, ponieważ nie mogę zapłacić 200 $ miesięcznie. Jeśli nie ma rozwiązania mojego problemu, czy możliwe byłoby zbudowanie innego serwera tylko do wykonywania notacji Apple przy pomocy javapns, i że mój GAE z nim rozmawia?

Odpowiedz

0

Istnieje wątek omawiający to here, a można zarejestrować się w wersji beta beta here.

Nie mam pojęcia, czy to pozwoli ci robić to, co chcesz robić, ale ludzie z ostatniej nitki myślą, że tak.

+0

Dzięki, ale wciąż jest w fazie beta i potrzebuję w krótkim czasie. Zapisałem się, ale nie mam żadnej nadziei. –

+0

Jeśli masz znaczną liczbę użytkowników, jest mało prawdopodobne, że wolny limit, który zapewnia GAE, byłby w każdym razie wystarczający. Tak, możesz zbudować kolejny serwer, z którym rozmawia GAE. –

+0

Oczywiście, ale nie chcę budować tylko jednego serwera dla powiadomień Apple. Szukam sposobu na stworzenie APNS w GAE, ale nie wiem, czy Urban Sterowiec jest bezpłatny dla niewielkiej liczby użytkowników, czy też mój serwer dostanie dużo użytkowników z zbyt wieloma powiadomieniami (buduję chat, więc jeśli Piszę wiadomość, powiadomienie należy wysłać do drugiej osoby). Dzięki i tak. –

0

Ponieważ jest to potrzebne do czatowania, starając się myśleć o wysyłaniu powiadomień push wewnętrznie od samego klienta (podczas gdy serwer dostarcza znaczniki push swoich znajomych). Może on dobrze pasować do Twojego pomysłu na czat.

1

AppEngine obsługuje teraz gniazda, więc powinieneś teraz móc używać nieco zmodyfikowanej wersji javapns. Udało mi się uzyskać PyAPN działające na AppEngine (python), który wykorzystuje nową funkcjonalność Socket w 1.7.7.

Jeśli jesteś zainteresowany obejrzeniem mojego projektu Pythona AppEngine, który wykonuje APNS, daj mi znać, a ja edytuję swoją odpowiedź z linkiem do niego. Za każdym razem, gdy zamieszczam tutaj link do niego, moderator usuwa moją odpowiedź z jakiegoś powodu

3

Używam biblioteki innej firmy notnoop/java-apns. Jest łatwy w użyciu. Jedynym problemem może spotkać to ograniczenie wątek na GAE jak poniżej wyjątku Java:

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

Problem został rozwiązany w wersji 1.0.0.Beta3 w Maven centralny. Szczegółowe rozwiązanie jest wyjaśnione w tym żądaniu pobierania #162.

Więc urywek przykład kodu przygotować i wysłać powiadomienia wypychania do APN jest jak poniżej, kluczem do rozwiązania ograniczenie gwintu jest metoda withErrorDetectionThreadFactory jak poniżej

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

Możesz sprawdzić java-apns-gae.

Jest to urządzenie specjalnie zaprojektowane do pracy (i użytkowania) w Google App Engine.