- 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=푸쉬메시지
- 성공하시길 빕니다.!
'안드로이드' 카테고리의 다른 글
ListView did not receive a notification 오류 해결법 (0) | 2014.11.13 |
---|---|
Seekbar 볼륨 조절 AlertDialog 이용 (0) | 2014.10.08 |
Android GCM JSP 연동 예제 (1) (0) | 2014.08.19 |
android 웹 서버에 있는 이미지 다운받고 실행하기 (0) | 2014.07.16 |
android nfc mime type 이용하기 (0) | 2014.07.09 |