신변잡기2011.05.09 11:06
갑자기는 아니지만.. 어쨌든,

학교 프로젝트로 C언어로 DB안쓰고 데이터 관리하기,

회사에서 Objective-C 로 아이폰용 게임만들기,

교수님 아래서 php로 SNS용 테이블링 제작,

개인적으로 만드는 안드로이드 게임까지....

야 이건뭐 겹치는게 하나도 없네... ㅠㅠ



덕분에 많은걸 얻어가고 있지만 비례해서 많은걸 잃어가고 있는중... (시간이라던지, 시간이라던지, 시간이라던지...)


다 끝나면 한번에 정리하겠습니다. 일단 지금은 너무 바쁘네요.


덧. ubuntu 11.04 가 나왔네요. 회사면 모를까 컴퓨터는 막 쓰고 있으니 함 업데이트 해봐야겠습니다. 가장 큰 변화는 gnome에서 unity로 UI가 넘어갔다는거네요.

'신변잡기' 카테고리의 다른 글

나로호 발사 성공!  (0) 2013.01.31
갑자기 일이 많아졌어요.  (0) 2011.05.09
월식을 찍어봤습니다.  (1) 2010.12.21
시험기간입니다.  (0) 2010.10.13
DSLR 사고싶다...  (3) 2010.09.29
광화문 다녀왔습니다.  (0) 2010.09.12
Posted by Yria

댓글을 달아 주세요

프로그래밍/PHP/JSP2011.02.09 14:25


http://code.google.com/intl/ko/android/c2dm/index.html

구글의 예제에 있는 코드는

안드로이드 앱에 의해 통제가 됩니다.

앱에서 신호를 보내고, 다시 앱으로 받죠.

다시 설명하자면,

앱-구글서버-다시 앱

의 구조로 되어있거든요.

이걸 조금 응용해서 서버에서 메세지를 던져 앱으로 받을수 있게 만들었습니다.

C2DM의 특성상 어플을 구동할때마다 다른 인증키가 나옵니다.

이것과, 개발자로그인 할때 나오는 인증키와 조합해야 push가 됩니다.

먼저 서버쪽 코드부터 보겠습니다.

언어는 PHP입니다.





HTTP_REQUEST 가 된다면 더 쉽게 구현가능하지만

현재 회사에서 쓰는 서버(cafe24)에는 이게 없네요. 전화해서 설치해달라고 하기도 귀찮고 fsockopen 을 이용했습니다.

$data = "&accountType=HOSTED_OR_GOOGLE&Email=******@gmail.com&Passwd=********&service=ac2dm&source=test-1.0";

먼저 구글개발자인증키를 위한 인자들입니다. 중요한건 accountType, Email, Passwd, service 입니다. accountType, service는 동일하게 입력하시고

Email과 Passwd는 개발자 이메일과 비밀번호를 입력합니다.

$fp = fsockopen("ssl://".$host, 443, $errno, $errstr, 30);

https 이기 때문에 443포트로 접속해야합니다. host는 말 그대로 호스트만을 입력하고 path는 아래에서 따로 입력합니다.

그 이후에는 Header값을 입력합니다. 이 과정에서 특별한 부분은 없습니다.

이렇게 하면 여러가지 결과값이 나오는데 이중 필요한건 'Auth=' 다음의 문자열입니다.

$tmp = split("Auth=",$responsecontent);

를 통하여 원하는 결과값만을 추출합니다.

이제 앱에서 나온 인증키가 필요한데, 해당 코드는 앱 부분에서 다루겠습니다.

$auth = "APA91bFl0a2gh963rI0y3Tu2vtF8PVCVCoixC****************************-9nDLDcVt83OIWawTL6JvDwzpToDjtA1WSjXLh8IYrsI";
이 부분에 앱에서 나온 인증키를 넣습니다.

$data = "&registration_id=".$auth."&collapse_key=1&data.msg=data";

이번에 서버에서 보낼 인자는 이게 답니다. data.<key> 로 사용자 임의대로 네임을 붙여서 데이터를 보낼 수 있습니다.

어플에서는 <key>를 통하여 값을 구별합니다.

fputs($fp, "Authorization: GoogleLogin auth={$result}\r\n");

Header 에 아까 구글 개발자 아이디로 발급받은 인증키를 보냅니다. 이게 없으면 에러가 뜹니다.

이 과정에서 출력값은 무의미하므로 서버에서 할 일은 끝입니다. 이제 남은건 구글에서 해당 앱으로 메세지를 PUSH하는 일만 남았습니다.

다음에는 어플리케이션의 코드에 대해 알아보겠습니다. 해당 부분은 다른 C2DM 강좌와 많이 겹치므로 다른분들의 코드를 참고하셔도 됩니다.
Posted by Yria

댓글을 달아 주세요

  1. 123

    안녕하세요 C2DM관련 서핑하다가 들르게 되었습니다
    먼저 포스팅 해주신 정보가 저에게 큰 도움이 되었습니다.
    개발하신 부분에 대해 궁금한게 있어서 질문드리려고 하는데요
    C2DM의 특성상 어플을 구동할때마다 다른 인증키가 나옵니다.라는 부분이 정확하게 어떤 부분인가요?

    구글 개발자 홈피에는 어플리케이션이 C2DM서버에 어플리케이션 ID랑 Sender Id를 보내면 등록ID를 보내주는데, 그걸 서드파티 서버에 보내면 된다라고 저는 이해했거든요 그 외에 C2DM서버에서 사용자에게 개인용인증키를 같이 보내주나요? 서버세팅부분에서도 개인 등록 ID에 대한 언급 없이 개인인증키부분을 언급하셔서 궁금해서 질문드립니다 ^^

    2011.03.07 17:42 [ ADDR : EDIT/ DEL : REPLY ]
    • 답변을 늦게드려 죄송합니다.
      제가 '인증키' 라고 썼지만 정확히 말하면 디바이스마다 어플리케이션을 설치하면 유니크한 key를 주게됩니다. 저는 이걸 인증키라고 적었습니다만 Auth의 개념이 있는건 아닙니다.

      후에 알게된 사실이지만 한번 등록하면 어플리케이션을 재설치하지 않는이상 key가 변하지 않는다는걸 알게되었고 DB에 저장해두고 호출하시면 되겠습니다.

      2011.03.14 22:55 신고 [ ADDR : EDIT/ DEL ]
  2. 유망주

    $auth = "APA91bFl0a2gh963rI0y3Tu2vtF8PV*************************************OIWawTL6JvDwzpToDjtA1WSjXLh8IYrsI";
    이줄에서 앱에서 가져온 registration id로 등록하면 되나요? 매번 설치마다 바뀌는것같습니다.
    정확히 원리를 잘모르겠네요;ㅣ;

    2011.07.12 16:01 [ ADDR : EDIT/ DEL : REPLY ]
    • 유망주

      삭제하고 키값 그대로하고 앱재설치 실행해도 잘되네요 감사합니다.

      2011.07.12 18:53 [ ADDR : EDIT/ DEL ]

http://dev.naver.com/projects/spaceopera/

해당 페이지로 가면 자세한 사항을 확인할 수 있습니다.

웹게임은 처음이라 다들 고생하네요

거기에 학과공부도 해야하고

으음.... ㅠㅠ
Posted by Yria

댓글을 달아 주세요


학교 수업 프로젝트의 일환이지만

학기중엔 일단 점수따기용으로 만들고

제대로 꾸며서 담학기 시작전까지 마켓에 등록해볼까 합니다.

장르는 전략시뮬! 배경은 SF! 

진행은 웹게임의 형식을 빌려왔습니다.

왠지 디자인을 하면 할수록 어디서 본 거 같은 컨셉들...;;



개인적인 의견이지만 이미 새롭게 나오는건 한계에 다다랐기 때문에

이미 있는 컨텐츠를 재생산하는것도 의미가 있다고 생각합니다.

모던2도 문명5도 WOW도 최초는 아니잖아요?!


어쨌든 프로젝트를 진행하면서 있었던 문제점, 노하우들을 공유하고자 합니다.

좋은 의견 주시면 겸허히 받아들이겠습니다.


특히 코딩쪽은 젬병이라 쉬운길 냅두고 돌아가는 멍청한 짓을 자주 볼듯...


(프로그램 초기 디자인, 계획등등은 나중에 따라 proto version으로 내놓겠습니다.)


일단 책이 당장 없어서 오늘은 기본적인 UI디자인만 했습니다.

첫 화면에 배경 띄우려는걸 ImageView로 하려고 삽질하다가.. EditText가 묻히더라고요. 순서를 바꾸면 EditText가 위로 올라오고..

이걸 리니어말고 절대값으로 할까 생각했는데 리니어레이아웃에 background 옵션을 주면 되더라고요.

이럴수가 -ㅅ-







일단 텍스트 박스랑 버튼을 가운데다 배치했는데 아래로 내려가질 않네요?

gravity 로 bottom주면 될 줄 알았는데 안의 Hint옵션의 텍스트만 움직이고..

또 크기를 px로 주니까 해상도가 다른 기계로 보니까 크기가 확 작아져요.

크기 관련해서 책에다 적어놨는데 내일 학교가서 가져와야할듯 ㅠㅠ

package com.apps.spaceopera;

import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.widget.*;

public class SpaceOpera extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	EditText InputId;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        
        InputId = (EditText)findViewById(R.id.InputId);

    }
}

java안은 그냥 onCreate밖에 없습니다.

머리속에 생각해둔건 많은데 작성하려고 하면 빡치고.. 끙...
Posted by Yria

댓글을 달아 주세요