APP PUSH
Developers핑거푸시 고객지원
  • 핑거푸시 APP PUSH
  • 이용 가이드
    • 사용자 콘솔 매뉴얼
      • 앱 등록하기
      • 대시보드
      • 메시지 만들기
        • 커스텀 푸시
        • 엑셀 파일 업로드 유의사항
      • 발송 이력 및 발송 리포트
      • 인앱푸시 만들기
      • 통계
      • 앱 설정
    • 플랜별 지원 기능
    • 서비스 신청 및 결제 안내
    • 핑거푸시 라이브 앱
    • 광고성 정보 전송 가이드라인
  • SDK 매뉴얼
    • SDK 다운로드
    • Android SDK 매뉴얼
      • 주요 기능
      • 비공개 키 생성 및 등록
    • iOS SDK 매뉴얼
      • APN 인증 키(.p8) 발급 및 업로드
    • Cordova
    • React Native
    • Flutter
    • 인앱푸시 App 가이드
    • Server2Server
      • 1. 일괄 발송
      • 2. 다수의 대상자 발송
        • 2-1. 메시지 기본 정보 발송
        • 2-2. 수신 대상자 정보 발송
        • 2-3. 메시지 전송 종료 정보 발송
      • 3. 다수의 대상자 발송 (500건 이하)
      • 4. 다수의 대상자 개별 설정값 발송
      • 5. 단일 건 발송
      • 6. 타겟 발송 실패 시 식별자 조회
      • 7. 예약 메시지 취소
      • 8. 부가 서비스-통계
  • API Reference
    • Android API Reference
    • iOS API Reference
  • Agent
    • 에이전트 소개
    • 설치 및 실행
    • 푸시 발송 테스트
    • CJ올리브네트웍스 연동
    • 테이블 설명
Powered by GitBook
On this page
  • 개요
  • 발송 방법 및 전송/수신 파라미터 정의
  • HTTPS Parameters
  • Response JSON
  • 샘플 소스 설명
  • JAVA Version
  • PHP Version
  1. SDK 매뉴얼
  2. Server2Server

1. 일괄 발송

PreviousServer2ServerNext2. 다수의 대상자 발송

Last updated 3 months ago

개요

일괄 발송 기능을 이용하여, 앱을 다운받은 사용자들을 대상으로 일괄적으로 푸시 메시지를 발송합니다.

이때, 해당 푸시 메시지를 수신할 수 있는 디바이스는 앱을 삭제하지 않았고, 푸시 수신 체크가 활성화되어 있는 디바이스를 대상으로 합니다.

또한 예약 발송, 에티켓 타임 설정, 이미지 첨부(링크), Long text message, web link 및 Android/IOS API를 이용하여 푸시 수신 시의 사운드 및 배지 표시 기능 등을 제어할 수 있습니다.

발송 방법 및 전송/수신 파라미터 정의

HTTPS Parameters

SSL Protocol을 이용하여 파라미터들을 핑거푸시 Server to Server API Server(이하 API Server)에 전달합니다.

필수 값을 제외한 옵션값들에 대해서는 파라미터가 전달되지 않을 경우 기본값으로 처리됩니다.

API Server로 전달해야 할 파라미터들은 아래 표를 참조해 주세요.

[표 1.1] 일괄 발송 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

선택

200

deep link > web link ex) https://www.kissoft.co.kr

※ 해당 링크에 정의된 값이 있으면 푸시 메시지에 해당 링크 제공(핑거푸시 APP API가 적용되어 있어야 함)

fnm

선택

256

첨부 이미지 링크

-안드로이드 폰에서 첨부된 이미지 표현 가능

-도메인을 포함한 전체 경로 입력

ex)http://www.kissoft.co.kr/images/img.jpg

mode

선택

-

DEFT: 일반 푸시(default) LNGT: long text push

※ 해당 값을 서버로 전송하지 않으면 일반 푸시 처리됨

lngt_message

선택

Text

Long text message 내용

-길이에 제약이 없는 long text message를 처리하기 위한 값

-해당 내용에는 HTML tag 포함 가능, Script 등은 사용 불가

-해당 기능을 사용하기 위해서는 mode 값이 LNGT로 설정되어야 함

send_state

선택

4

0001: 바로 발송(default)

0002: 예약발송

senddate

선택

12

send_stat 값이 0002(예약발송)으로 처리된 경우 예약 발송 날자 및 시간 입력

ex) yyyymmdd24hmin -> 202109172113

tag

선택

-

태그 발송

-App 개발 시 적용한 tag 값을 기준으로 메시지 발송 시 tag를 지정하여 발송

-여러 개의 태그 적용 시 콤마( , )로 구분, 해당 태그들은 OR 조건으로 발송됨

ex) 서울,대전,대구,부산

beschmode

선택

-

태그 발송 시 조건

0001: or(default)

0002: and

title

선택

100

푸시 수신 시 메시지 제목

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: 광고 수신 동의한 디바이스에만 메시지 발송

Response JSON

API 서버에서 전달 받은 파라미터 처리 후 결과를 JSON 형태로 제공합니다.

{"result" : "200", "message" : "정상 처리되었습니다.",  "msg_idx" : "DEF_3342131",  "tokenCnt" : "15"}

[표 1.2] 발송 JSON 결과

값
설명

result

결과 코드

message

결과 메시지

msg_idx

등록된 메시지 번호. 결과 조회 시 사용

ex) DEF_40213134

tokenCnt

발송 대상 디바이스(모바일기기) 수

처리결과에 따른 result 값은 아래와 같습니다.

[표 1.3] 발송 JSON 결과의 result code 유형

코드
내용
비고

200

정상처리 됨

4031

유효하지 않은 appkey 혹은 appsecret

4032

Server to Server 서비스 이용권한 없음

500

처리 중 오류 발생

발송 대상자, 메시지

503

필수 값이 누락됨

Message에 누락된 필수값 표시됨

샘플 소스 설명

HTTPS로 미리 정의된 파라미터들을 전달하고 JSON으로 결과 데이터를 읽을 수 있도록 작업해 주시면 됩니다.

JAVA용 샘플의 경우 Apache common의 HttpClient(http://hc.apache.org/)를 이용하여 파라미터를 전송하도록 하였으므로 해당 library가 필요합니다. 해당 기능만 충족하면 되므로 여타 다른 library를 사용하셔도 무방합니다. 샘플 소스는 GitHub를 통해 확인 가능합니다.

JSP 샘플의 경우, 샘플 메소드를 이용한 직접 발송이 가능합니다. 혹, 사용자 환경에 맞도록 수정이 필요하면 class(com.fingerpush.push.FingerpushDaoImpl) 내에 구성되어 있는 메소드를 참조해 주시기 바랍니다.

해당 샘플에 대한 설명은 파라미터 전달 및 API URL에 대해 클래스 내에 구현되어 있는 로직 위주로 설명 드립니다.

JAVA Version

Github에 올려져 있는 샘플 소스는 아래 설명된 내용 중 중복된 부분들을 method화 하여 처리하므로 약간의 차이가 있을 수 있으나, 기본 발송 방식의 설명이므로 해당 중복되는 부분을 풀어서 설명하도록 하겠습니다.

1) 파라미터를 담을 List 객체를 선언해 전달할 값들을 셋팅 합니다.

List <BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();

2) 필수 값들을 셋팅 합니다.

List <BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); 

params.add (new BasicNameValuePair("appkey", 애플리케이션 키));            // (필수)	
params.add (new BasicNameValuePair("appsecret", 애플리케이션 시크릿));      // (필수)
params.add (new BasicNameValuePair("customerkey", 발급받은 커스터머키));    // (필수)
params.add (new BasicNameValuePair("msg", 푸시메시지 내용));               // 푸시메시지 내용(필수)

3) 선택 값들을 셋팅 합니다. (선택)

  • 해당 내용들은 Application 개발 시 반영된 내용을 기준으로 처리합니다.

  • 2.5 버전부터 새로 추가된 내용들에 대해서도 값들을 추가합니다.

  • 해당 내용들은 안드로이드 및 IOS용 SDK가 앱에 적용되어 있어야만 기능이 발현됩니다.

params.add (new BasicNameValuePair("isa", "Y"));       // 안드로이드를 사용하는 대상 폰 발송 Y/N(선택)
params.add (new BasicNameValuePair("asnd", "ring1"));  // 푸시 수신 시 안드로이드 사운드(선택)
params.add (new BasicNameValuePair("abdg", "1"));      // 안드로이드 푸시 배지 처리용(선택)        
params.add (new BasicNameValuePair("isi", "Y"));       // IOS를 사용하는 대상 폰 발송 Y/N (선택)
params.add (new BasicNameValuePair("ibdg", "1"));      //IOS 푸시 배지 처리(선택)
params.add (new BasicNameValuePair("isnd", "ring1"));  // IOS 푸시 사운드 처리(선택)        
params.add (new BasicNameValuePair("ck1", ""));        // custom key 1(선택)
params.add (new BasicNameValuePair("ck2", ""));        // custom key 2(선택)
params.add (new BasicNameValuePair("ck3", ""));        // custom key 3(선택)
params.add (new BasicNameValuePair("cv1", ""));        // custom value 1(선택)
params.add (new BasicNameValuePair("cv2", ""));        // custom value 2(선택)
params.add (new BasicNameValuePair("cv3", ""));        // custom value 3(선택)
params.add (new BasicNameValuePair("fnm", ""));        // 첨부이미지 파일 링크 경로(선택)
params.add (new BasicNameValuePair("tag", "서초,강남,송파"));  // 첨부이미지 파일 링크 경로(선택)
params.add (new BasicNameValuePair("beschmode", "0001"));     // 0001: or(default), 0002: and
params.add (new BasicNameValuePair("title", "앱 업데이트 공지"));  // 제목
params.add (new BasicNameValuePair("bgcolor", "#FF0000"));   // 배경 컬러 RGB 값. ex) #FF0000
params.add (new BasicNameValuePair("fcolor", "#4374D9"));    // 폰트 컬러 RGB 값. ex) #4374D9
params.add (new BasicNameValuePair("lcode", ""));            // 메시지 라벨코드 : 메시지 라벨관리에서 발급받은 10자리 난수
params.add (new BasicNameValuePair("isetiquette", "Y"));     // 에티켓 시간 적용 여부 Y:적용, N: 적용 안함
params.add (new BasicNameValuePair("etiquette_stime", "20"));   // 에티켓 적용 시작 시간 0~23
params.add (new BasicNameValuePair("etiquette_etime", "8"));    // 에티켓 적용 해제 시간 0~23
params.add (new BasicNameValuePair("and_priority", "M"));  // 안드로이드 우선순위 H: 높음 / M: 중간(default)
params.add (new BasicNameValuePair("optagree", "0000"));   // 0000: 광고수신 비동의 여부에 관계없이 발송, 1000: 광고수신 동의 한 사람에게만 발송

4) 기존 HttpClient의 DefaultHttpClient를 이용한 원격 접속 방식이 deprecated 된 이유로 HttpsURLConnection을 이용하여 접속합니다. 물론 deprecated 되었다고 해서 DefaultHttpClient 방식이 동작하지 않는 것은 아닙니다. 해당 방식 역시 github에 올려져 있는 샘플 소스에 구현되어 있습니다.

  • 예제: FingerpushDaoImpl.sendHttpsExe(String callUrl, List <BasicNameValuePair> params)

전달하는 파라미터는 UTF-8로 인코딩 하여 전달해야 합니다.

  • 예제: 샘플의 FingerpushDaoImpl.sendHttpsUrlConExe(String callUrl, List <BasicNameValuePair> params)

URL url = new URL(callUrl);
trustAllHosts();

HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String s, SSLSession sslSession) {
        return true;
    }
});
HttpURLConnection connection = httpsURLConnection;

connection.setRequestMethod("POST");
connection.setUseCaches(false);           
connection.setDoInput(true);
connection.setDoOutput(true);

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
OutputStream post = connection.getOutputStream();
entity.writeTo(post);
 
post.flush();
connection.connect();
StringBuilder responseStringBuilder = new StringBuilder();
logger.debug("contentType : "+connection.getContentType());
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK){
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
    for (;;){
        String stringLine = bufferedReader.readLine();
        if (stringLine == null ) break;
        responseStringBuilder.append(stringLine + '\n');
    }
    bufferedReader.close();
}
connection.disconnect();
jsonString = responseStringBuilder.toString();

※ JAVA Version 일괄발송 샘플

소스 주소

class

com.fingerpush.push.FingerpushDao

com.fingerpush.push.FingerpushDaoImpl

com.fingerpush.push.PushVO

jsp

JSP/sendAllDevice.jsp

PHP Version

Github에 올려져 있는 샘플 소스는 아래 설명된 내용 중 중복된 부분들을 method화 하여 처리하므로 약간의 차이가 있을 수 있으나, 기본 발송 방식의 설명이므로 해당 중복되는 부분을 풀어서 설명하도록 하겠습니다.

1) 기본 앱 정보를 세팅합니다.

// 공통 필수 
$key = array(
    'appkey'            => '[발급받은 appkey]',
    'appsecret'         => '[발급받은 appsecret]',
    'customerkey'       => '[발급받은 customerkey]',
);

2) 메시지 발송에 사용되는 필수값과 선택값을 세팅합니다.

// (필수) 표기를 제외한 항목은 모두 선택사항
$option = array(
    "msg"               => "전체 메시지", // 메시지(필수)
    "isa"               => "Y",         // 안드로이드를 사용하는 대상폰 발송 Y/N
    "abdg"              => "",          // 안드로이드 푸시 배지 처리 용
    "asnd"              => "",          // 푸시 수신 시 안드로이드 사운드
    "isi"               => "Y",         // IOS를 사용하는 대상폰 발송 Y/N
    "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"               => "",          // 첨부이미지 파일 링크 경로
    "link"              => "",          // 링크 URL
    "mode"              => "DEFT",      // DEFT: 일반 푸시 메시지 / LNGT: 내용이 많은 long text push
    "lngt_message"      => "",          // long text message
    "send_state"        => "0001",      // 0001: 바로 발송 / 0002: 예약발송
    "senddate"          => "",          // 예약발송인 경우 예약 발송일 ex) 202109172113
    "tag"               => "",          // 발송 tag. 쉼표(, )로 구분. ex) 서울,대전,대구,부산
    "beschmode"         => "0001",      // 태그 발송 시 조건. 0001: or / 0002: and
    "title"             => "",          // 제목
    "bgcolor"           => "#FFFFFF",   // 배경 컬러
    "fcolor"            => "#4374D9",   // 폰트 컬러
    "lcode"             => "",          // 메시지 라벨코드 : 메시지 라벨관리에서 발급받은 10자리 난수
    "isetiquette"       => "Y",         // 에티켓 시간 적용 여부 Y 적용, N 적용 안함.
    "etiquette_stime"   => "20",        // 에티켓 적용 시작 시간 0~23
    "etiquette_etime"   => "8",         // 에티켓 적용 해제시간 0~23
    "and_priority"      => "M",         // 안드로이드 우선순위 H: 높음 / M: 중간(default)
    "optagree"          => "0000",      // 옵션 동의. 0000: 광고수신 비동의 여부에 관계없이 발송, 1000: 광고수신 동의 한 사람에게만 발송
);

3) 앱 기본정보와 옵션값을 URL 인코드 한 쿼리 문자열로 생성합니다.

$data = array_merge ( $key, $option ); 	         // 세팅한 데이터를 하나의 배열로 합칩니다.
$param = http_build_query ($data); 	         // 파라미터를 생성합니다.

4) PHP cURL 라이브러리를 이용하여 핑거푸시 API와 통신합니다.

cURL을 아래와 같이 HTTPS 통신으로 세팅합니다.

$url = ' https://api-v2.fingerpush.com/rest/sts/v4/setFingerPush.jsp'; // 핑거푸시 다수에게 메시지 발송 API URL
$ch = curl_init (); 			                // cURL 선언
curl_setopt ( $ch, CURLOPT_URL, $url ); 		// URL 세팅
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false ); 	// 인증서 체크
curl_setopt ( $ch, CURLOPT_SSLVERSION, 1 ); 	        // SSL 버전 -> 1만 된다.
curl_setopt ( $ch, CURLOPT_HEADER, 0 ); 		// 헤더 출력 여부
curl_setopt ( $ch, CURLOPT_POST, 1 ); 			// POST, GET 접속 여부
curl_setopt ( $ch, CURLOPT_TIMEOUT, 30 ); 		// Time Out 세팅
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );         // 결과값 리턴 여부
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $param );         // parameter
$res = curl_exec ( $ch ); 								// cURL 실행하고 결과 저장

/* cURL 에러검출 */
$cErrno = curl_errno ( $ch );

if ($cErrno == 0) $response = $res;
else $response = exit;
curl_close ( $ch ); 			                 // cURL을 닫고 자원 반환

5) 전달 받은 JSON 문자열 결과값을 PHP 변수로 변환합니다.

// 1. json 처리시
echo $response;

// 2. object 처리시
$result = json_decode ( $response, true );              // 결과값 JSON 디코드
print_r($result);

API Server URL:

API Server URL:

5) 받은 결과는 JSON 타입의 String이므로 결과에 맞게 변환하여 사용하시는 UI에 적용하시면 됩니다. 받은 jsonString은 앞서 설명한 '' 부분을 참조해 주세요.

PHP Curl 라이브러리:

다수에게 메시지 발송 API URL:

https://api-v2.fingerpush.com/rest/sts/v4/setFingerPush.jsp
https://api-v2.fingerpush.com/rest/sts/v4/setFingerPush.jsp
https://www.php.net/manual/en/book.curl.php
https://api-v2.fingerpush.com/rest/sts/v4/setFingerpush.jsp
Response JSON
https://github.com/kissoft/FingerPushSTSinJava