본문 바로가기
프로그램.코딩

ASP 용 GCM 발송

by landzz 2014. 1. 17.

ASP 프로젝트 gcm 발송 정리...


- asp 프로젝트 gcm발송및 디비처리 정리.


- 푸시데몬을 만들어서 gcm발송 모니터링 (윈도 작업스케쥴러 이용)

- 푸시내용발생시 디비에 푸시정보 인서트 (메세지/수신단말 (registration_ids)

- 보낼 푸시내용을 확인후 gcm발송후 리턴값처리.


==========================================

작업스케쥴러 등록


- 배치파일생성후 해당 배치파일을 등록함.

- 작업스케쥴러 등록내용

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

 # 일반

   : 사용자의 로그온 여부에 관계없이 실행 (체크)

    암호저장하지 않습니다.....(체크)

   : 가장 높은 수준의 권한으로 실행 (체크)

   



#트리거

  설정 : 예약상태 / 매일 / 시작시간설정 매 1일마다

  고급 : 작업반복간격 (5분) - 제일짧은시간 / 기간 1일 (매일트리거 되므로 1일기간) / 사용(체크)



  




# 동작

 새로만들기에서 프로그램등록 -> 프로그램시작 : 생성한 배치파일(daemon.bat)

 : 5분마다 실행되므로 트리거에 배치파일을 여러개 등록함(모니터링결과 위에부터 10초간격으로 트리거됨)



   




# 조건 : 설정내용 없음

  



# 설정

  : 요청시 작업이 실행되도록 허용(체크)

  : 예약된 시간을 놓친경우 가능한 빨리 작업시작(체크)

  : 작업이 실패하는경우 다시 시작 간격 ( 1분) , 횟수 3회

  : 작업이 이미 실행중일경우 -> 인스턴스를 병렬로 실행


  


============================================

- 배치파일내용

daemon.bat

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

@echo off

start "C:\Program Files (x86)\Internet Explorer\iexplore.exe" "http://주소/데몬.asp"

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


============================================

실행되는 데몬파일내용

1. 데몬.asp (아래에 기술)

2. json 파싱을 위한 라이브러리 필요(https://github.com/nagaozen/asp-xtreme-evolution/blob/master/lib/axe/classes/Parsers/json2.asp)


- 데몬.asp 파일내용

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

<%@language=vbscript codepage=65001%>

<!-- #include file="./라이브러리파일" -->  : GCM발송및 json관련함수, 디비용라이브러리등

<%

' 서버 스크립트 제한 시간 늘림 (초단위)

Server.ScriptTimeOut = 30 * 60

%>

<!doctype html>

<html lang="ko">

<head>

<title>푸시데몬</title>

<meta charset="utf-8" />

<style type="text/css"> body{font-size:12px;} </style>

<body>

<%

'디비정보 셀렉트함(발송할자료) : Set_Data, Set_UserPushCode 에 자료 

Set_Data = "전송데이터" (배열로작성) - gcm발송시 json으로 처리됨.  

Set_UserPushCode = "사용자단말수신용 id" (배열로 작성) - gcm발송시 json으로 처리됨.


Redim Set_Data(1,2)

Set_Data(1,1) = "전송메세지변수"

Set_Data(1,2) = "전송할 메세지"


redim Set_UserPushCode(수신단말갯수)

Set_UserPushCode(0) = "기기번호1"

Set_UserPushCode(1) = "기기번호2"


'GCM발송

result_gcm = SendPushByAndroid(Set_Data, Set_UserPushCode)


'GCM발송결과 처리.

If result_gcm(0) = True Then

  ' 전송결과 처리.

' json 파싱시 multicast_id 등이 ~E나오는거 처리를 위해 문자열로 파싱되도록 " 추가

result = result_gcm(2) ' 

result = Replace(result," ","")

result = Replace(result,"multicast_id"":","multicast_id"":""")

result = Replace(result,",""success",""",""success")


' 결과값 형식

' json string => {"multicast_id":"8565733994660211065","success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

'결과값 처리. multicast_id, canonical_ids 는 처리하지않음. : 필요시 처리


dim result_gcm_info : set result_gcm_info = JSON.parse(result)

cnt_ok = CInt(result_gcm_info.Get("success")) ' 전송성공 결과수

cnt_err = CInt(result_gcm_info.Get("failure")) ' 전송실패 결과수


for each key in result_gcm_info.Get("results").keys()

res_err = result_gcm_info.Get("results").Get(key).Get("error") ' 에러메세지 

res_ok  = result_gcm_info.Get("results").Get(key).Get("message_id") ' 성공일경우 message_id 있음

If res_err <> "" Then

' 발송실패 처리로직~~~~

Else

' 발송성공 처리로직~~~~

End if

Next

Else

 ' 서버에러

   에러처리 로직 ~~~~~~

End if

%>

<script type="text/javascript">

window.opener='Self'; // 윈도창을 안닫아 주면 처리완료후 프로세스가 계속 남아잇음.

window.open('','_parent','');

window.close();

</script>

</body>

</html>

데몬 파일내용끝

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


===========================================

' 구글 GCM 함수

Function SendPushByAndroid(Byval Set_Data, Byval Set_UserPushCode)

On Error Resume Next

Dim param ,i

Dim XMLHTTPS(2)

Dim objHttp

Set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

Dim senddata    : senddata = ""

Dim gcmid    : gcmid = ""

Dim sURL

    ' 배열로 받는다

if not isarray(Set_Data) Then

SendPushByAndroid = 0

Exit Function

End If

' json

for i = 1 to Ubound(Set_Data,1)

senddata = senddata & """" & Set_Data(i,1) & """:""" & Set_Data(i,2) & """"

if i <> Ubound(Set_Data,1) Then

senddata = senddata & ","

End If

Next

'for i = 1 to Ubound(Set_UserPushCode,1)

for i = 0 to Ubound(Set_UserPushCode,1)

gcmid = gcmid & """" & Set_UserPushCode(i) & """"

if i <> Ubound(Set_UserPushCode,1) Then

gcmid = gcmid & ","

End If

Next

param = "{"

param = param & """collapse_key"" :""" & collapse_key & ""","

param = param & """data"":{" & senddata & "},""registration_ids"":["& gcmid &"]"

param = param & "}"


sURL = "https://android.googleapis.com/gcm/send"


'Response.write "sURL : " & sURL &"<br /><br />"

'Response.write "param : " & param &"<br /><br />"


objHttp.Open "POST", sURL, False

objHttp.SetRequestHeader "Content-Type","application/json"

objHttp.SetRequestHeader "Authorization","key=" & GOOGLE_GCM_KEY

objHttp.send param


XMLHTTPS(1) = objHttp.status

XMLHTTPS(2) = objHttp.responseText

If Err.Number <> 0 Then

XMLHTTPS(0)  = False

Else

XMLHTTPS(0)  = True

End If


'Response.write "XMLHTTPS(0) : " & XMLHTTPS(0) &"<br /><br />"

'Response.write "XMLHTTPS(1) : " & XMLHTTPS(1) &"<br /><br />"

'Response.write "XMLHTTPS(2) : " & XMLHTTPS(2) &"<br /><br />"

SendPushByAndroid = XMLHTTPS

End Function

'gcm 함수끝

===================================================






'프로그램.코딩' 카테고리의 다른 글

php 정규식 이것저것  (0) 2015.01.06
php4 용 소켓통신..(agent,cookie 추가)  (0) 2014.04.17
ASP용 함수정리  (0) 2014.01.17
이미지 리사이징 재귀함수  (0) 2014.01.17
php 로 동적이미지 생성하기(gd이용)  (0) 2014.01.17

댓글