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 (동작함)
서버 사이드
10. 유니티 3D 관련
- 어셋 스토어 보면, 여러가지가 있지만, 현재 잘나가
는 Android Native (본인은 이걸 선호), Prime31
(예전엔 이게 1등)
- Android Native : 예제 괜찮음. But 몇가지 기능 빠
짐
- 대표적으로 Ticker Text 미지원 (Ticker 지원하면,
Sound 가 안되는 결과 초래-일장일단,
Local Push 의 Cancel 기능 미지원 – 직접 소스 열
어서, 추가하고 jar 컴파일하고, 유니티에서 jar 파
일 대체 해줘야함. (소스 달라시면 X.. 유료 어셋..)
- 클라소스는 샘플 넘치니 생략 . (위 플러그 인에도
있음)