본문 바로가기

안드로이드

php를 이용한 gcm 푸시 예제[1]

반응형


- 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);

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



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



반응형