shlist

share and manage lists between multiple people
Log | Files | Refs

commit bfb1dc24a53e883fcc681c768633611ea198f62e
parent f755a8ede105736f9af23521033b6f8ee127b79d
Author: kyle <kyle@0x30.net>
Date:   Mon,  8 Feb 2016 20:07:38 -0700

apnd: add java proof of concept gcmd

Diffstat:
Agcmd/gcmd.java | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 99 insertions(+), 0 deletions(-)

diff --git a/gcmd/gcmd.java b/gcmd/gcmd.java @@ -0,0 +1,99 @@ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// package pushd_android; + +import org.apache.commons.io.IOUtils; +import org.json.JSONArray; +import org.json.JSONObject; +import org.json.JSONException; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +// NOTE: +// This class emulates a server for the purposes of this sample, +// but it's not meant to serve as an example for a production app server. +// This class should also not be included in the client (Android) applicaiton +// since it includes the server's API key. For information on GCM server +// implementaion see: https://developers.google.com/cloud-messaging/server +public class pushd_android { + + public static final String API_KEY = "API_KEY"; + + public static void main(String[] args) { + if (args.length < 1 || args.length > 2 || args[0] == null) { + System.err.println("usage: ./gradlew run -Pmsg=\"MESSAGE\" [-Pto=\"DEVICE_TOKEN\"]"); + System.err.println(""); + System.err.println("Specify a test message to broadcast via GCM. If a device's GCM registration token is\n" + + "specified, the message will only be sent to that device. Otherwise, the message \n" + + "will be sent to all devices subscribed to the \"global\" topic."); + System.err.println(""); + System.err.println("Example (Broadcast):\n" + + "On Windows: .\\gradlew.bat run -Pmsg=\"<Your_Message>\"\n" + + "On Linux/Mac: ./gradlew run -Pmsg=\"<Your_Message>\""); + System.err.println(""); + System.err.println("Example (Unicast):\n" + + "On Windows: .\\gradlew.bat run -Pmsg=\"<Your_Message>\" -Pto=\"<Your_Token>\"\n" + + "On Linux/Mac: ./gradlew run -Pmsg=\"<Your_Message>\" -Pto=\"<Your_Token>\""); + System.exit(1); + } + try { + // Prepare JSON containing the GCM message content. What to send and where to send. + JSONObject jGcmData = new JSONObject(); + JSONObject jData = new JSONObject(); + jData.put("message", args[0].trim()); + // Where to send GCM message. + if (args.length > 1 && args[1] != null) { + jGcmData.put("to", args[1].trim()); + } else { + jGcmData.put("to", "/topics/global"); + } + // What to send in GCM message. + jGcmData.put("data", jData); + + // Create connection to send GCM Message request. + URL url = new URL("https://android.googleapis.com/gcm/send"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty("Authorization", "key=" + API_KEY); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + + // Send GCM message content. + OutputStream outputStream = conn.getOutputStream(); + outputStream.write(jGcmData.toString().getBytes()); + + // Read GCM response. + InputStream inputStream = conn.getInputStream(); + String resp = IOUtils.toString(inputStream); + System.out.println(resp); + System.out.println("Check your device/emulator for notification or logcat for " + + "confirmation of the receipt of the GCM message."); + } catch (IOException e) { + System.out.println("Unable to send GCM message."); + System.out.println("Please ensure that API_KEY has been replaced by the server " + + "API key, and that the device's registration token is correct (if specified)."); + e.printStackTrace(); + } catch (JSONException e) { + System.out.println("caught JSONException"); + } + } + +}