테스트 사이트 - 개발 중인 베타 버전입니다

푸시우시 전송 클래스

· 10년 전 · 1887 · 17

다마리 행님의 어플 지원으로 후딱 만들었습니다.

안드로이드는 확인 했습니다. 아마 다른 디바이스도 작동 될 것으로 생각 됩니다.

날림 작업 소스라 개발자팁으로는 못올리겠네요 ㅠ.ㅠ

 

[code]

<?php

/**

* 제작: 임동덕

* 작업일: 2015-02-11

* 사용법

-------------------------------------------

$Push = new TBPushWoosh; // 클래스 선언

$Push->setConfig( pushwoosh api 토큰키 , pushwoosh 어플리케이션코드(어플아님) , 디버그모드(true, false) ); // 기본환경설정

$Push->Send( 메시지 ); // 전체 발송

$Push->Send( 메시지, '', Y-m-d H:i 형태의 시간 ); // 예약 전체 발송

$Push->Send( 메시지, 디바이스코드(array or string) ); // 디바이스 지정 발송

$Push->Send( 메시지, 디바이스코드(array or string) , Y-m-d H:i 형태의 시간 ); // 디바이스 지정 예약발송

$Push->unsetConfig(); // 기본환경설정 초기화 (특이사항에서만 사용)

**/

class TBPushWoosh {

 

var $config;

 

 

# 기본 pushwosh 토큰과 디버그 모드를 설정한다.

public function setConfig($Auth, $AppCode, $Debug=false) {

 

$this->config['auth'] = $Auth;

$this->config['app_code'] = $AppCode;

$this->config['debug'] = $Debug;

}

 

 

# 설정된 토큰과 디버그 모드를 리셋한다.

public function unsetConfig() {

 

$this->config['auth'] = '';

$this->config['app_code'] = '';

$this->config['debug'] = false;

}

 

 

# 설정을 확인한다.

public function printConfig() {

 

$config = $this->config;

 

return $config;

}

 

 

# 내부에서 사용하는 CURL 함수

private function Curl($Url, $Request) {

 

// 반환 변수 초기값

$output = array();

 

$ch = curl_init($Url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

curl_setopt($ch, CURLOPT_HEADER, true);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $Request);

$response = curl_exec($ch);

$info = curl_getinfo($ch);

curl_close($ch);

 

$output['response'] = $response;

$output['info'] = $info;

 

return $output;

}

 

# array to json

public function array_to_json($data) {

 

switch (gettype($data)) {

 

case 'boolean':

return $data?'true':'false';

case 'integer':

case 'double':

return $data;

case 'string':

return '"'.strtr($data, array('\\'=>'\\\\','"'=>'\\"')).'"';

case 'array':

$rel = false; // relative array?

$key = array_keys($data);

foreach ($key as $v) {

if (!is_int($v)) {

$rel = true;

break;

}

}

 

$arr = array();

foreach ($data as $k=>$v) {

$arr[] = ($rel?'"'.strtr($k, array('\\'=>'\\\\','"'=>'\\"')).'":':'').$this->array_to_json($v);

}

 

return $rel?'{'.join(',', $arr).'}':'['.join(',', $arr).']';

default:

return '""';

}

}

 

 

# 메시지를 발송한다.

public function Send($msg, $Device='', $SetTime='now') {

 

 

// 초기값 선언

$request_add = '';

$notifications_add = '';

 

// 통신 매쏘드 (고정) + url

$method= 'createMessage';

$url = 'https://cp.pushwoosh.com/json/1.3/' . $method;

 

// 예약 발송시 사용

if($SetTime == 'now') {

$notifications_add .= ', "send_date": "now" ';

}

else {

 

if(time() > strtotime($SetTime)) $notifications_add .= ', "send_date": "now" '; // 과거 시간으로 전송 차단

else $notifications_add .= ', "send_date": "'.date('Y-m-d H:i', strtotime($SetTime)).'" ';

}

 

// 디바이스 지정 전송 설정

if(trim($Device)) {

 

if(is_array($Device)) {

 

$notifications_add .= ' ,"devices": [ ';

foreach($Device as $key=>$val) {

 

if($key > 0) $notifications_add .= ', ';

 

$notifications_add .= ' "'.$val.'" ';

}

$notifications_add .= ' ] ';

}

else {

 

$notifications_add .= ' ,"devices": ["'.$Device.'"] ';

}

}

 

// msg to json

$msg = $this->array_to_json($msg);

 

// json 전송 포맷 설정

$request = '{

"request": {

"application": "'.$this->config['app_code'].'",

"auth": "'.$this->config['auth'].'",

"notifications": [{

"ignore_user_timezone": true,

"content": '.$msg.'

'.$notifications_add.'

}]

'.$request_add.'

}

}';

 

// 서버로 전송 및 결과 반환

$Result = $this->Curl($url, $request);

 

// 디버깅 모드시 결과 출력

if ($this->config['debug'] === true) {

 

print "[PW] request: $request<hr>";

print "[PW] response: {$Result['response']}<hr>";

print "[PW] info: " . print_r($Result['info'], true).'<hr>';

print "[config] config: ". print_r($this->printConfig(), true);

}

}

}

[/code]

 

클래스 내부 $request​ 자체를 json_encode 처리하지 않은건 중간에 값을 용이하게 추가 하기 위함 입니다.

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 17개

ㅎㅎㅎㅎㅎ
10년 전
푸쉬수쉬 설정에 대하여 문의드리고 싶습니다. 제가 폰갭을 이용해서 그누보드를 웹앱의 형태로 제작은 했는데요 푸쉬우쉬 사이트에 있는 방법대로 수정을 해보았지만 전혀 푸쉬우쉬에 등록이 되질 않습니다. 혹시나 관련 내용이나 조언을 부탁드려도 될까요?
어플쪽에서도 설정 해줘야 하는것으로 알고 있습니다.
기술문서를 참고 하시어 안드로이드 웹앱을 수정하세요.
10년 전
답변 너무나 감사합니다. 그런데 제 능력이 부족해서인지...
웹 앱의 index, 자바 파일 등을 푸쉬우쉬 사이트에서 지시하는대로 수정을 했는데 변함이 없습니다... ^^;;

그래서 고민이 되는것이구요..^^;;
웹앱의 경우 폰갭을 많이 쓰던데 폰갭이면 github에 소스가 올라와있을 수 있을것 같네요.
10년 전
넹.. 감사합니다.. github에 소스가 올라와 있는데.. 이상하게 이 부분이 잘 되지 않아서요...

소스를 보면서 비교하면서 해보고는 있는데.. 어렵더라구요..^^;; 물론 제가 하지 못하는 것이겠죠? ^^;;
파이팅입니다 ㅎㅎ

게시글 목록

번호 제목
9003
8997
8991
8990
8980
8979
8969
8967
8946
8943
8941
8938
8930
8927
8909
8905
8903
8900
8885
8883
8880
8877
8865
8838
8837