/**
* Copyright 2014 Daum Kakao Corp.
*
* Redistribution and modification in source or binary forms are not permitted without specific prior written permission.
*
* 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 com.kakao;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kakao.helper.Logger;
/**
* 자기 자신에게 보내는 푸시 메시지를 구성하는 빌더.
*/
public class PushMessageBuilder {
private static ObjectMapper objectMapper = new ObjectMapper();
@JsonProperty("for_gcm")
private GCMMessageObject forGcm;
/**
* 메시지 외 앱에 부가적인 정보를 전달하고자 할 때 사용한다.
* @param customField json 형태의 String 값.
*/
public PushMessageBuilder(final String customField) {
forGcm = new GCMMessageObject(customField);
}
/**
* 푸시 메시지 구분자. 같은 값을 가지는 푸시 알림이 여러 개일 때 마지막 하나만 사용자 기기로 전송되도록 하기 위해 사용한다.
* @param collapse 푸시 메시지 구분자
* @return 계속해서 푸시 메시지를 구성할 수 있는 빌더
*/
public PushMessageBuilder setCollapse(String collapse) {
forGcm.collapse = collapse;
return this;
}
/**
* 사용자 기기가 idle인 경우 전송을 지연할지에 대한 설정을 한다.
* false인 경우, 사용자 기기의 idle 상태 상관없이 즉시 푸시 알림을 전송한다.
* true인 경우, GCM 서버 상태에 따라 어느 정도 시간이 지난 후 푸시 알림을 전송한다.
* @param delayWhileIdle 사용자 기기가 idle인 경우 전송을 지연할지 여부
* @return 계속해서 푸시 메시지를 구성할 수 있는 빌더
*/
public PushMessageBuilder setDelayWhileIdle(Boolean delayWhileIdle) {
forGcm.delayWhileIdle = delayWhileIdle;
return this;
}
/**
* 푸시 알림의 전송 실패에 대한 피드백 처리가 필요할 때 사용한다.
* 전송 실패시 설정된 url로 사용자 id, 푸시 토큰, 전송 실패 시각(millisecond)을 POST로 전송된다.
* @param returnUrl 푸시 전송 실패시 콜백 받을 url
* @return 계속해서 푸시 메시지를 구성할 수 있는 빌더
*/
public PushMessageBuilder setReturnUrl(String returnUrl) {
forGcm.returnUrl = returnUrl;
return this;
}
/**
* 푸시 메시지를 String으로 변환.
* @return String으로 변환된 푸시 메시지 객체.
*/
public String toString() {
try {
return objectMapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
Logger.getInstance().e(e);
return null;
}
}
private class GCMMessageObject {
@JsonProperty("collapse")
private String collapse;
@JsonProperty("delay_while_idle")
private Boolean delayWhileIdle;
@JsonProperty("custom_field")
private Object customField;
@JsonProperty("return_url")
private String returnUrl;
public GCMMessageObject(final String customField) {
this.customField = customField;
}
}
}