본문 바로가기

안드로이드

Android GCM JSP 연동 예제 (1)


-  RegistrationId 를 Jsp 언어를 이용하여 mysql db에 저장하는 예제입니다. 

-  저는  cafe24.com 로 가서 Tomcat JSP광호스팅 절약형을 가입해서 테스트 했습니다

-  꼭 호스팅을 안하더라도 mySql DB 가 있고 톰캣 환경이 구성되어 있으면 됩니다. 



1. mySQL에 테이블을 만듭니다(저는 cafe24에서 제공하는 phpmyadmin 을 이용했습니다)



- 테이블 명은 : push

- 칼럼은  idx , handphone , reg_id 3개로 했습니다. idx는 auto increment/ 기본값을 1로 세팅했습니다



2. android 프로젝트를 하나 생성합니다. RegistrationId를  생성하는 프로젝트 입니다


RegistrationId 가 없으면  GCMIntentService 로 가서 RegistrationId 를 생성 후 서버에 저장을 하고 RegistrationId 가 있으면 바로 서버에 RegistrationId 를 저장하는 예제입니다. 

MainActivity에 GCMReceiver 는 GCMIntentService에서 브로드캐스트를 받는 리시버입니다. 


MainActivity.java

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

public class MainActivity extends Activity {

private GCMReceiver mGCMReceiver;

private IntentFilter mOnRegisteredFilter;


AsyncTask<?, ?, ?> regIDInsertTask;

TextView message;

ProgressDialog loagindDialog;

String myResult;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


mGCMReceiver = new GCMReceiver();

mOnRegisteredFilter = new IntentFilter();

mOnRegisteredFilter.addAction("com.appmaker.gcmtest.ON_REGISTERED");


registerGcm();

}


@Override

public void onResume() {

super.onResume();

registerReceiver(mGCMReceiver, mOnRegisteredFilter);

}


@Override

public void onPause() {

super.onPause();

unregisterReceiver(mGCMReceiver);

}


public void registerGcm() {

GCMRegistrar.checkDevice(this);

GCMRegistrar.checkManifest(this);


String regId = GCMRegistrar.getRegistrationId(this);

Log.d("myLog", " reg_id   " + regId);


if (regId.equals("")) {

GCMRegistrar.register(this, "690721902961");

} else {

regIDInsertTask = new regIDInsertTask().execute(regId,

"01087814775");

}

}


class GCMReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

String regId = intent.getStringExtra("registration_id");

Log.d("myLog", "GCMReceiver reg_id   " + regId);

regIDInsertTask = new regIDInsertTask().execute(regId,

"01087814775");

}

}


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://vicjoa2.cafe24.com/GCM_JSP/reg_insert.jsp"); // 자신이 가지고 있는 톰캣서버나 cafe24에 reg id 를 등록하는 jsp 파일이 있는 곳의 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("&");

buffer.append("handphone").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


}


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



GCMIntentService.java

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

public class GCMIntentService extends GCMBaseIntentService {

static String re_message = null;


private static void generateNotification(Context context, String message) {

}


@Override

protected void onError(Context arg0, String arg1) {


}


@Override

protected void onMessage(Context context, Intent intent) {

String msg = intent.getStringExtra("msg");

Log.d("getmessage", "getmessage:" + msg);


generateNotification(context, msg);

}


@Override

protected void onRegistered(Context context, String regId) {

Intent intent = new Intent("com.appmaker.gcmtest.ON_REGISTERED");

intent.putExtra("registration_id", regId);

context.sendBroadcast(intent);

}


@Override

protected void onUnregistered(Context context, String regId) {

}

}
---------------------------------------------------------------------------



AndroidManifest.xml

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

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

    package="com.appmaker.gcmtest"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />


    <permission

        android:name="com.appmaker.gcmtest.permission.C2D_MESSAGE"

        android:protectionLevel="signature" />


    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="com.appmaker.gcmtest.permission.C2D_MESSAGE" />

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <uses-permission android:name="android.permission.WAKE_LOCK" />


    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name" >

        <receiver

            android:name="com.google.android.gcm.GCMBroadcastReceiver"

            android:permission="com.google.android.c2dm.permission.SEND" >

            <intent-filter>

                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />


                <category android:name="com.appmaker.gcmtest" />

            </intent-filter>

        </receiver>


        <activity

            android:name=".MainActivity"

            android:screenOrientation="portrait" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>


        <service android:name=".GCMIntentService" />

    </application>


</manifest>

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



3. Dyamic Web Project를 프로젝트를 하나 생성합니다. 폰에서 받은 reg id를 저장해주는 프로젝트 입니다 (이클립스에서 Java EE 를 클릭하고 File-New에서 생성가능합니다)



GCM_JSP 로 프로젝트를 생성했습니다. 

- WebContent 폴더 밑에 reg_insert.jsp 파일을 하나 생성해 줍니다

- 핸드폰에서 보낸 handphone 과 reg_id 를 mysql DB에 저장해 주는 파일입니다. 



reg_insert.jsp 


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


<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%@ page import="java.sql.*"%>

<%

request.setCharacterEncoding("euc-kr");


Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://localhost/vicjoa2";

String id = "vicjoa2";

String pass = "****";  //자신의 DB 패스워드를 적으세요^^


String idx = request.getParameter("idx");

String handphone = request.getParameter("handphone");

String reg_id = request.getParameter("reg_id");


try {

Connection conn = DriverManager.getConnection(url, id, pass);


String sql = "INSERT INTO push(idx,handphone,reg_id) VALUES(?,?,?)";

PreparedStatement pstmt = conn.prepareStatement(sql);


pstmt.setString(1, idx);

pstmt.setString(2, handphone);

pstmt.setString(3, reg_id);


pstmt.execute();

pstmt.close();


conn.close();

} catch (SQLException e) {

out.println(e.toString());

}

%>

<script language=javascript>

self.window.alert("reg_id를 저장하였습니다.");

</script>


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


자신이 가지고 있는 톰캣서버/cafe24에 reg_insert.jsp 을 업로드 해주면 됩니다.


(참고. 위 프로젝트를 export - war file  로 해서 war file을 톰캣 서버에 업로드 해주면 자동으로 서버에 프로젝트가 생성됩니다)



- 앱을 실행 시켜서 db에 reg id 가 똑바로 들어왔는지 확인해 봅니다. 




- push 보내기는 다음 편에 올리겠습니다^^