- 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 보내기는 다음 편에 올리겠습니다^^
'안드로이드' 카테고리의 다른 글
Seekbar 볼륨 조절 AlertDialog 이용 (0) | 2014.10.08 |
---|---|
Android GCM JSP 연동 예제 (2) (1) | 2014.08.20 |
android 웹 서버에 있는 이미지 다운받고 실행하기 (0) | 2014.07.16 |
android nfc mime type 이용하기 (0) | 2014.07.09 |
구글 인앱결제 v3 (1) | 2014.04.28 |