【问题标题】:Google App Engine (GAE), Urban Airship, Java, Push notifications. Sample code?Google App Engine (GAE)、Urban Airship、Java、推送通知。示例代码?
【发布时间】:2011-04-10 23:40:59
【问题描述】:

我的服务器在 GAE (Java) 上运行,我正在使用 Urban Airship 服务来传递推送通知。当然,当我使用他们的网络界面发送测试通知时,一切正常,但我想向我的 GAE 应用程序/服务器添加一个测试按钮,以让 it 触发 UA 发送推动。

问题是,到目前为止我看到的所有示例都不能针对 GAE 的 Java 库进行编译。

有没有人想分享在 GAE 下构建和运行以通过 Urban Airship 触发推送通知的 Java 示例代码?

谢谢!

【问题讨论】:

  • 澄清一下:Urban Airship 不是必需的。我的目标是让我的 GAE(java) 应用程序触发 APNS。几天前我添加了UA,认为它会有所帮助。但是,如果您的解决方案让我直接从 GAE 获得,或者通过其他一些免费、可靠的服务(UA 是免费启动的,如 GAE),我可以接受。

标签: iphone google-app-engine push-notification urbanairship.com


【解决方案1】:

下面是一些在 GAE 下工作并通过 Urban Airship 发送推送通知的 Java 示例代码:

URL url = new URL("https://go.urbanairship.com/api/push/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);

String appKey = "YOUR APP KEY HERE";
String appMasterSecret = "YOUR MASTER SECRET HERE";

String authString = appKey + ":" + appMasterSecret;
String authStringBase64 = Base64.encodeBase64String(authString.getBytes());
authStringBase64 = authStringBase64.trim();

connection.setRequestProperty("Content-type", "application/json");
connection.setRequestProperty("Authorization", "Basic " + authStringBase64);

String jsonBodyString = "YOUR URBAN AIRSHIP JSON HERE";

OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
osw.write(jsonBodyString);
osw.close();

int responseCode = connection.getResponseCode();
// Add your code to check the response code here

希望这会有所帮助!

【讨论】:

  • 我已经想通了,忘了回来发帖,但是,是的,你的例子正是我所需要的。我缺少的部分是 setRequestProperty Authorization 行——我不知何故略过了它,当然,它使一切都不起作用。谢谢!
  • 答案不适用于 GAE 下的德语变音符号 (öäü) 等特殊字符。它在我的 Mac 上的文本环境中完美运行,并交付给 iPhone。所以我想这是一个我无法解决的编码问题。有什么想法吗?
  • 我已经编辑了示例代码来展示如何在 OutputStreamWriter 上设置编码。
【解决方案2】:

urbanairship4j(可在 Google 代码上获得)使用 Google HTTP Java Client,因此可以在 AppEngine、Android 等上完美运行。

【讨论】:

    【解决方案3】:

    以防万一有人尝试使用 Google 应用引擎通过 urbanairship 向 iOS 设备发送推送通知,这对我来说终于奏效了!这是针对 V3 API 的。

    导入 org.apache.commons.codec.binary.Base64; //commons-codec-1.6.jar

    try {
                URL url = new URL(URBAN_AIRSHIP_PUSH_URL);
                String nameAndPassword = DEV_API_KEY+":"+DEV_API_MASTER_SECRET;
    
                String authorizationHeader = Base64.encodeBase64String(nameAndPassword.getBytes("UTF-8"));
                authorizationHeader = "Basic "+authorizationHeader;
    
                HTTPRequest request = new HTTPRequest(url, HTTPMethod.POST);
                request.addHeader(new HTTPHeader("Authorization", authorizationHeader));
                request.addHeader(new HTTPHeader("Content-type", "application/json"));
                request.addHeader(new HTTPHeader("Accept", "application/vnd.urbanairship+json; version=3;"));
    
                logger.info("Authorization header for push:"+authorizationHeader);
                logger.info("PushMessage payload:"+notificationPayload);
                request.setPayload(notificationPayload.getBytes("UTF-8"));
    
                URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();
                HTTPResponse fetchedResponse = urlFetchService.fetch(request);
    
                if (fetchedResponse.getResponseCode() >= 400) {
                    logger.warning("Push notification failed:"+new String(fetchedResponse.getContent(), "UTF-8")+
                        "response code:"+fetchedResponse.getResponseCode());
                } else {
                    logger.info("PushMessage send success");
                }
            } catch (MalformedURLException e) {
                logger.log(Level.SEVERE, "PushMessage failed", e);
            } catch (IOException e) {
                logger.log(Level.SEVERE, "PushMessage failed", e);
            }
    

    【讨论】:

    • 你应该提到notificationPayload是整个json。 +1
    【解决方案4】:

    因为你说 Urban Airship 不是必需品,所以我推荐java-apns-gae

    这是一个开源 Java APNS 库,专为在 Google App Engine 上工作(和使用)而设计。

    https://github.com/ZsoltSafrany/java-apns-gae

    【讨论】:

    • 您有在 app-engine 上使用您的 Git 项目的示例项目吗?我说的是类似于示例项目github.com/GoogleCloudPlatform/… 的东西。无论出于何种原因,谷歌项目都不适合我。因此,如果您不介意分享一个有效的简单项目,那就太好了。谢谢。
    • @KatedralPillon 我无法分享示例项目,但您可以查看java-apns-gae 的文档 - 它包含一些示例代码。 zsoltsafrany.github.io/java-apns-gae
    • 我已经在查看文档了。没有运气。我提到的 Google 项目似乎与您的项目非常相似,您可以对其进行修改。如果你能抽出时间帮助一些完全陌生的人,那将帮助很多人。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2012-09-19
    相关资源
    最近更新 更多