본문 바로가기

안드로이드

Android GCM JSP 연동 예제 (2)

- jsp 서버에서 푸쉬 메세지를 보내는 예제와 핸드폰에서 메시지를 받았을때 처리하는 예제입니다



1. 이전에 만든 android 프로젝트의 GCMIntentService 를 수정해줍니다. 



generateNotification 부분의 코드가 추가 되었습니다.

- 푸쉬를 받았을때 노티피케이션을 띄워주고 ShowMessage로 이동하여 푸쉬 메시지를 보여주는 예제입니다. 

-ShowMessage 엑티비티의  R.layout.message 레이아웃은 텍스트뷰 하나만 만들어 주었습니다



GCMIntentService.java

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

public class GCMIntentService extends GCMBaseIntentService {

static String re_message = null;


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

long when = System.currentTimeMillis();


try {

message = URLDecoder.decode(message, "UTF-8"); //메시지 디코딩

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



Notification notification = new Notification(R.drawable.ic_launcher,

message, when);

notification.flags |= Notification.FLAG_AUTO_CANCEL;

Intent it = new Intent(context, ShowMessage.class);


PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,

it, 0);

String title = context.getString(R.string.app_name);

notification.setLatestEventInfo(context, title, message, pendingIntent);

   NotificationManager manager = (NotificationManager) context

           .getSystemService(Context.NOTIFICATION_SERVICE);

   manager.notify(0, notification);


   it.putExtra("mss", message);

   it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(it);


}


@Override

protected void onError(Context arg0, String arg1) {


}


@Override

protected void onMessage(Context context, Intent intent) {

String msg = intent.getStringExtra("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) {

}


}

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



ShowMessage.java

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

public class ShowMessage extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

getWindow().addFlags(

WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 

| WindowManager.LayoutParams.FLAG_FULLSCREEN

|WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);


Intent sitent = getIntent();

String ssd = sitent.getStringExtra("mss");

setContentView(R.layout.message);


TextView txt = (TextView) findViewById(R.id.mtmtmt);

txt.setText(ssd);

}


}


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

2. 푸쉬를 보내는 jsp 파일을 만듭니다.  


gcm-server.jar , json_simple-1.1.jar 를 이전에 만든 jsp 웹 프로젝트에 WebContent/WEB-INF/lib 폴더에 복사해줍니다. 

- gcm-server.jar , json_simple-1.1.jar 파일은 android sdk가 설치된 폴더에 있습니다

  (\sdk\extras\google\gcm\gcm-server\dist)


DB에 저장된 reg_id를 다 가져오고 msg 파라미터를 받아서 푸쉬를 보내는 예제입니다.


push.jsp

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

<%@page import="java.net.URLEncoder"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>


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


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


<%@ page import="com.google.android.gcm.server.*"%>


<%


ArrayList<String> regid = new ArrayList<String>(); //reg_id


String MESSAGE_ID = String.valueOf(Math.random() % 100 + 1); //메시지 고유 ID


boolean SHOW_ON_IDLE = false; //기기가 활성화 상태일때 보여줄것인지


int LIVE_TIME = 1; //기기가 비활성화 상태일때 GCM가 메시지를 유효화하는 시간


int RETRY = 2; //메시지 전송실패시 재시도 횟수



String simpleApiKey = "AIzaSyC-eisgmovdUQQgTwQ7f9hOFdrCvKq****"; // 개발자콘솔에서 가져온 서버키


String gcmURL = "https://android.googleapis.com/gcm/send";

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

if(msg==null || msg.equals("")){

msg="";

}

msg = new String(msg.getBytes("ISO-8859-1"), "UTF-8");   //메시지 한글깨짐 처리

try {


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

String id = "vicjoa2";

String pass = "****";  //자신의 DB 비밀번호


ResultSet rs = null;


 


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


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


 


Statement stmt = con.createStatement();


String sql = "select reg_id from push";


rs = stmt.executeQuery(sql);



//모든 등록ID를 리스트로 묶음


while(rs.next()){


regid.add(rs.getString("reg_id"));


}


con.close();


msg = URLEncoder.encode(msg, "UTF-8"); //메시지 인코딩


Sender sender = new Sender(simpleApiKey);


Message message = new Message.Builder()


.collapseKey(MESSAGE_ID)


.delayWhileIdle(SHOW_ON_IDLE)


.timeToLive(LIVE_TIME)


.addData("msg",msg)


.build();


MulticastResult result1 = sender.send(message,regid,RETRY);

if (result1 != null) {

 

List<Result> resultList = result1.getResults();

 

for (Result result : resultList) {

 

System.out.println(result.getErrorCodeName());

 

}

 

}


}catch (Exception e) {

e.printStackTrace();

}


%>

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



- war 파일로 export 하여 톰캣서버에 올린 후 push.jsp를 호출해 봅니다 

  ex) http://vicjoa2.cafe24.com/GCM_JSP/push.jsp?msg=푸쉬메시지

- 성공하시길 빕니다.!