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 |
댓글