0

这个问题可能很愚蠢,但无论如何我都会尝试......我有一些在 grails 框架上运行的 web 服务。目前,我的客户端(android、iOS 和 windows phone 设备)通过经典的 http get/post 请求与这些服务进行通信。我需要添加一个新服务来以 JSON 格式向客户端推送一些通知(保持连接活动不是一种选择 - 也不是定期轮询),棘手的部分是我希望服务尽可能独立于客户端平台(因此,不能使用 Google Cloud Messaging 和 Apple Push Notification Service 等工具)......关于如何做到这一点的任何建议?这甚至有可能实现吗?

4

2 回答 2

3

我认为 Grails 的一些插件并不稳定。对于 Android,您可以使用 scribe 框架进行 http post。例子:

def pushToAndroidDevice(String deviceToken, Map data) { 
    OAuthRequest request = new OAuthRequest(Verb.POST, 'https://android.googleapis.com/gcm/send')
    request.addHeader("Authorization", "key=" + apiKey)
    request.addHeader("Content-Type", "application/json")

    def jsonBody = [:]
    def deviceTokens = [] << deviceToken
    jsonBody.registration_ids = deviceTokens
    jsonBody.data = data

    request.addPayload((jsonBody as JSON).toString())

    Response response = request.send()
    return JSON.parse(response.body).toString()
}

对于 iOS,您可以使用库 javaPNS:https ://code.google.com/p/javapns/

import javapns.Push;
....
def pushToIOSDevice(String deviceToken, Map data) {
    String certificatePath = grailsConfig.apns.certificate //path of your certificate (*.p12)
    String password =  grailsConfig.apns.password //your apns password

    PushNotificationPayload payload = PushNotificationPayload.complex();
    payload.addAlert(data.get("message"));
    payload.addCustomDictionary("title", data.get("title"));
    payload.addCustomDictionary("action", data.get("action"));

    Push.payload(payload, certificatePath, password, false, deviceToken);           

}
于 2014-02-18T06:10:10.273 回答
0

当您说http get/post来自我的请求时,android, iOS and windows phone我假设您正在谈论他们的浏览器。在这种情况下,您可以使用主流浏览器支持的WebSocket实现。

在这种情况下,我会保证气氛。

于 2013-06-13T18:26:41.647 回答