2012-10-31 77 views
6

我正在用Java App引擎和JDO爲iOS應用程序開發服務器端,我剛剛意識到GAE不支持Apple推送通知服務,而且我非常沮喪。Google App Engine APNS

我已經看到很多像Urban Airship,xtify等解決方案;但如果我的用戶數量很多,它太貴了。

此外,我一直在調查Javapns和類似者,但GAE不支持BouncyCastle。

我想知道是否有免費或低成本的解決方案來支持我的GAE服務器中的APNS,因爲我無法每月支付200美元。 如果我的問題沒有解決方案,是否有可能只爲使用javapns進行Apple推送通知而構建另一臺服務器,並且我的GAE會與它進行交談?

回答

0

有一個線程討論這個here,你可以註冊套接字beta here

我不知道這是否會讓你做你想做的事,但後面的線程的人似乎認爲它會。

+0

謝謝,但它仍處於測試階段,我需要很短的時間。我已經註冊了,但我沒有任何希望。 –

+0

如果您擁有大量用戶,那麼GAE提供的免費配額不可能在任何情況下都足夠。是的,當然,您可以構建另一個GAE會談的服務器。 –

+0

當然,但我不想只爲Apple的通知構建一臺服務器。我正在尋找一種方法來製作GAE中的APNS,但我不知道Urban Airship對於少量用戶是免費的,還是我的服務器會通過太多通知獲得大量用戶(我正在建立聊天,所以如果我寫了一條消息,通知必須發送給其他人)。不管怎麼說,還是要謝謝你。 –

0

由於您需要聊天,試圖從客戶端本身發佈內部推送通知(當您的服務器提供您的朋友的推送令牌時)。它可以很好地適合你的聊天建議。

1

AppEngine現在支持套接字,因此您現在應該可以稍微修改一下javapns。我已經成功地獲得了PyAPN在AppEngine(python)上的工作,它使用1.7.7中的新Socket函數。

如果你有興趣看到我的python AppEngine項目,它做APNS,讓我知道,我會編輯我的答案與它的鏈接。每次我在這裏發佈鏈接時,主持人都會因爲某種原因刪除我的答案

3

我使用第三方庫notnoop/java-apns。它很容易使用。你能遇到的唯一問題是在GAE像下面的Java異常的線程限制:

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

的問題解決在版本1.0.0.Beta3在Maven中央。詳細解決方案在此拉動請求#162中進行了解釋。

因此,示例代碼片段準備和發送推送通知的APN就像下面,解決了線程的限制,關鍵是方法withErrorDetectionThreadFactory如下

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