SlideShare a Scribd company logo
1 of 11
서버 푸쉬 (Server Push)
(+로컬 푸쉬) for unity3d
by 박시현
㈜ 노엔소프트
서버푸쉬 개요 (구글신)
그림에 대한 저작권은 저에게 없음.
단어 정리
- 서버 푸쉬 : 서버가 이벤트 형식으로 유저 고객님들
에게 메시지를 발송
- 로컬 푸쉬 : 클라이언트 자체로, 이벤트를 발생할때
커널에 등록/해제 (예. 연구시작)
- GCM (Google Cloud Messaging) : 서버 푸쉬는
gcm을 이용함.
- registration_id(REGID) : GCM을 통해 받을수 있는,
bundle id 로써, 앱과 1:1 매칭되는, ID (string
32byte 이상)
클라에서 등록시점(우리게임의 경우..)
- 최초 앱을 실행할때, (또는, 저장해 놓은 REGID가
없을경우) GCM 을 통해 registration_id를 받아서,
저장해 놓는다.
- UserName 을 입력할때, REGID 를 같이 전송한다.
(이때 푸쉬 정식 서버등록)
- 앱 설치후, (REGID 저장해논상태에서) 최초 복원
시
- 게임내에서, 계정 이동 할시(만일 REGID가 없으면,
다시 REGID 받아서 실행)
- 공통 : 명령수행시 REGID가 로컬에 저장안되어 있
으면, 다시 받아온다.
어떻게 구현? (Keyword)
- GCM : gcm 키워드로, 대략 지식 축적
- Google Developer Console : 이곳에 앱을 올려야
테스트 가능.
- API key : 개발자 콘솔에서, 앱을 등록후, (출시할
필요까지는 없음) API 키를 생성해야함.
- Sender ID : 클라에서, Registration ID 값 구할때
필요함.
요게 API Key – 서버
에서 사용
푸쉬 하는 서버의 IP가 등
록되있어야함
(자신이 192.x.x.x 형태의
ip라면, 구글신에게 실제
IP를 물어보자 – 나가는 ip
만 알면됨)
개발자 콘솔 에서의 지루한 작업은 기본… 인내를 가지자.
요게 Sender ID : 클
라에서 씀.
개발자 콘솔 에서의 지루한 작업은 기본… 인내를 가지자.
private static string SendGCMNotification(string apiKey, string postData)
{
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// CREATE REQUEST
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send");
Request.Method = "POST";
Request.KeepAlive = false;
Request.ContentType = "application/json";
Request.Headers.Add(string.Format("Authorization: key={0}", apiKey));
Request.ContentLength = byteArray.Length;
Stream dataStream = Request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
// SEND MESSAGE
try
{
WebResponse Response = Request.GetResponse();
HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode;
if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden))
{
//var text = "Unauthorized - need new token";
}
else if (!ResponseCode.Equals(HttpStatusCode.OK))
{
//var text = "Response from web service isn't OK";
}
StreamReader Reader = new StreamReader(Response.GetResponseStream());
string responseLine = Reader.ReadToEnd();
Reader.Close();
return responseLine;
}
catch (Exception)
{
return "error";
}
}
Sample Code (동작함)
서버 사이드
static string apikey = "AIzaSyBRj6CV4Mg3b1_i8W??????????????????????????";
static public string SendGCM (string regid, string ticker, string title, string message)
{
string postData =
"{ "registration_ids": [ "" + regid + "" ], " +
""data": {"ticker":"" + ticker + "", " +
""title":"" + title + "", " +
""message": "" + message + ""}}";
return SendGCMNotification(apikey, postData);
}
- registration_ids 요기다가, 배열처럼 죽~ 넣어주면, 멀티로 감. (약간의 json 지식 필요)
- 1000 개까지 할수 있다고함.
- HTTP 의 동기방식이 맘에 안든다면, CCM 검색(하드코어 개발자 마인드가 아니면,그냥 쓰
시는게.. [시간상])
- 아름 다운 코드 원하시는 분들은,
Git 에서, PushSharp 찾아서 해보시면 됨. (애플, 구글, 기타 별거 다됨)
(물론 R&D 비용은 본인이 감수)
호 출 부 - 서버
유니티 3D 관련
- 어셋 스토어 보면, 여러가지가 있지만, 현재 잘나가
는 Android Native (본인은 이걸 선호), Prime31
(예전엔 이게 1등)
- Android Native : 예제 괜찮음. But 몇가지 기능 빠
짐
- 대표적으로 Ticker Text 미지원 (Ticker 지원하면,
Sound 가 안되는 결과 초래-일장일단,
Local Push 의 Cancel 기능 미지원 – 직접 소스 열
어서, 추가하고 jar 컴파일하고, 유니티에서 jar 파
일 대체 해줘야함. (소스 달라시면 X.. 유료 어셋..)
- 클라소스는 샘플 넘치니 생략 . (위 플러그 인에도
있음)
감사합니다.
시간이 나는대로 추가 업데이트 하겠습니다.
(출시 준비중이라, 바뻐서 OTL)
㈜ 노엔소프트

More Related Content

What's hot

HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형Minchul Jung
 
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)I Goo Lee
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기Seong Won Mun
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Circulus
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기flashscope
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecaseKris Jeong
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터jinho park
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurationsJohn Kim
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Seungmin Yu
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구ByungJoon Lee
 
Prometheus Project Journey
Prometheus Project JourneyPrometheus Project Journey
Prometheus Project JourneyJinwoong Kim
 
Play node conference
Play node conferencePlay node conference
Play node conferenceJohn Kim
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2기동 이
 

What's hot (20)

HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
 
What is the meteor?
What is the meteor?What is the meteor?
What is the meteor?
 
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
오픈소스로 만드는 DB 모니터링 시스템 (w/graphite+grafana)
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
Redis data design by usecase
Redis data design by usecaseRedis data design by usecase
Redis data design by usecase
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터Node Js와 Redis를 사용한 구조화된 데이터
Node Js와 Redis를 사용한 구조화된 데이터
 
Performance test
Performance testPerformance test
Performance test
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Kcjcinema
KcjcinemaKcjcinema
Kcjcinema
 
Prometheus Project Journey
Prometheus Project JourneyPrometheus Project Journey
Prometheus Project Journey
 
Play node conference
Play node conferencePlay node conference
Play node conference
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2
 

Viewers also liked

푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification SummaryBrave Cheon
 
Unity and Azure Mobile Services using Prime31 plugin
Unity and Azure Mobile Services using Prime31 pluginUnity and Azure Mobile Services using Prime31 plugin
Unity and Azure Mobile Services using Prime31 pluginDavid Douglas
 
스타트업, 그리고 마케팅
스타트업, 그리고 마케팅스타트업, 그리고 마케팅
스타트업, 그리고 마케팅Taehyun Brad Kim
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론Hyunjik Bae
 
서버 인프라를지탱하는기술(1.3,1.4)
서버 인프라를지탱하는기술(1.3,1.4)서버 인프라를지탱하는기술(1.3,1.4)
서버 인프라를지탱하는기술(1.3,1.4)Choonghyun Yang
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기iFunFactory Inc.
 
개발자도 알아야 하는 DBMS튜닝
개발자도 알아야 하는 DBMS튜닝개발자도 알아야 하는 DBMS튜닝
개발자도 알아야 하는 DBMS튜닝정해 이
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요Jeff Paik
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Wooseung Kim
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주Seok-ju Yun
 
블록 체인 기술 원리, 이용 현황, 전망과 활용 분야.
블록 체인 기술 원리,  이용 현황, 전망과 활용 분야. 블록 체인 기술 원리,  이용 현황, 전망과 활용 분야.
블록 체인 기술 원리, 이용 현황, 전망과 활용 분야. JaeGon Lim
 
How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리SeokWon Kim
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)Yongho Ha
 
Source14: The Age of Living Mobile
Source14: The Age of Living MobileSource14: The Age of Living Mobile
Source14: The Age of Living MobileFlurry, Inc.
 

Viewers also liked (19)

푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary
 
Unity and Azure Mobile Services using Prime31 plugin
Unity and Azure Mobile Services using Prime31 pluginUnity and Azure Mobile Services using Prime31 plugin
Unity and Azure Mobile Services using Prime31 plugin
 
스타트업, 그리고 마케팅
스타트업, 그리고 마케팅스타트업, 그리고 마케팅
스타트업, 그리고 마케팅
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론
 
서버 인프라를지탱하는기술(1.3,1.4)
서버 인프라를지탱하는기술(1.3,1.4)서버 인프라를지탱하는기술(1.3,1.4)
서버 인프라를지탱하는기술(1.3,1.4)
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기
 
개발자도 알아야 하는 DBMS튜닝
개발자도 알아야 하는 DBMS튜닝개발자도 알아야 하는 DBMS튜닝
개발자도 알아야 하는 DBMS튜닝
 
블록체인
블록체인블록체인
블록체인
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주
 
블록 체인 기술 원리, 이용 현황, 전망과 활용 분야.
블록 체인 기술 원리,  이용 현황, 전망과 활용 분야. 블록 체인 기술 원리,  이용 현황, 전망과 활용 분야.
블록 체인 기술 원리, 이용 현황, 전망과 활용 분야.
 
How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리How Blockchain Works - 블록체인의 원리
How Blockchain Works - 블록체인의 원리
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
 
Source14: The Age of Living Mobile
Source14: The Age of Living MobileSource14: The Age of Living Mobile
Source14: The Age of Living Mobile
 
Slideshare ppt
Slideshare pptSlideshare ppt
Slideshare ppt
 

Similar to 서버 푸쉬 (c#)

Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)LanarkSeung
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
TR 069 클라이언트 검토자료 3편
TR 069 클라이언트 검토자료 3편TR 069 클라이언트 검토자료 3편
TR 069 클라이언트 검토자료 3편ymtech
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발LGU+
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
웹 사이트 시각화 및 성능 관리
웹 사이트 시각화 및 성능 관리웹 사이트 시각화 및 성능 관리
웹 사이트 시각화 및 성능 관리mosaicnet
 
Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)Fermat Jade
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by NetflixJi-Woong Choi
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례Gruter
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIjieun kim
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석logdog
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 

Similar to 서버 푸쉬 (c#) (20)

Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
TR 069 클라이언트 검토자료 3편
TR 069 클라이언트 검토자료 3편TR 069 클라이언트 검토자료 3편
TR 069 클라이언트 검토자료 3편
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
웹 사이트 시각화 및 성능 관리
웹 사이트 시각화 및 성능 관리웹 사이트 시각화 및 성능 관리
웹 사이트 시각화 및 성능 관리
 
Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)Blockchain Study(5) - Smart Contract(스마트 계약)
Blockchain Study(5) - Smart Contract(스마트 계약)
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 인터넷 쇼핑몰의 실시간 분석 플랫폼 구축 사례
 
Ryu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST APIRyu with OpenFlow 1.3, REST API
Ryu with OpenFlow 1.3, REST API
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 

서버 푸쉬 (c#)

  • 1. 서버 푸쉬 (Server Push) (+로컬 푸쉬) for unity3d by 박시현 ㈜ 노엔소프트
  • 2. 서버푸쉬 개요 (구글신) 그림에 대한 저작권은 저에게 없음.
  • 3. 단어 정리 - 서버 푸쉬 : 서버가 이벤트 형식으로 유저 고객님들 에게 메시지를 발송 - 로컬 푸쉬 : 클라이언트 자체로, 이벤트를 발생할때 커널에 등록/해제 (예. 연구시작) - GCM (Google Cloud Messaging) : 서버 푸쉬는 gcm을 이용함. - registration_id(REGID) : GCM을 통해 받을수 있는, bundle id 로써, 앱과 1:1 매칭되는, ID (string 32byte 이상)
  • 4. 클라에서 등록시점(우리게임의 경우..) - 최초 앱을 실행할때, (또는, 저장해 놓은 REGID가 없을경우) GCM 을 통해 registration_id를 받아서, 저장해 놓는다. - UserName 을 입력할때, REGID 를 같이 전송한다. (이때 푸쉬 정식 서버등록) - 앱 설치후, (REGID 저장해논상태에서) 최초 복원 시 - 게임내에서, 계정 이동 할시(만일 REGID가 없으면, 다시 REGID 받아서 실행) - 공통 : 명령수행시 REGID가 로컬에 저장안되어 있 으면, 다시 받아온다.
  • 5. 어떻게 구현? (Keyword) - GCM : gcm 키워드로, 대략 지식 축적 - Google Developer Console : 이곳에 앱을 올려야 테스트 가능. - API key : 개발자 콘솔에서, 앱을 등록후, (출시할 필요까지는 없음) API 키를 생성해야함. - Sender ID : 클라에서, Registration ID 값 구할때 필요함.
  • 6. 요게 API Key – 서버 에서 사용 푸쉬 하는 서버의 IP가 등 록되있어야함 (자신이 192.x.x.x 형태의 ip라면, 구글신에게 실제 IP를 물어보자 – 나가는 ip 만 알면됨) 개발자 콘솔 에서의 지루한 작업은 기본… 인내를 가지자.
  • 7. 요게 Sender ID : 클 라에서 씀. 개발자 콘솔 에서의 지루한 작업은 기본… 인내를 가지자.
  • 8. private static string SendGCMNotification(string apiKey, string postData) { byte[] byteArray = Encoding.UTF8.GetBytes(postData); // CREATE REQUEST HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send"); Request.Method = "POST"; Request.KeepAlive = false; Request.ContentType = "application/json"; Request.Headers.Add(string.Format("Authorization: key={0}", apiKey)); Request.ContentLength = byteArray.Length; Stream dataStream = Request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); // SEND MESSAGE try { WebResponse Response = Request.GetResponse(); HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode; if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden)) { //var text = "Unauthorized - need new token"; } else if (!ResponseCode.Equals(HttpStatusCode.OK)) { //var text = "Response from web service isn't OK"; } StreamReader Reader = new StreamReader(Response.GetResponseStream()); string responseLine = Reader.ReadToEnd(); Reader.Close(); return responseLine; } catch (Exception) { return "error"; } } Sample Code (동작함) 서버 사이드
  • 9. static string apikey = "AIzaSyBRj6CV4Mg3b1_i8W??????????????????????????"; static public string SendGCM (string regid, string ticker, string title, string message) { string postData = "{ "registration_ids": [ "" + regid + "" ], " + ""data": {"ticker":"" + ticker + "", " + ""title":"" + title + "", " + ""message": "" + message + ""}}"; return SendGCMNotification(apikey, postData); } - registration_ids 요기다가, 배열처럼 죽~ 넣어주면, 멀티로 감. (약간의 json 지식 필요) - 1000 개까지 할수 있다고함. - HTTP 의 동기방식이 맘에 안든다면, CCM 검색(하드코어 개발자 마인드가 아니면,그냥 쓰 시는게.. [시간상]) - 아름 다운 코드 원하시는 분들은, Git 에서, PushSharp 찾아서 해보시면 됨. (애플, 구글, 기타 별거 다됨) (물론 R&D 비용은 본인이 감수) 호 출 부 - 서버
  • 10. 유니티 3D 관련 - 어셋 스토어 보면, 여러가지가 있지만, 현재 잘나가 는 Android Native (본인은 이걸 선호), Prime31 (예전엔 이게 1등) - Android Native : 예제 괜찮음. But 몇가지 기능 빠 짐 - 대표적으로 Ticker Text 미지원 (Ticker 지원하면, Sound 가 안되는 결과 초래-일장일단, Local Push 의 Cancel 기능 미지원 – 직접 소스 열 어서, 추가하고 jar 컴파일하고, 유니티에서 jar 파 일 대체 해줘야함. (소스 달라시면 X.. 유료 어셋..) - 클라소스는 샘플 넘치니 생략 . (위 플러그 인에도 있음)
  • 11. 감사합니다. 시간이 나는대로 추가 업데이트 하겠습니다. (출시 준비중이라, 바뻐서 OTL) ㈜ 노엔소프트