일단 파이어베이스에서 톱니바퀴(설정)을 누르고 프로젝트 설정 -> 클라우드 메시징으로 이동한다.
그러면 서버 키가 있는데, 여기서 우리가 사용할 것은 토큰 정보이므로 이 정보를 저장해둔다.
내가 내린 Firebase에 토픽 정의는 다음과 같았다.
1. 다수 유저에게 보내는 푸쉬
2. 토픽을 구독한 유저에게 발송
그럼 이제 서버에서 할일과 클라이언트에서 할 일을 생각해보자.
IID = Instance ID
서버에서 할일
1. 클라이언트에 IID Token 요청
2. Topic 생성
3. Topic 사용하여 푸쉬 Sender 만들기
클라이언트에서 할일
1. IID Token 획득
2. 서버 Topic에 구독 신청
클라이언트 IID 획득 방법
https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId
주제 구독 관리 참고 사이트
https://firebase.google.com/docs/cloud-messaging/admin/manage-topic-subscriptions?hl=ko
그럼 이제 구독을 생성해보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | string topicName = "sample"; string format = string.Format("https://iid.googleapis.com/iid/v1/{0}/rel/topics/{1}", IID_TOKEN, topicName); WebRequest requester; requester = WebRequest.Create(format); requester.Method = "post"; requester.ContentType = "application/json charset=UTF-8"; requester.Headers.Add(string.Format("Authorization: key={0}", fcmKey)); Byte[] byteArray = Encoding.UTF8.GetBytes(format); requester.ContentLength = byteArray.Length; try { using (Stream requestDataStream = requester.GetRequestStream()) { requestDataStream.Write(byteArray, 0, byteArray.Length); requestDataStream.Close(); } using (WebResponse response = requester.GetResponse()) using (Stream responseDataStream = response.GetResponseStream()) using (StreamReader responseDataStreamReader = new StreamReader(responseDataStream)) { String sResponseFromServer = responseDataStreamReader.ReadToEnd(); responseDataStreamReader.Close(); responseDataStream.Close(); response.Close(); return sResponseFromServer; } } catch (Exception exception) { return ""; } | cs |
이 형식으로 발송하면, 해당 창에 4시간? 하여튼 시간이 걸린단다 나오기까지... 그래서 본인은 퇴근전에 해놓고 다음날 확인했음
맨 처음 메뉴 탭에 좌측 하단으로 가서
대상을 사용자 세그먼트에서 주제로 바꾸고, 주제에서 입력한 topic 이름으로 검색한다.
여기서 나오면 등록 성공
이제 json 형식으로 정보를 입력해주면 된다. 형식은 다음과 같다.
1 2 3 4 5 6 7 | "{ \"content_available\":true ,\"notification\":{\"title\":\"sender\" ,\"body\":\"message\",\"sound\":\"default\"} ,\"to\":\"/topics/topicName\" ,\"priority\":\"high\" } | cs |
클라이언트 같은 경우 to에 topics가 빠져있지만 서버의 경우 앞에 topics/까지 붙여서 써줘야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | WebRequest requester; requester = WebRequest.Create("https://fcm.googleapis.com/fcm/send"); requester.Method = "post"; requester.ContentType = "application/json charset=UTF-8"; requester.Headers.Add(string.Format("Authorization: key={0}", fcmKey)); Byte[] byteArray = Encoding.UTF8.GetBytes(jsonString); requester.ContentLength = byteArray.Length; try { using (Stream requestDataStream = requester.GetRequestStream()) { requestDataStream.Write(byteArray, 0, byteArray.Length); requestDataStream.Close(); } using (WebResponse response = requester.GetResponse()) using (Stream responseDataStream = response.GetResponseStream()) using (StreamReader responseDataStreamReader = new StreamReader(responseDataStream)) { String sResponseFromServer = responseDataStreamReader.ReadToEnd(); responseDataStreamReader.Close(); responseDataStream.Close(); response.Close(); return sResponseFromServer; } } catch (Exception exception) { return ""; } | cs |
'C#' 카테고리의 다른 글
16# 프로시저에서 DataTable 대신 사용 방법. (0) | 2019.03.11 |
---|---|
15# C#에서 Buffer.BlockCopy와 Array.Copy 속도 차이 (0) | 2018.12.19 |
13# C#에서 미국 광고 Fyber 처리 (0) | 2018.02.22 |
13# 리스트 제네릭 함수 (0) | 2017.11.20 |
12# 최선의 안정성 구현 방법 (0) | 2017.10.13 |