BLOG main image
분류 전체보기 (74)
Cocos2d (9)
낙서장 (4)
스토리지 (1)
안드로이드 (54)
유용한링크 (1)
모바일게임 (2)
추천앱 (1)
아이폰 (0)
맛집/여행 (1)
ナイトウェアメンズ
ナイトウェアメンズ
割烹着 オシャレ
割烹着 オシャレ
klicken Sie einfach auf die bi..
klicken Sie einfach auf die bi..
スポーツ
スポーツ
サンダル
サンダル
282,399 Visitors up to today!
Today 42 hit, Yesterday 39 hit
daisy rss
tistory 티스토리 가입하기!
2014.08.20 11:10
  

- 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=푸쉬메시지

- 성공하시길 빕니다.!




daeili | 2015.02.02 22:54 신고 | PERMALINK | EDIT/DEL | REPLY
에러가 뜨는데 어떻게 수정해야 할지 모르겠어서 질문 드립니다.
에러 로그입니다.
도와 주시면 감사하겠습니다.

02-02 22:51:27.873: E/AndroidRuntime(17528): FATAL EXCEPTION: main
02-02 22:51:27.873: E/AndroidRuntime(17528): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gcmtest/com.example.gcmtest.MainActivity}: java.lang.IllegalStateException: No receiver for package com.example.gcmtest
02-02 22:51:27.873: E/AndroidRuntime(17528): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
Name
Password
Homepage
Secret