500건 이하의 다수의 대상자에게 메시지를 전송하는 경우입니다. 각각의 대상자에게 각기 다른 메시지 전송이 가능합니다. 또한, 각 대상자에게 개별 이미지, 제목(title), 웹 링크 역시 전송이 가능 합니다 (2.5 버전 이후)
500건 이상의 대량의 대상자들을 대상으로한 캠패인 발송의 경우 ( 1)메시지 기본정보 전송 / 2) 500건 단 위의 대상자 정보 전송 (n회) / 3) 대상자 전송 완료 정보 전송 ) 3단계로 이루어지나, 500건 이하 발송의 경우 일괄발송 혹은 단일 건 발송 처럼, 단 한 번의 파라미터 발송으로 푸시 메시지 발송 처리가 완료됩니다. (한 번에 API서버로 전송되는 대상자의 경우 500건 이상을 보내더라도 서버 측 에서 500건 까지만 처리됩니다.)
메시지 수신 대상자 목록과 그에 따른 각각의 메시지는 동일한 수로 구성되어야 합니다. ex) 수신자 목록과 메시지 목록의 길이가 다를 경우 오류 반환
Ver 2.5 부터는 개별 이미지, 개별 웹 링크, 개별 타이틀을 발송할 수 있는 기능이 추가되었으며, 해당 값 중 적용하고자 하는 항목이 있을 경우 메시지와 마찬가지로 대상자 목록과 동일한 수의 쌍으로 구성되어야 합니다.
API Server로 전달해야 할 파라미터 들은 아래 [표 2-1.1. 다수 발송 메시지 IDX 받기 HTTPS, Parameters]를 참조해 주세요.
[표 2-1.1] 다수 발송, 메시지 IDX 받기 HTTPS, Parameters
파라미터명
필수 여부
Byte 수
설명
appkey
필수
-
Application key
appsecret
필수
-
Application Secret
customerkey
필수
-
Customer key
msg
필수
1000
보낼 푸시 메시지
통계 리스트에 표시됨
isa
선택
-
Y: 안드로이드 기기 대상 발송(default)
N: 안드로이드 기기를 전송 대상에서 제외
※ 해당 값이 빈 상태로 서버로 전달될 경우, 기본 값인 Y로 처리
asnd
선택
50
안드로이드 기기의 푸시 수신 사운드
※ 핑거푸시 Android API 적용을 기준으로 효과음 지정
abdg
선택
-
안드로이드 푸시 배지 처리 파라미터, number type. ex) 1 ~
※ 핑거푸시 Android API 적용을 기준으로 배지 효과 지정
isi
선택
1
Y: IOS 기기 대상 발송(default)
N: IOS 기기를 전송 대상에서 제외
※ 해당 값이 빈 상태로 서버로 전달될 경우, 기본 값인 Y로 처리
ibdg
선택
-
IOS 푸시 배지 처리 파라미터, number type. ex) 1 ~
※ 핑거푸시 IOS API 적용을 기준으로 배지 효과 지정
isnd
선택
50
IOS 기기의 푸시 수신 사운드
※ 핑거푸시 IOS API 적용을 기준으로 효과음 지정
ck1
선택
100
커스텀 키 1(App 개발 시 반영된 값)
deep link > app link > custom key 1
※ 핑거푸시 API 적용을 기준으로 사용자가 정의한 키 값
ck2
선택
100
커스텀 키 2(App 개발 시 반영된 값)
deep link > app link > custom key 2
※ 핑거푸시 API 적용을 기준으로 사용자가 정의한 키 값
ck3
선택
100
커스텀 키 3(App 개발 시 반영된 값)
deep link > app link > custom key 3
※ 핑거푸시 API 적용을 기준으로 사용자가 정의한 키 값
cv1
선택
200
커스텀 값 1(App 개발 시 반영된 값)
deep link > app link > custom value 1
※ 핑거푸시 API 적용을 기준으로 사용자가 정의한 키 매칭 값
cv2
선택
200
커스텀 값 2(App 개발 시 반영된 값)
deep link > app link > custom value 2
※ 핑거푸시 API 적용을 기준으로 사용자가 정의한 키 매칭 값
cv3
선택
200
커스텀 값 3(App 개발 시 반영된 값)
deep link > app link > custom value 3
※ 핑거푸시 API 적용을 기준으로 사용자가 정의한 키 매칭 값
link
선택
256
deep link > web link
ex) https://www.kissoft.co.kr
※ 해당 링크에 정의된 값이 있으면 푸시 메시지에 해당 링크 제공(핑거푸시 APP API가 적용되어 있어야 함)
fnm
선택
256
첨부 이미지 링크
-안드로이드 폰에서 첨부된 이미지 표현 가능
-도메인을 포함한 전체 경로 입력
ex)http://www.kissoft.co.kr/images/img.jpg
send_state
선택
4
0001: 바로 발송(default)
0002: 예약발송
senddate
선택
12
send_stat 값이 0002(예약발송)으로 처리된 경우 예약 발송 날자 및 시간 입력
ex) yyyymmdd24hmin -> 202109172113
lcode
선택
10
라벨 코드
bgcolor
선택
7
배경색 ex) #FFFFFF
fcolor
선택
7
폰트 색상 ex) #000000
isetiquette
선택
-
에티켓 시간 적용 여부
Y: 적용(default)
N: 적용 안함
etiquette_stime
선택
-
에티켓 적용 시작시간
-Number type(1~ 24)
-default: 21(오후 9시)
etiquette_etime
선택
-
에티켓 적용 종료시간
-Number type(1~24)
-default: 8(오전 8시)
and_priority
선택
-
안드로이드용 메시지 우선순위
H: 높음
M: 중간(default)
optagree
선택
-
0000: 광고 수신 동의 여부에 관계없이 푸시 수신자 모두에게 발송(default)
1000: 광고 수신 동의한 디바이스에만 메시지 발송
identity
필수
50
메시지를 받을 대상자(500건 이하로 입력)
message
필수
1000
대상자에게 보낼 메시지(500건 이하로 입력)
prv_attachfname
선택
256
대상자에게 보낼 이미지(500건 이하로 입력)
prv_linkurl
선택
256
대상자에게 보낼 웹링크(500건 이하로 입력)
prv_title
선택
100
대상자에게 보낼 제목(500건 이하로 입력)
isfinish
필수
-
종료 플래그: 값을 Y로 셋팅 함
Response JSON
API 서버에서 전달 받은 파라미터 처리 후 결과를 JSON 형태로 제공합니다.
result 값이 200 이고, processCode가 20001 이면 다음 대상자 등록 프로세스를 진행합니다.
{"result":"200","msgIdx":"A1DS33DDSQ2321","processCode":"20003","message":"메시지 등록이 처리되었습니다. 발급받은 메시지 아이디로 대상자 등록을 시작해 주세요.","ratelimit-limit":"20","ratelimit-remaining":"17"}
HTTPS로 미리 정의된 파라미터들을 전달하고 JSON으로 결과 데이터를 읽을 수 있도록 작업해 주시면 됩니다.
JAVA용 샘플의 경우 Apache common의 HttpClient(http://hc.apache.org/)를 이용하여 파라미터를 전송하도록 하였으므로 해당 library가 필요합니다. 샘플 소스는 GitHub를 통해 확인 가능합니다.
JSP 샘플의 경우, 샘플 메소드를 이용한 직접 발송이 가능합니다. 혹, 사용자 환경에 맞도록 수정이 필요하면 class(com.fingerpush.push.FingerpushDaoImpl) 내에 구성되어 있는 메소드를 참조해 주시기 바랍니다.
해당 샘플에 대한 설명은 파라미터 전달 및 API URL에 대해 클래스 내에 구현되어 있는 로직 위주로 설명 드립니다.
JAVA Version
Github에 올려져 있는 샘플 소스는 아래 설명된 내용 중 중복된 부분들을 method화 하여 처리하므로 약간의 차이가 있을 수 있으나, 기본 발송 방식의 설명이므로 해당 중복되는 부분을 풀어서 설명하도록 하겠습니다.
다수 발송의 첫 단계인 기본 메시지 발송의 부분은 앞서 설명한, 일괄 발송 및 단일 건 발송과 마찬가지로 필수값 및 메시지 부가 정보를 전송하는 것과 동일합니다.
1) 파라미터를 담을 List 객체를 선언해 전달할 값들을 셋팅 합니다.
List <BasicNameValuePair> params =newArrayList<BasicNameValuePair>();
2) 필수 값들을 셋팅 합니다.
List <BasicNameValuePair> params =newArrayList<BasicNameValuePair>(); // 1. 메시지 기본정보 셋팅params.add (newBasicNameValuePair("appkey", 애플리케이션 키)); // (필수) params.add (newBasicNameValuePair("appsecret", 애플리케이션 시크릿)); // (필수)params.add (newBasicNameValuePair("customerkey", 발급받은 커스터머키)); // (필수)params.add (newBasicNameValuePair("msg", 푸시메시지 내용)); // 메시지(필수)params.add (newBasicNameValuePair("msg", strMsg)); // 메시지(필수)params.add (newBasicNameValuePair("isa","Y")); // 안드로이드를 사용하는 대상폰 발송 Y/N (필수)params.add (newBasicNameValuePair("asnd","")); // 푸시 수신 시 안드로이드 사운드 (선택)params.add (newBasicNameValuePair("abdg","")); // 안드로이드 푸시 배지 처리용(선택)params.add (newBasicNameValuePair("isi","Y")); // IOS를 사용하는 대상폰 발송 Y/N(필수)params.add (newBasicNameValuePair("ibdg","")); // IOS 푸시 배지 처리(선택)params.add (newBasicNameValuePair("isnd","")); // IOS 푸시 사운드 처리(선택)params.add (newBasicNameValuePair("ck1","")); // custom key 1(선택)params.add (newBasicNameValuePair("ck2","")); // custom key 2(선택)params.add (newBasicNameValuePair("ck3","")); // custom key 3(선택)params.add (newBasicNameValuePair("cv1","")); // custom value 1(선택)params.add (newBasicNameValuePair("cv2","")); // custom value 2(선택)params.add (newBasicNameValuePair("cv3","")); // custom value 3(선택)params.add (newBasicNameValuePair("fnm","")); // 첨부이미지 파일 링크 경로(선택)params.add (newBasicNameValuePair("title",push.getTitle())); // 제목params.add (newBasicNameValuePair("bgcolor","#FF0000")); // 배경 컬러 RGB 값. ex) #FF0000params.add (newBasicNameValuePair("fcolor","#4374D9")); // 폰트 컬러 RGB 값. ex) #4374D9params.add (newBasicNameValuePair("lcode","")); // 메시지 라벨코드: 메시지 라벨관리에서 발급받은 10자리 난수params.add (newBasicNameValuePair("ofb_time","1w")); // opened fall back time: 오픈 처리 제한시간 - 2h, 4h, 1d, 3d, 5d, 1wparams.add (newBasicNameValuePair("isetiquette","Y")); // 에티켓 시간 적용 여부 Y: 적용, N: 적용 안함params.add (newBasicNameValuePair("etiquette_stime","20")); // 에티켓 적용 시작 시간 0~23params.add (newBasicNameValuePair("etiquette_etime","8")); // 에티켓 적용 해제 시간 0~23params.add (newBasicNameValuePair("and_priority","H")); // 안드로이드 우선순위 H: 높음 / M: 중간(default)params.add (newBasicNameValuePair("optagree","0000")); // 옵션 동의, 0000: 광고수신 비동의 여부에 관계없이 발송, 1000: 광고 수신 동의한 사람에게만 발송// 2. 수신 대상 정보 셋팅params.add (newBasicNameValuePair("identity", 수신받을 대상자의 식별자1)); // (필수)params.add (newBasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지1)); // (필수)params.add (newBasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지1)); //(선택)params.add (newBasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크1)); // (선택)params.add (newBasicNameValuePair("prv_title", 수신받을 대상자에게 보낼 제목1)); // (선택)params.add (newBasicNameValuePair("identity", 수신받을 대상자의 식별자2)); // (필수)params.add (newBasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지2)); // (필수)params.add (newBasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지2)); // (필수)params.add (newBasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지2)); //(선택)params.add (newBasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크2)); // (선택)params.add (newBasicNameValuePair("prv_title", 수신받을 대상자에게 보낼 제목2)); // (선택)… 중략 …params.add (newBasicNameValuePair("identity", 수신받을 대상자의 식별자n)); // (필수)params.add (newBasicNameValuePair("message", 수신받을 대상자에게 보낼 메시지n)); // (필수)Params.add (newBasicNameValuePair("prv_attachefname", 수신받을 대상자에게 보낼 이미지n)); //(선택)params.add (newBasicNameValuePair("prv_linkurl", 수신받을 대상자에게 보낼 웹링크n)); // (선택)params.add (newBasicNameValuePair("prv_title", 수신받을 대상자에게 보낼 제목n)); // (선택)// 3. 대상자 설정 종료 셋팅params.add (newBasicNameValuePair("isfinish","Y")); // 푸시 메시지 종료(필수)
3) 기존 HttpClient의 DefaultHttpClient를 이용한 원격 접속 방식이 deprecated 된 이유로 HttpsURLConnection을 이용하여 접속합니다. 물론 deprecated 되었다고 해서 DefaultHttpClient 방식이 동작하지 않는 것은 아닙니다. 해당 방식 역시 github에 올려져 있는 샘플 소스에 구현되어 있습니다.
예제: FingerpushDaoImpl.sendHttpsExe(String callUrl, List <BasicNameValuePair> params)
전달하는 파라미터는 UTF-8로 인코딩 하여 전달해야 합니다.
예제: 샘플의 FingerpushDaoImpl.sendHttpsUrlConExe(String callUrl, List <BasicNameValuePair> params)
샘플 파일에서는 JSON형식의 String 문자열을 JSON Object 로 바꾸어 파싱하기 위해 sourceforge에서 배포하는 JSON-lib (http://sourceforge.net/projects/json-lib/files/)를 사용합니다.
jsonString =sendMessage(strAppkey, strAppSecret, strCustomerKey, strMsg, callUrl);JSONObject jsonObj =JSONObject.fromObject(jsonString);String result = (String)jsonObj.get("result"); // 결과 코드String msgIdx = (String)jsonObj.get("msgIdx"); // 메시지 등록 후 반환되는 메시지 번호String processCode = (String)jsonObj.get("processCode"); // 메시지 발송 단계, 20001 메시지 등록 시작, 20002 대상자 설정, 20003 메시지 설정 완료String message = (String)jsonObj.get("message"); // 반환된 결과 메시지
Github에 올려져 있는 샘플 소스는 아래 설명된 내용 중 중복된 부분들을 method화 하여 처리하므로 약간의 차이가 있을 수 있으나, 기본 발송 방식의 설명이므로 해당 중복되는 부분을 풀어서 설명하도록 하겠습니다.
다수 발송의 첫 단계인 기본 메시지 발송의 부분은 앞서 설명한, 일괄 발송 및 단일 건 발송과 마찬가지로 필수값 및 메시지 부가 정보를 전송하는 것과 동일합니다.
1)기본 앱 정보를 세팅합니다.
// 공통 필수 $key =array('appkey'=>'[발급받은 appkey]','appsecret'=>'[발급받은 appsecret]','customerkey'=>'[발급받은 customerkey]',);
2) 메시지 발송에 사용되는 필수값과 선택값을 세팅합니다.
$members = ["member1","member2"];for ($i =0; $i <count($members) ; ++$i) { $option =array("identity"=> $members[$i],// identity (필수)"message"=> $members[$i] ."님 안녕하세요.",// 개별 메시지(필수)"prv_attachefname"=>"","prv_linkurl"=>"","prv_title"=>"" ); $users[] =http_build_query($option);}if( !count($users) ) {echojson_encode(array("result"=>"4040","message"=>"전송 대상 정보가 없습니다." ));exit();}$option =array(// 1. 메시지 기본정보"msg"=>"푸시 메시지 500개 이하",// 메시지(필수)"isa"=>"Y",// 안드로이드 발송 Y/N"isi"=>"Y",// IOS 발송 Y/N"asnd"=>"",// 푸시 수신 시 안드로이드 사운드"abdg"=>"",// 안드로이드 푸시 배지 처리용"ibdg"=>"",// IOS 푸시 배지 처리"isnd"=>"",// IOS 푸시 사운드 처리"ck1"=>"",// custom key 1"ck2"=>"",// custom key 2"ck3"=>"",// custom key 3"cv1"=>"",// custom value 1"cv2"=>"",// custom value 2"cv3"=>"",// custom value 3"fnm"=>"",// 첨부이미지 파일 링크 경로"title"=>"제목",// 제목"bgcolor"=>"#FF0000",// 배경 컬러 RGB 값. ex) #FF0000"fcolor"=>"#4374D9",// 폰트 컬러 RGB 값. ex) #4374D9"lcode"=>"",// 메시지 라벨코드: 메시지 라벨관리에서 발급받은 10자리 난수"ofb_time"=>"1w",// opened fall back time: 오픈 처리 제한시간 - 2h, 4h, 1d, 3d, 5d, 1w"isetiquette"=>"Y",// 에티켓 시간 적용 여부 Y: 적용, N: 적용 안함"etiquette_stime"=>"20",// 에티켓 적용 시작 시간 0~23"etiquette_etime"=>"8",// 에티켓 적용 해제 시간 0~23"and_priority"=>"H",// 안드로이드 우선순위 H: 높음 / M: 중간(default)"optagree"=>"0000",// 옵션 동의, 0000: 광고수신 비동의 여부에 관계없이 발송, 1000: 광고 수신 동의한 사람에게만 발송"isfinish"=>"Y",// 푸시 메시지 종료(필수));
3) 앱 기본정보와 옵션값을 URL 인코드 한 쿼리 문자열로 생성합니다.
$data =array_merge($key, $option); // 세팅한 데이터를 하나의 배열로 합칩니다.$qs = ( count($users) ) ?"&".implode("&", $users):"";$param =http_build_query($data). $qs; // 파라미터를 생성합니다.