https://firebase.google.com/docs/cloud-messaging/?hl=ko
GCM에서 FCM으로 변경 되고 있다.
푸시를 전송 하는 것은 구글 사이트에 요청 하면 된다.
결국 http url request 를 하면 되는 것이고 그것을 어떠한 언어로든 구현 하면 된다.
전송되는 메세지는 json 포멧으로 전달 하면 된다.
이런 것을 지원 해주는 앱으로 구글 포스트 맨도 있다.
https://www.getpostman.com
FCM으로 변경되면서 직접 테스트로 push를 발송 해보는 페이지도 있으니 사실 테스트 어플리케이션이나 포스트맨 어플은 필요 없을수도 있다.
하지만 이번에 개발을 하면서 이미 구현된 서버가 C#으로 구현되어 있다.
모바일 앱과 동작 하는 앱서버가 C#으로 구현 되어 있고
여기에 푸시 기능을 추가 하려 하니 당연히 C# 코드가 필요 했다.
https://github.com/UniverseBryan/FCMWinServer
여기 코드를 참고 해서 간단한 윈폼 어플을 개발 해 보았다.
C#언어로 개발 해본 경험이 없지만
아주 생산성이 좋은듯 하다. 그동안 M$ 개발툴을 너무 멀리 하고 있었는데.
최근 파이썬을 비줠스튜디오로 만지면서 비줠스튜디오 커뮤니티 에디션을 조금 만저 봣는데
나름 C#도 생산성이 좋은 언어 인듯 하다.
아래의 코드가 푸시 전송 코드이다.
폼에 텍스트 입력 두개와 버튼 하나를 언지고
git에서 어든 dll파일을 추가해서 참조에 추가 하고 아래의 코드를 폼 코드에 추가 하면 된다.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Diagnostics;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string res = SendNotification("app registration token key string 152 bytes here", textBox2.Text);
}
public string SendNotification(string deviceId, string message)
{
string SERVER_API_KEY = "API KEY STRING";
var value = message;
string resultStr = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://fcm.googleapis.com/fcm/send");
request.Method = "POST";
request.ContentType = "application/json;charset=utf-8;";
request.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY));
var postData =
new
{
data = new
{
title = textBox1.Text,
body = message,
},
// FCM allows 1000 connections in parallel.
to = deviceId
};
//Linq to json
string contentMsg = JsonConvert.SerializeObject(postData);
Debug.WriteLine("contentMsg = " + contentMsg);
Byte[] byteArray = Encoding.UTF8.GetBytes(contentMsg);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
try
{
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
resultStr = reader.ReadToEnd();
Debug.WriteLine("response: " + resultStr);
reader.Close();
responseStream.Close();
response.Close();
}
catch (Exception e)
{
resultStr = "";
Debug.WriteLine(e.Message);
}
return resultStr;
}
}
}
댓글 9개:
안녕하세요! 글써주신대로 만들고있었는데요..
reponse : {"multicast_id":7675125394329567782,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1486704881717304%1a9b95a4f9fd7ecd"}]}
이런식으로 success라고 떴는데...제 폰에는 아무것도 오질 않네요.....ㅠㅠC#으로 짰고, 제 아이폰에 푸쉬 보내려한거에요~ SendNotification(deviceId) <- 이 디바이스 ID와
SERVER_API_KEY <-이 값을 어디서 가져오는지..자세하게 좀 알 수 있을까요??!
https://firebase.google.com/docs/guides/?hl=ko
구글 FCM 안드로이드/iOS 앱을 등록 하고 KEY를 부여 받아야 합니다. 블로그 관리가 소홀해서 이제야 댓글을 답니다.
안녕하세요, c#으로 FCM 모듈을 만들어보려고 하고 있습니다.
댓글에 써주신대로 FCM에 앱 등록하고 키도 받았는데
윈폼이 처음이라..본문에 있는 코드를 어떻게 써야하며.. 깃허브에서받은 소스는 어떻게 써야하는지
하나도 감이 안와서요..
접근방법 좀 부탁드립니다ㅠㅠ
갈끔한 정리 감사합니다. 검색좀 많이 해야 할것 같았는데 한방에 되네요^^
안녕하세요~! 좋은자료 감사합니다!
코드가 제대로 작동하지 않아서 질문 드립니다...ㅠㅠ
올려주신코드 그대로 따라서 했는데 C#에서
예외 발생: 'System.Net.WebException'(System.dll)
원격 서버에서 (401) 권한이 없음 오류를 반환했습니다.
이런 에러가 뜹니다.
혹시 해결법을 아신다면 답변 부탁드립니다.
안녕하세요~! 좋은자료 감사합니다~!
코드를 따라해보다가 작동이 잘 안되서어 질문드립니다...ㅠㅠ
C#에서
예외 발생: 'System.Net.WebException'(System.dll)
원격 서버에서 (401) 권한이 없음 오류를 반환했습니다.
이런 에러가 뜨는데 혹시 해결방법을 아시나요...ㅠㅠ
구글에서 C# 가이드가 추가 되었습니다.
https://firebase.google.com/docs/cloud-messaging/send-message?hl=ko#c_1
서버측에서 device id를 얻어오는 방법은 없나요?
일일이 클라이언트에서 토큰값을 얻어서 서버에
전달할 수는 없는데..
감사합니다. 많은 도움이 되었습니다.
단지 그대로 쓰면 'null' 만 전송이 되더라구요.
아래와 같이 고치니 정상 동작 합니다.
var postData =
new
{
notification = new '기존 data = new
{
title = textBox1.Text,
body = message,
},
// FCM allows 1000 connections in parallel.
to = deviceId
};
댓글 쓰기