Java

[JAVA] FCM 프로젝트 생성 및 JAVA에서 PUSH 보내는 방법

솔솔 2021. 6. 14. 15:14
반응형

안녕하세요 :>

FCM을 통해 APP으로 PUSH 보내는 방법에 대해 설명해보려고합니다.

 

정말이지 게을러서 아무것도 안하다가 FCM에 대해 면접 질문을 받아 다시 기억을 되짚어봤어요.

 

FCM이란, Firebase Cloud Messaging의 줄임말로 사용자 디바이스에 설치된 앱 단위로 메시지(푸시)를 전송할 수 있는 서비스 입니다.

 

https://console.firebase.google.com/u/1/

일단 FCM에 들어가게 되면 프로젝트를 추가할 수 있게 나옵니다.

프로젝트 추가를 눌러주세요.

프로젝트 명을 지정하여 계속 클릭해주세요.

이것도 계속 클릭

 

대한민국 선택 후 프로젝트 만들기

프로젝트가 생성 중입니다 두구두구

 

이제 이렇게 되면 FCM 프로젝트가 생성이 되었어요! 

iOS, Android 종류에 맞게 선택하여 앱을 추가해줍니다!

 

안드로이드스튜디오에서 프로젝트 생성할 때의 패키지 명과 동일해야합니다.

저는 com.ex.test 라고 대충 해놨어요!

친절하게 json 위치를 알려줍니당.

이렇게 등록을 마치면

설정에 내 앱이 추가가 됩니다!

안드로이드이구요! 이걸 토대로 앱에서 연결해주면 됩니다.

 

설정에 들어가보면 

웹 API 키를 복사하여 Web 소스에서 사용하면 됩니다.

 

	public void pushSend(HttpServletRequest request) throws Exception {	
			//FCM apikey
			String authKey = "여기에 복사한 api key 값";
			
			//FCM 발송 URL
			String FMCurl = "https://fcm.googleapis.com/fcm/send";

			try{
				//알림 발송
				URL url = new URL(FMCurl);
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				
				conn.setUseCaches(false);
				conn.setDoInput(true);
				conn.setDoOutput(true);
				conn.setConnectTimeout(5000);
				conn.setReadTimeout(5000);
				
				conn.setRequestMethod("POST");
				conn.setRequestProperty("Authorization","key="+authKey);
				conn.setRequestProperty("Content-Type","application/json");
				
				//알림 발송용 Parameter 설정
				JSONObject json = new JSONObject();
				JSONArray clientArr = new JSONArray();
				
				//다건 발송을 위해 Client 목록 작성
				StringTokenizer stDevice = new StringTokenizer(deviceId.trim(), ";");
                // 넘겨온 핸드폰 번호로 DB에서 Token값 뽑아오는 작업
				String deviceArr = "";
				while(stDevice.hasMoreElements()){
                	// 단말기 Token값 넣어주기
					clientArr.add((String)stDevice.nextElement());
				}

				//단건의 경우 to, 다건인 경우 registration_ids		
				//json.put("to", clientArr);
				json.put("registration_ids", clientArr);
				JSONObject info = new JSONObject();
				info.put("title", "제목");
				info.put("body", "내용");
				info.put("sound", "default");
				json.put("data", info);
				
				//메시지 발송 처리
				OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
				wr.write(json.toString());
				wr.flush();
				
				//발송 결과
				OutputStream rostream = conn.getOutputStream();
			    InputStream ristream = conn.getInputStream();
	
			    final int length = 50000;
			    byte[] bytes = new byte[length];
			    int bytesRead = 0;
			        
			    while ((bytesRead = ristream.read(bytes, 0, length)) > 0) {
			        
			    	String tmp = new String(bytes, "utf-8");

				//	out.print("{\"multicast_id\":5185012636408180766,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1484811869998813%b347b3eab347b3ea\"}]}");
			           
					if(tmp.trim().length()>0){
						int beforeLen = tmp.length();
						int afterLen = 0;
						rostream.write(bytes, 0, bytesRead);
					}
			    }	
	
			    rostream.flush();        
			        
			    if(wr != null){
			   		wr.close();	
			    }
			        
			    if(ristream != null){
			    	ristream.close();	
			    }
			        
			    if(rostream != null){
			    	rostream.close();        	
			    }
				
			}catch(Exception e){
				e.printStackTrace();
			}
		}

이렇게 해주고 안드로이드에서 받을 작업이 되어있다면

FCM PUSH 성공 ^___^

간단하죠~?

 

잊었던 기억을 조금씩 되살려서 한번 해보았습니다.

잘못된 부분이 있으면 댓 달아주세욤^^

 

반응형