안드로이드 개발시 GCM으로 Push 처리를 위하여 테스트용으로 만든것을 공유합니다.
추가적인 자세한 내용들은 GCM 관련 페이지를 하단에 기술하였으므로 참고하시길바랍니다.
사전준비
GCM 전송으로 위한 기본적인 필요한 Library 파일
- gcm-server.jar
- json_simple-1.1.jar
해당 파일은 [Android SDK Folder]\extras\google\gcm\samples\gcm-demo-server\WebContent\WEB-INF\lib
에 있습니다.
GCM 전송할 데이터
{msg:{message:”ABCD”}}
public class Main {
private final static String API_KEY = "API_KEY";
private final static String REGISTER_DEVICE_ID = "DEVICE_GCM_ID";
public static void main(String[] args) {
JSONObject obj = new JSONObject();
obj.put("message", "ABCD");
System.out.println(obj.toString());
sendPush(obj.toString(), REGISTER_DEVICE_ID);
}
/**
* Push 전달
* @param message Message
* @param registerId Text
*/
private static void sendPush(String message, String registerId) {
Sender sender = new Sender(API_KEY);
Message.Builder messageBuilder = new Message.Builder();
messageBuilder.delayWhileIdle(false);
messageBuilder.timeToLive(1800);
messageBuilder.addData("aps", message);
try {
Result result = sender.send(messageBuilder.build(), registerId, 5);
printResult(result);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Print Push Result
* @param result Result
*/
private static void printResult(Result result) {
System.out.println(result.getCanonicalRegistrationId());
String messageId = result.getMessageId();
if (messageId != null) {
System.out.println("MessageId = " + messageId);
} else {
System.out.println(result.getErrorCodeName());
}
}
}
단일 단말 전송 코드와 Sender 객체의 send함수에 전달하는 파라매터만 다른정도일뿐 기본적인 코드는 동일합니다.
public class Main {
private final static String API_KEY = "API_KEY";
public static void main(String[] args) {
JSONObject obj = new JSONObject();
obj.put("message", "ABCD");
System.out.println(obj.toString());
List<String> devicesList = new ArrayList<>();
devicesList.add("DEVICE_1_Register_ID");
devicesList.add("DEVICE_2_Register_ID");
devicesList.add("DEVICE_3_Register_ID");
sendPush(obj.toString(), devicesList);
}
/**
* Push 전달
* @param message Message
* @param text Text
* @param list Register Id Lists
*/
private static void sendPush(String text, List<String> list)
Sender sender = new Sender(API_KEY);
Message.Builder messageBuilder = new Message.Builder();
messageBuilder.delayWhileIdle(false);
messageBuilder.timeToLive(1800);
messageBuilder.addData("aps", message);
try {
MulticastResult result = sender.send(messageBuilder.build(), list, 5);
for (Result r : result.getResults()) {
printResult(r);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Print Push Result
* @param result Result
*/
private static void printResult(Result result) {
System.out.println(result.getCanonicalRegistrationId());
String messageId = result.getMessageId();
if (messageId != null) {
System.out.println("MessageId = " + messageId);
} else {
System.out.println(result.getErrorCodeName());
}
}
}
Sender Class의 함수에는 다음과 같이 정의되어 있기때문에 단일과 다중 단말 Push 전송이 큰 차이가 없습니다
Public Methods | |
---|---|
MulticastResult | send(Message message, List |
Result | send(Message message, String registrationId, int retries) |
Result | sendNoRetry(Message message, String registrationId) |
MulticastResult | sendNoRetry(Message message, List |
참고 사이트
comments powered by Disqus
Subscribe to this blog via RSS.
LazyColumn/Row에서 동일한 Key를 사용하면 크래시가 발생하는 이유
Posted on 30 Nov 2024