Java APNS Push 구현
JDK 1.6 에서 적용 후 진행하였다.
많은 삽질 끝에 적용 ㅡㅡ;
기본적인 App push 서비스 설정 및 방법은 아래링크를 참조해서 작성하면 된다. 매우 잘나와있다.
http://lab.anybuild.co.kr/page/basic_app2#Introduce
Google APNs library 를 이용하여 구현하였다.
https://github.com/notnoop/java-apns 를 이용하여 구현하였다.
예제는 아래 링크를 참조하면 된다.
http://blog.kondratev.pro/2015/03/sending-ios-push-notifications-from-java.html
Dev notes: Sending iOS push notifications from JAVAblog.kondratev.pro
결국 헤매고 헤매다가 결국 해냈다 -_-;;
@RequestMapping(value="/push/test")
public String pushTest() throws Exception {
String token = "토큰값";
String type ="dev"; // 개발, 운영인지 TODO 추가적으로 적용 예정
String message = "hello";
String certPath7 = "cert.p12";
pushMessage(certPath7, message, token);
System.out.println("호출 ");
return "push/index";
}
public void pushMessage (String certPath, String message, String token) {
ApnsServiceBuilder serviceBuilder = APNS.newService();
serviceBuilder.withCert(certPath, "비밀번호")
.withSandboxDestination();
ApnsService service = serviceBuilder.build();
Long timeout = 60*60L;
String payload = APNS.newPayload()
.badge(3)
.alertBody(message)
.alertTitle("push test")
.sound("default")
.customField("messageFrom", "안녕하세유").build();
System.out.println("payload: "+payload);
service.push(token, payload);
}
Google Javapns 예제 이다
라이브러리
**
@Controller
public class PushTwoController {
final static String KEY_STORE = "인증키위치";
final static String TOKEN = "토큰값";
final static String CERT_KEY = "비밀번호";
@RequestMapping(value="/push2.do")
public void pushTestController() throws Exception{
/* Build a blank payload to customize */
PushNotificationPayload payload = PushNotificationPayload.complex();
/* Customize the payload */
payload.addAlert("얼럿창 입니다.");
payload.addCustomDictionary("mykey1", "My Value 1");
/* Push your custom payload */
//List notifications = Push.payload(payload, KEY_STORE, CERT_KEY, false, "토큰값");
// etc.
// 아래는 badge랑 같이 보내는 법
Push.combined("안내안내", 1, "default", KEY_STORE, CERT_KEY, false, TOKEN);
}
}
그 밖에 설정 부분들
참고 : http://www.programkr.com/blog/MAzN5ADMwYTw.html
다충 보내는 방법 : https://code.google.com/p/javapns/wiki/PushNotificationAdvanced
푸쉬 에러 관리 : https://code.google.com/p/javapns/wiki/ManagingPushErrors
Apple Push Service 규격
http://www.informit.com/articles/article.aspx?p=1433733&seqNum=5
APNs 포멧 1 Icon
Table 16-1. JSON Payload Samples
Sample Type
JSON
Hello message, displays with two buttons.
{“aps”:{“alert”:”hello”}}
Hello message, displays with two buttons, but built using JSON with an alert dictionary.
{“aps”:{“alert”:{“body”:”hello”}}}
Hello message with one OK button.
{“aps”:{“alert”:{“action-loc-key”:null,”body”:”hello”}}}
Hello message with two buttons, Close and Open, the latter being a custom replacement for View.
{“aps”:{“alert”:{“action-loc-key”:”Open”,”body”:”hello”}}}
Hello message that adds an application badge of 3.
{“aps”:{“badge”:3,”alert”:{“body”:”hello”}}}
Play a sound without an alert.
{“aps”:{“sound”:”ping2.caf”,”alert”:{}}}
Play sound, display badge, display alert, use a custom button.
{“aps”:{“sound”:”ping2.caf”,”badge”:2,”alert”:{“action-loc-key”:”Open”,”body”:”Hello”}}}
Add a custom payload including an array.
APNs 형식 2 Icon
Payload 작성 양식
다음의 애플문서를 보면 아주아주 자세하게 나와있습니다. 영어가 되시는 분은 애플에서 제공하는 원문을 보시는게 더 좋을 것 같네요! 기본적으로 Payload는 JSON 형식으로 전달되며 형식은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
{
”aps” : { ”alert” : {
”body” : ”내용을 적어넣으세요”,
”action-loc-key” : ”PLAY”,
”loc-key” : ”CONTENT”,
”loc-args” : [ ”Jenna”, ”Frank” ]
},
”badge” : 5,
},
”acme1” : ”bar”,
”acme2” : [ ”bang”, ”whiz” ]
}
여기서 aps 키값은 Dictionary 형태로 만들어지며 각각의 키들은 다음과 같은 역할을 합니다.
- alert : 스트링 혹은 딕셔너리 형태로 값이 들어갈 수 있으며 스트링으로 할 경우 보내고자하는 메시지를 적어 넣어주시면 됩니다. body : 전달할 내용을 입력합니다.
- action-loc-key : LocalizedString의 키값을 참조해 AlertView의 View Detail이라는 버튼을 언어에 맞게 변경시켜줍니다.
-
loc-key : LocalizedString의 키값을 참조해 내용을 채워줍니다.
- badge : 배지의 숫자를 입력합니다.
- acme1 or acme2 : 커스터마이징 변수값으로 임의의 문자열로 키와 값을 만들어 스트링 혹은 배열의 형태로 전달 할 수 있습니다.
출처 : http://qnibus.com/blog/how-to-develop-service-provider/