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

6. 타겟 발송 실패 시 식별자 조회

Previous5. 단일 건 발송Next7. 예약 메시지 취소

Last updated 3 months ago

개요

핑거푸시 사이트에서 제공하는 타겟 발송에 이용된 식별자에 대한 유효성 조회 기능입니다.

Server to Server 타겟 발송 후 푸시 수신 대상자로 전송한 식별자들에 대한 유효성 여부를 조회하는 기능입니다.

Server to Server 타겟 발송 기능을 이용하여 Fingerpush server에 푸시 메시지를 전송하고 이에 대한 결과 값으로 수신한 msgIdx를 이용하여 발송에 실패한 식별자 목록을 paging 처리하여 조회할 수 있습니다.

해당 API는 기본적으로 메시지를 모두 발송한 후에 조회가 가능합니다.

또한, 발송 후 발송 대상 카운트 기준으로 페이지가 설정되나, 실패한 식별자에 대해서만 결과에 표시되기에, 특정 페이지에는 결과값이 없을 수도 있습니다. (해당 페이지에 속한 대상자의 메시지 발송이 성공한 경우에는 결과페이지에 표시되지 않습니다.)

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

HTTPS Parameters

SSL Protocol을 이용하여 파라미터들을 API Server에 전달합니다. 필수 값을 제외한 값들에 대해서는 별도 처리가 없을 경우 API 서버 측에서 기본값으로 처리됩니다.

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

[표 5.1] 식별자 결과 조회 HTTPS, Parameters

파라미터명
필수 여부
Byte 수
설명

appkey

필수

-

Application key

appsecret

필수

-

Application Secret

customerkey

필수

-

Customer key

msgidx

필수

-

Server to server API를 통해 메시지를 발송하고 받은 JSON 결과 값 중 메시지 일련번호에 해당하는 값.

※ 해당 API(타겟 발송 후 발송에 실패한 식별자들에 대한 결과 조회)를 사용하기 위해서는 메시지 발송 후 수신 받은 메시지 일련번호를 고객사 DB 별도로 보관할 필요가 있습니다.

source

필수

-

API / AGENT(처리 방식) ※ Source 값 미지정 시 대량 발송에 따른 페이징 처리에 시간이 걸리게 됩니다.

page

선택

-

페이지 번호, number type, default: 1

Response JSON

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

{
  msg_state: "발송 완료",
  totalpage: "3",
  total: "268",
  result: "200",
  msgidx: "EWsEdfG2FA1555",
: "",
  identityList: 
  [ {
    identity: "kissoft2",
    err_txt : "수신 불가(앱삭제) 처리된 식별자",
    err_code : "2401"
  }, 
   … 중략 …
  {
    identity: "bada2013"
    err_txt : "존재하지 않는 식별자",
    err_code : "2404"
  }
 ]}

[표 5.2] 발송 JSON 결과

값
설명

result

결과 코드

message

결과 메시지

msgIdx

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

ex) DEF_40213134

total

조회 결과 전체 식별자 개수

msgStep

메시지 상태 (T: 메시지 입력 중, R: 발송대기, C: 성공, F: 실패, P: 발송중 일시정지)

msg_state

메시지 상태 메시지

totalpage

조회 결과 페이지 수

identityList

식별자 조회 결과 그룹

identity

식별자명

err_code

식별자에 대한 결과 코드

err_txt

식별자에 대한 결과 메시지

1) 처리결과에 따른 result 값은 아래와 같습니다. 조회 결과 identity와 쌍으로 출력되는 err_txt를 확인하시고, 존재하지 않는 식별자(2404) 등에 대해서는 추후 API 서버로의 호출이 안되도록 조치해 주시면 됩니다.

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

코드
내용
비고

200

정상처리 됨

4031

유효하지 않은 appkey 혹은 appsecret

4032

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

4033

해당 메시지에 대한 접근 권한 없음

4034

발송 완료된 메시지가 아님

500

서버 에러

503

필수 값이 누락됨

Message에 누락된 필수값 표시됨

4044코드의 경우 현재 발송 대기 중이거나 발송 중 혹은 여타 문제 등으로 인한 발송 오류인 메시지 이므로 해당 메시지가 발송 완료된 경우에 대해서 API호출이 될 수 있도록 처리해 주셔야 합니다.

각각의 identity 결과 코드에 대한 설명은 아래와 같습니다.

[표 5.4] JSON 결과의 result code 유형

코드
내용
비고

2401

수신 불가(앱 삭제) 처리된 식별자

2402

관리자에 의해 수신 거부된 식별자

2403

사용자에 의해 수신 거부된 식별자

2404

존재하지 않는 식별자

핑거푸시 Server 내에 존재하지 않음

2405

광고 푸시 동의 사용자가 아님

광고 메시지 푸시로 발송한 경우

결과 조회 시 ‘존재하지 않는 식별자‘(code: 2404)인 경우 추후 Fingerpush server로 재호출 되지 않도록 조치하시면, 불필요한 server delay 시간을 줄이실 수 있으며, 효율적인 발송을 하실 수 있습니다.

샘플 소스 설명

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

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("msgidx", 푸시메시지 번호));                // 메시지 번호(필수)        
params.add (new BasicNameValuePair("page", 조회할 페이지번호));                // 페이지 번호(선택) 

3) 기존 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/getResultTargetMess.jsp

PHP Version

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

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

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

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

$option = array(
	"msgidx" 	=> $msgidx,		// message idx (필수)
	"source" 	=> "API",		// vAPI / AGENT(처리 방식)※ Source 값 미지정 시 대량 발송에 따른 페이징 처리에 시간이 걸리게 됩니다.
	"page" 		=> "",			// 페이징number type, default: 1
);

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/getResultTgMess.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:

JAVA용 샘플의 경우 Apache common의 HttpClient()를 이용하여 파라미터를 전송하도록 하였으므로 해당 library가 필요합니다. 샘플 소스는 GitHub를 통해 확인 가능 합니다.

API Server URL:

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

PHP cURL 라이브러리:

일괄발송 API URL:

https://api-v2.fingerpush.com/rest/sts/v4/getResultTgMess.jsp
http://hc.apache.org/
https://api-v2.fingerpush.com/rest/sts/v4/getResultTgMess.jsp
https://www.php.net/manual/en/book.curl.php
https://api-v2.fingerpush.com/rest/sts/v4/getResultTgMess.jsp
Response JSON
https://github.com/kissoft/FingerPushSTSinJava