1. 일단 URL은 아래와 같습니다. 중간에 FCM 프로젝트 ID가 들어 갑니다.
https://fcm.googleapis.com/v1/projects/[프로젝트 ID]/messages:send
2. 기존에 key 부분은 아래와 같이 변경됩니다. Token이 얻어 오는 부분은 따로 구현해야됩니다. Header 부분에 들어갑니다.
Authorization: Bearer [valid Oauth 2.0 token]
3. 보내는 메시지 부분도 아래와 같이 약간 변경이 되었기 때문에 확인은 해보셔야합니다. 아래 예제는 FCM에 있는 내용입니다. 보내는 부분에 topic로 되어 있지만 사용자의 FCM TOKEN으로 보내려면 "topic": "news", 부분을 "token" : "[PUSH TOKEN]", 으로 변경하시면 됩니다.
{
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
}
}
}
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
}
}
}
4. 서버 Token 얻어오기
- 일단 라이브러리가 필요합니다. https://developers.google.com/api-client-library/?hl=ko 주소에서 다운로드 받아서 라이브러리 추가 하시고 JSP라면 WEB-INF/lib에 넣으셔야 동작합니다.
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
private String getAccessToken() {
List scopes = new ArrayList();
scopes.add("https://www.googleapis.com/auth/firebase.messaging"); // 서버를 사용할 범위 저는 FCM만 사용하기 때문에 위와 같이 했습니다.
FileInputStream fs = null;
GoogleCredential googleCredential = null; // 위에 라이브러리에 있는 클래스 입니다.
try {
fs = new FileInputStream("[FCM 서버 관련 JSON 파일 PATH]");
googleCredential = GoogleCredential.fromStream(fs).createScoped(scopes);
googleCredential.refreshToken();
} catch (FileNotFoundException e) {
return null;
} catch (IOException e) {
return null;
}
return googleCredential.getAccessToken();
}
try {
fs = new FileInputStream("[FCM 서버 관련 JSON 파일 PATH]");
googleCredential = GoogleCredential.fromStream(fs).createScoped(scopes);
googleCredential.refreshToken();
} catch (FileNotFoundException e) {
return null;
} catch (IOException e) {
return null;
}
return googleCredential.getAccessToken();
}
5 Push 보내는 방법, Body 구성 부분은 위 3번을 참조하세요.
public String send(String appos, String userToken, String title, String message) throws IOException {
String token = getAccessToken();
URL url = new URL(_fcmUrl);
_http = (HttpURLConnection) url.openConnection();
_http.setRequestMethod("POST");
_http.setRequestProperty("Content-Type", "application/json");
_http.setRequestProperty("Authorization", "Bearer " + token);
_http.setDoOutput(true);
OutputStream os = _http.getOutputStream();
String body = "";
body += "{\n";
body += "\"message\":{\n";
body += "\"token\" : \"" + userToken + "\",\n";
body += "\"notification\" : {\n";
body += "\"body\" : \"This is an FCM notification message!\",\n";
body += "\"title\" : \"FCM Message\",\n";
body += "},\n";
body += "}\n";
body += "}\n";
os.write(body.getBytes());
os.flush();
os.close();
}
String token = getAccessToken();
URL url = new URL(_fcmUrl);
_http = (HttpURLConnection) url.openConnection();
_http.setRequestMethod("POST");
_http.setRequestProperty("Content-Type", "application/json");
_http.setRequestProperty("Authorization", "Bearer " + token);
_http.setDoOutput(true);
OutputStream os = _http.getOutputStream();
String body = "";
body += "{\n";
body += "\"message\":{\n";
body += "\"token\" : \"" + userToken + "\",\n";
body += "\"notification\" : {\n";
body += "\"body\" : \"This is an FCM notification message!\",\n";
body += "\"title\" : \"FCM Message\",\n";
body += "},\n";
body += "}\n";
body += "}\n";
os.write(body.getBytes());
os.flush();
os.close();
}
댓글 없음:
댓글 쓰기