BLOG main image
분류 전체보기 (74)
Cocos2d (9)
낙서장 (4)
스토리지 (1)
안드로이드 (54)
유용한링크 (1)
모바일게임 (2)
추천앱 (1)
아이폰 (0)
맛집/여행 (1)
ナイトウェアメンズ
ナイトウェアメンズ
割烹着 オシャレ
割烹着 オシャレ
klicken Sie einfach auf die bi..
klicken Sie einfach auf die bi..
スポーツ
スポーツ
サンダル
サンダル
278,277 Visitors up to today!
Today 46 hit, Yesterday 35 hit
daisy rss
tistory 티스토리 가입하기!
2012.11.05 15:40
  


- php 를 사용한 gcm 푸시예제입니다.

- 안드로이드 폰에 RegistrationId 를  mysql 서버에 저장하고 서버에서 gcm 메시지를 전송하는 예제입니다. 


1. mysql에 gcm_table 이라는 테이블을 만들고 reg_id,phone_num 칼럼을 만들어 줍니다(phone_num 은 폰번호인데..폰번호를 함부로 수집하면 안되겠죠^^;, 쓸데없는 칼럼이지만 그냥 만들어봤습니다;) -> 이건 생략하겠습니다


2. 앱 시작 시 RegistrationId를 만들고 php를 이용해 서버에 인서트 해줍니다. 


3. gcm.jar를 안드로이드 프로젝트 libs 폴더에 등록해줍니다.


gcm.jar



---------------------------------------------------------------------------------------------------------

앱시작시 RegistrationId 등록 클래스 : MainActivity .java


public class MainActivity extends Activity {

 AsyncTask<?, ?, ?> regIDInsertTask;

  TextViewmessage;

 ProgressDialog loagindDialog;

 String regId ;

    String myResult ;

 

    @Override

    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        message=(TextView)findViewById(R.id.re_message);

          if(GCMIntentService.re_message!=null){

         message.setText(GCMIntentService.re_message);

          }else{

          registerGcm();

          }

    }

    

    public void registerGcm() {

     GCMRegistrar.checkDevice(this);

     GCMRegistrar.checkManifest(this);


       regId = GCMRegistrar.getRegistrationId(this);


     if (regId.equals("")) {

      GCMRegistrar.register(this, "프로젝트ID");

     } else {

      Log.e("reg_id", regId);

     }

  sendAPIkey();

    }

    

private void sendAPIkey() {

String  myNum="폰번호에요";

regIDInsertTask = new regIDInsertTask().execute(regId, myNum);

}


private class regIDInsertTask extends AsyncTask<String, Void, Void> {

@Override

protected void onPreExecute() {

super.onPreExecute();

loagindDialog = ProgressDialog.show(MainActivity.this, "키 등록 중입니다..",

"Please wait..", true, false);

}


@Override

protected Void doInBackground(String... params) {

HttpPostData(params[0] , params[1]);

return null;

}

protected void onPostExecute(Void result) {

loagindDialog.dismiss();

}

}


public void HttpPostData(String reg_id , String pnum) { 

    try { 

         URL url = new URL("http://서버URL/gcm_reg_insert.php");       // URL 설정 

         HttpURLConnection http = (HttpURLConnection) url.openConnection();   // 접속 

         //-------------------------- 

         //   전송 모드 설정 - 기본적인 설정이다 

         //-------------------------- 

         http.setDefaultUseCaches(false);                                            

         http.setDoInput(true);                        

         http.setDoOutput(true);                     

         http.setRequestMethod("POST");         


         http.setRequestProperty("content-type", "application/x-www-form-urlencoded"); 

         StringBuffer buffer = new StringBuffer(); 

         buffer.append("reg_id").append("=").append(reg_id).append("&");                 // php 변수에 값 대입 

         buffer.append("pnum").append("=").append(pnum);

        

         OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 

         PrintWriter writer = new PrintWriter(outStream); 

         writer.write(buffer.toString()); 

         writer.flush(); 

         InputStreamReader tmp = new InputStreamReader(http.getInputStream(), "EUC-KR");  

         BufferedReader reader = new BufferedReader(tmp); 

         StringBuilder builder = new StringBuilder(); 

         String str; 

         while ((str = reader.readLine()) != null) {    

              builder.append(str + "\n");                 

   } 

         

          myResult = builder.toString();              

        

    } catch (MalformedURLException e) { 

           // 

    } catch (IOException e) { 

           //  

    } // try 

} // HttpPostData 


}


---------------------------------------------------------------------------------------------------------

activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"   android:orientation="vertical"

    android:layout_height="match_parent" >

    <Button     android:id="@+id/btn1"

        android:layout_width="200dip"

        android:layout_height="50dip"  android:text="받은메시지" />

      <TextView

        android:id="@+id/re_message"

        android:layout_width="match_parent"

        android:layout_height="50dip"

        android:background="#ffffff"

       />

</LinearLayout>

---------------------------------------------------------------------------------------------------------

RegistrationId 인서트 해주는 php : gcm_reg_insert.php


<?php

 

$response = array();

 

if (isset($_POST['reg_id']) && isset($_POST['pnum']) ) {

 

    $reg_id = $_POST['reg_id'];

    $pnum = $_POST['pnum'];

echo $reg_id,$pnum;

 

    $connect = mysql_connect("서버URL","아이디","비밀번호") or die("SQL server에 연결할 수 없습니다."); 

mysql_select_db("DB명",$connect);


    $result = mysql_query("INSERT INTO gcm_table(reg_id, phone_num) VALUES('$reg_id', '$pnum')");

 


    if ($result) {

        // successfully inserted into database

        $response["success"] = 1;

        $response["message"] = "Product successfully created.";

 

        echo json_encode($response);

    } else {

        // failed to insert row

        $response["success"] = 0;

        $response["message"] = "Oops! An error occurred.";

 

        echo json_encode($response);

    }

} else {

    // required field is missing

    $response["success"] = 0;

    $response["message"] = "Required field(s) is missing";

 

    echo json_encode($response);

}

?>

----------------------------------------------------------------------------------------------

GCMRegistrar.register(this, "프로젝트ID");

-> https://code.google.com/apis/console/b/0/ 로 연결해서 구글 계정으로 로그인하면  project:숫자가 뜹니다 

project 옆에 숫자가 프로젝트ID 입니다;


$connect = mysql_connect("서버URL","아이디","비밀번호") or die("SQL server에 연결할 수 없습니다.");      mysql_select_db("DB명",$connect);

-> 자신의 서버 정보를 적어주세요...^^;



길어서...다음편에 계속됩니다...



질문드립니다 | 2012.11.15 19:46 신고 | PERMALINK | EDIT/DEL | REPLY
올려주신 자료대로 만들었는데
작동을 하지 않습니다 ㅜㅜ;;
질문드립니다 | 2012.11.15 20:03 신고 | PERMALINK | EDIT/DEL | REPLY
안되는게 서버에 db에 reg_id 저장이 안되네요
어플리케이션 키면 gcm_reg_insert.php 에 접속하는지도 불분명합니다.
어떤걸 해야되나요 ㅜㅜ
루틴 | 2012.11.16 11:05 신고 | PERMALINK | EDIT/DEL | REPLY
앱 실행시키면 reg_id를 얻어온 후에 gcm_reg_insert.php로 포스트를 보내고 있습니다
앱 중간 중간에 log넣어 보시고 reg_id값을 얻어 오는지 gcm_reg_insert.php로 값이 제대로 전달 되는지 확인해 보셔야 원인을 파악할 수 있을것 같습니다

소스를 약간 수정했으니 다시 살펴보시길 바랍니다

이거 꼭 | 2012.11.21 02:52 신고 | PERMALINK | EDIT/DEL | REPLY
좋은글 잘 보고갑니다. 여쭤볼게 있는데 안드로이드 mainActivity.java 에서
AsyncTask<?, ?, ?> regIDInsertTask; 부분과

그밑에 onCreate 에서 message부분이 에러가 뜨는데 어떻게 처리하면 될까요?!
이거 꼭 | 2012.11.21 03:50 신고 | PERMALINK | EDIT/DEL | REPLY
잘되는데 db에 reg_id는 저장이 되는데 메시지가 안보내 지네요ㅠ
부탁드립니다. | 2013.02.20 18:04 신고 | PERMALINK | EDIT/DEL | REPLY
동아리 홈페이지를 만들고 있습니다.
어플도 같이 개발하구 있구요.
GCM서비스로 푸쉬공지를 전달할려구 어플 개발중에 있는데 이 소스가 꼭 필요할것 같습니다.
GCM만 매달린지 보름은 된거 같아요..
소스를 일일이 쳐봐도 에러가 떠서 잡을수가 없구요 .. APK는 이클립스로 열수가 없어서 그렇습니다.
클라이언트쪽 소스를 부탁드려도 될까요??
루틴 | 2013.02.22 09:44 신고 | PERMALINK | EDIT/DEL
클라이언트까지 다 구현된 예제인데요..
어느부분이 안되는지 정확하게 말씀해주세요..
import는 | 2013.02.20 21:21 신고 | PERMALINK | EDIT/DEL | REPLY
import설정은 어떻게되어있는지 궁금합니다
루틴 | 2013.02.22 09:45 신고 | PERMALINK | EDIT/DEL
gcm.jar를 libs 폴더에 복사해서 넣어주시면 import 문제는 없을듯합니다
첨부해 놓겠습니다.
부탁드립니다. | 2013.02.23 20:43 신고 | PERMALINK | EDIT/DEL | REPLY
DB 저장 부분이 안되네요
DB 만들때 세부정보를 어떻게 설정해야 하나요??
답변해주세요 | 2013.02.25 14:59 신고 | PERMALINK | EDIT/DEL | REPLY
앱 시작 시 RegistrationId를 만들고 php를 이용해 서버에 인서트 해줍니다.
이것은 어떻게 하는 것인가요??ㅠㅠㅠㅠㅠㅠ
감사합니다 | 2013.04.02 22:46 신고 | PERMALINK | EDIT/DEL | REPLY
예제대로 잘 보고 만들었으나

send_message.php 실행시

"registration_ids" field cannot be empty

라고 뜨는데 이부분 필드 어떻게 만드셨나요??
Name
Password
Homepage
Secret