2-1. 메시지 기본 정보 발송

HTTPS Parameters

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

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

[표 2.1] 다수 발송, 메시지 IDX 받기 HTTPS, Parameters

Response JSON

API 서버에서 전달 받은 파라미터 처리 후 결과를 JSON 형태로 제공합니다. result 값이 200 이고, processCode가 20001 이면 다음 대상자 등록 프로세스를 진행합니다.

{"result": "200", "msgIdx" :  "A1DS33DDSQ2321", "processCode" : "20001", "message" : "메시지 등록이 처리되었습니다. 발급받은 메시지 아이디로 대상자 등록을 시작해 주세요.", "ratelimit-limit" : "20", "ratelimit-remaining" : "17"}

[표 2.2] 발송 JSON 결과

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

[표 2.4] JSON 결과의 processCode code 유형

JSON 형태로 제공되는 결과값 및 각 데이터의 코드값에 대한 설명은 [표 2.2] 발송 JSON 결과[표 2.3] 발송 JSON 결과의 result code 유형을 참조해 주시기 바랍니다.

샘플 소스 설명

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 = 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", 푸시메시지 내용));                // 메시지(필수)
params.add (new BasicNameValuePair("isa", "Y"));           // 안드로이드를 사용하는 대상폰 발송 Y/N (필수)
params.add (new BasicNameValuePair("asnd", ""));           // 푸시 수신 시 안드로이드 사운드 (선택)
params.add (new BasicNameValuePair("abdg", ""));           // 안드로이드 푸시 배지 처리용(선택)
params.add (new BasicNameValuePair("isi", "Y"));           // IOS를 사용하는 대상폰 발송 Y/N(필수)
params.add (new BasicNameValuePair("ibdg", ""));           // IOS 푸시 배지 처리(선택)
params.add (new BasicNameValuePair("isnd", ""));           // 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("title", push.getTitle()));  // 제목
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("ofb_time", "1w"));      // opened fall back time: 오픈 처리 제한시간  - 2h, 4h, 1d, 3d, 5d, 1w
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","H"));    // 안드로이드 우선순위 H: 높음 / M: 중간(default)
params.add (new BasicNameValuePair("optagree", "0000"));    // 옵션 동의, 0000: 광고수신 비동의 여부에 관계없이 발송, 1000: 광고 수신 동의한 사람에게만 발송

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();

4) 받은 결과는 JSON 타입의 String 이므로 결과에 맞게 변환하여 사용하시는 UI에 적용하시면 됩니다.

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();

5) 해당 결과로 받은 내용을 JSON 형식으로 받아 파싱한 결과에 따라 다음 프로세스(대상자 발송)를 준비합니다. 발송 결과가 result : 200, processCode : 20001인 경우, [표 2.2] 발송 JSON 결과[표 2.3] 발송 JSON 결과의 result code 유형을 참조해 주시기 바랍니다.

샘플 파일에서는 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");            // 반환된 결과 메시지

PHP Version

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

다수 발송의 첫 단계인 기본 메시지 발송의 부분은 앞서 설명한, 일괄 발송 및 단일 건 발송과 마찬가지로 필수값 및 메시지 부가 정보를 전송하는 것과 동일합니다.

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

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

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

$option = array(
	"msg" 			=> "푸시 메시지2", 	// 메시지(필수)
	"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" 			=> "",			// 첨부이미지 파일 링크 경로
	"link" 			=> "",			// 링크 URL
	"title" 		=> "push",		// 제목
	"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",		// 옵션 
);

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/setSTSPushs.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);                                        // 결과 값 출력

6) 해당 결과로 받은 내용을 JSON 형식으로 받아 파싱한 결과에 따라 다음 프로세스(대상자 발송)를 준비합니다.

발송 결과가 result : 200, processCode : 20001인 경우, [표 2.2] 발송 JSON 결과[표 2.3] 발송 JSON 결과의 result code 유형을 참조해 주시기 바랍니다.

Last updated