"Client already exists" 에러가 자주 발생하게 되었다.
똑같은 Push를 애플 서버에 보내게 되면 이런 현상이 있구나~ 했는데..
운영으로 올려보니 그런 경우 이외에도 과부하 발생 시 계속 에러가 났다.
해결방법을 아무리 찾아봐도 찾질 못해서,
JAVAPNS 홈페이지에서 2.2로 최신 버전 업데이트를 하게 되었다 :(
2.2 library 를 올렸더니 이게 웬걸..
얼마나 업데이트 되었는지, 엄청난 에러가 발생했다.
영문으로 된 많은 설명서를 보면서 머리가 깨질 듯 아팠지만,
그나마 간단하게 정리된 wiki 페이지를 보고 이해할 수 있게 되었다.
참고 링크 : http://code.google.com/p/javapns/wiki/PushNotificationBasic
# 다수의 디바이스, 각각의 전혀 다른 payload 그리고 Thread #
내가 하고자 하는 Push는
여러 디바이스에 해당하는 각각의 전혀 다른 메세지(payload)..
그리고 이걸 multi Thread를 사용해서 보내고자 했다.
위의 참고 링크를 보면 간단히 설명되어 있는 것 중,
다음의 방안을 찾아낼 수 있었다.
1) 사용 Payloads
payloads (keystore, password, production, numberOfThreads, payloadDevicePairs): use the built-in multithreaded transmission engine to push payloads to paired devices
2) 이중에서 payloadDevicePairs 변수가 궁금해서 찾아보니,
- Object payloadDevicePairs: a list of paired of payloads and tokens to push. You can pass the following objects to this parameter:
- javapns.notification.PayloadPerDevice[]: an array of PayloadPerDevice objects
- java.util.List<PayloadPerDevice>: a list of PayloadPerDevice objects
- javapns.notification.PayloadPerDevice: a single PayloadPerDevice object
3) 이렇단다..
이걸봐도 도무지 어떻게하면 "paired"해서 날릴 수 있는가 했더니,
정말 친절하게도 "자주 질문하는 내용" 으로 해결해 주었다. wow!
Frequently Asked Questions
- How to send a different payload for each device?: if each device should receive a different payload (even slightly different), you will need to create a PayloadPerDevice object for each device along with the payload it should receive. You can then use the Push.payloads(...)methods to push your payloads.
- Example:
List<PayloadPerDevice> payloadDevicePairs = new Vector<PayloadPerDevice>();
<사용예제>
payloadDevicePairs.add(new PayloadPerDevice(PushNotificationPayload.alert("Hello World 1!"), myDevice1));
payloadDevicePairs.add(new PayloadPerDevice(PushNotificationPayload.alert("Hello World 2!"), myDevice2));
payloadDevicePairs.add(new PayloadPerDevice(PushNotificationPayload.alert("Hello World 3!"), myDevice3));
Push.payloads("keystore.p12", "keystore_password", false, payloadDevicePairs);
이제 개발할 수 있겠다..!!