这个问题可能很愚蠢,但无论如何我都会尝试...... 我有一些在grails框架上运行的web服务。目前,我的客户端(Android,iOS和Windows手机设备)通过经典的http get / post请求与这些服务进行通信。我需要添加一个新服务,以JSON格式向客户端推送一些通知(保持连接不是一个选项 - 也不是常规轮询),棘手的部分是我希望服务尽可能独立于客户端平台(因此,无法使用Google Cloud Messaging和Apple Push Notification Service等工具)...有关如何执行该操作的任何建议吗?这甚至可能实现吗?
答案 0 :(得分: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);
}
答案 1 :(得分:0)
当您说http get/post
来自android, iOS and windows phone
的请求时,我假设您正在谈论他们的浏览器。在这种情况下,您可以使用WebSocket supported by major browsers来实现相同目标。
Atmosphere是我在这种情况下要保证的。