[SpringBoot] RestTemplate 으로 Onesignal API 호출해서 푸쉬 메시지 보내기
in Java on Java, Spring Boot
Java 에서 Onesignal Rest API 로 푸쉬 메시지를 보내 봅시다.
맵을 간단하게 만들기 위해 guava 의 ImmutableMap 을 활용했다. 라이브러리 추가하기 싫으면 그냥 Map 쓰면 됨
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
config 추가
RestTemplate 을 Autowired 사용하기 위해 설정을 추가한다.
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
필요하면 공통적으로 추가할 인증정보를 요런식으로 인터셉터를 추가해서 처리할 수 있다.
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.additionalInterceptors(new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
request.getHeaders().set("Authorization", "Basic xxxxxxxx(REST API KEY)");
return execution.execute(request, body);
}
}).build();
}
PUSH 전송 샘플소스
package io.github.stove99.sample;
import java.util.Arrays;
import java.util.Map;
import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApp {
@Autowired
private RestTemplate rest;
@Test
public void sendPush() {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Basic REST API KEY");
/* request json body
{
"app_id": "ONESIGNAL APP ID",
"included_segments": ["All"],
"contents": {"en": "푸쉬 메시지 보내기 테스트"}
}
*/
Map<String, Object> body = ImmutableMap.of(
"app_id", "ONESIGNAL APP ID",
"included_segments", Arrays.asList("All"),
"contents", ImmutableMap.of("en", "푸쉬 메시지 보내기 테스트")
);
HttpEntity<Map<String, Object>> request = new HttpEntity<>(body, headers);
ResponseEntity<Map> sample = rest.postForEntity("https://onesignal.com/api/v1/notifications", request,
Map.class);
log.debug("result : {}", sample.getBody());
}
}
특정 조건에 매칭되는 사람에게만 Push 메시지를 보낼려면 요렇게.
ex) 수신동의한 사람에게만 푸시 보내기
/* request json body
{
"app_id": "ONESIGNAL APP ID",
"contents": {"en": "푸쉬 메시지 보내기 테스트"},
"filters": [
{"field": "tag", "key": "recv_agree", "relation": "=", "value": "Y"}
]
}
*/
Map<String, Object> body = ImmutableMap.of(
"app_id", "ONESIGNAL APP ID",
"contents", ImmutableMap.of("en", "푸쉬 메시지 보내기 테스트"),
"filters", Arrays.asList(
ImmutableMap.of(
"field", "tag",
"key", "recv_agree",
"relation", "=",
"value", "Y"
)
)
);
자세한 사용법은 요기 참고 https://documentation.onesignal.com/reference#create-notification