Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

서버 푸쉬 (c#)

8,384 views

Published on

c# 서버푸쉬 개요 및 구현방법

Published in: Software

서버 푸쉬 (c#)

  1. 1. 서버 푸쉬 (Server Push) (+로컬 푸쉬) for unity3d by 박시현 ㈜ 노엔소프트
  2. 2. 서버푸쉬 개요 (구글신) 그림에 대한 저작권은 저에게 없음.
  3. 3. 단어 정리 - 서버 푸쉬 : 서버가 이벤트 형식으로 유저 고객님들 에게 메시지를 발송 - 로컬 푸쉬 : 클라이언트 자체로, 이벤트를 발생할때 커널에 등록/해제 (예. 연구시작) - GCM (Google Cloud Messaging) : 서버 푸쉬는 gcm을 이용함. - registration_id(REGID) : GCM을 통해 받을수 있는, bundle id 로써, 앱과 1:1 매칭되는, ID (string 32byte 이상)
  4. 4. 클라에서 등록시점(우리게임의 경우..) - 최초 앱을 실행할때, (또는, 저장해 놓은 REGID가 없을경우) GCM 을 통해 registration_id를 받아서, 저장해 놓는다. - UserName 을 입력할때, REGID 를 같이 전송한다. (이때 푸쉬 정식 서버등록) - 앱 설치후, (REGID 저장해논상태에서) 최초 복원 시 - 게임내에서, 계정 이동 할시(만일 REGID가 없으면, 다시 REGID 받아서 실행) - 공통 : 명령수행시 REGID가 로컬에 저장안되어 있 으면, 다시 받아온다.
  5. 5. 어떻게 구현? (Keyword) - GCM : gcm 키워드로, 대략 지식 축적 - Google Developer Console : 이곳에 앱을 올려야 테스트 가능. - API key : 개발자 콘솔에서, 앱을 등록후, (출시할 필요까지는 없음) API 키를 생성해야함. - Sender ID : 클라에서, Registration ID 값 구할때 필요함.
  6. 6. 요게 API Key – 서버 에서 사용 푸쉬 하는 서버의 IP가 등 록되있어야함 (자신이 192.x.x.x 형태의 ip라면, 구글신에게 실제 IP를 물어보자 – 나가는 ip 만 알면됨) 개발자 콘솔 에서의 지루한 작업은 기본… 인내를 가지자.
  7. 7. 요게 Sender ID : 클 라에서 씀. 개발자 콘솔 에서의 지루한 작업은 기본… 인내를 가지자.
  8. 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. 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. 10. 유니티 3D 관련 - 어셋 스토어 보면, 여러가지가 있지만, 현재 잘나가 는 Android Native (본인은 이걸 선호), Prime31 (예전엔 이게 1등) - Android Native : 예제 괜찮음. But 몇가지 기능 빠 짐 - 대표적으로 Ticker Text 미지원 (Ticker 지원하면, Sound 가 안되는 결과 초래-일장일단, Local Push 의 Cancel 기능 미지원 – 직접 소스 열 어서, 추가하고 jar 컴파일하고, 유니티에서 jar 파 일 대체 해줘야함. (소스 달라시면 X.. 유료 어셋..) - 클라소스는 샘플 넘치니 생략 . (위 플러그 인에도 있음)
  11. 11. 감사합니다. 시간이 나는대로 추가 업데이트 하겠습니다. (출시 준비중이라, 바뻐서 OTL) ㈜ 노엔소프트

×