2015년 5월 27일 수요일

안드로이드 : GCM Message 사용(3) : 웹에서 폰으로 Push 메시지 전송


일단 GCM Service 를 등록하고, 앱에서 폰의 ID 를 생성했다면, 이제 Push 서버에서 그 ID 를 이용해 메시지를 보내면 된다.

일반적으로넌 앱이 실행 될때 관리 서버로 생성한 ID 를 전달해 주지만, 여기서는 어차피 혼자서 쓰는 것이니, 이미 전달되어 있다고 생각하고...
Push 서버에서 메시지를 보내보자.

거창하게 Push 서버라고 말은 하지만, 그냥 구글 GCM Service 에 등록 ID 와 메시지를 던져 주는 역할을 할 뿐이다.

그냥 아무 웹페이지나 하나 만들고...


소스를 이렇게 기록한다.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.Text;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Collections.Specialized;

public partial class gcmtest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        SendNotification("전달 받은 앱의 등록 키를 여기에 기록", "GCM TEST를 합니다.");
    }

    public string SendNotification(string regId, string message)
    {
        string GoogleAppID = "API Key 를 기록";
        var SENDER_ID = "프로젝트 넘버";
        var value = HttpUtility.UrlEncode(message);
        
        WebRequest tRequest;
        tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
        tRequest.Method = "post";
        tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", GoogleAppID));

        tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID));

        string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.title=test&data.msg="
            + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + regId + "";
        Console.WriteLine(postData);

        Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        tRequest.ContentLength = byteArray.Length;

        Stream dataStream = tRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse tResponse = tRequest.GetResponse();

        dataStream = tResponse.GetResponseStream();

        StreamReader tReader = new StreamReader(dataStream);

        String sResponseFromServer = tReader.ReadToEnd();

        tReader.Close();
        dataStream.Close();
        tResponse.Close();
        return sResponseFromServer;
    }
}


여기서 GoogleAppID 는 구글에서 등록한 서비스 Key 이며.
SENDER_ID 는 프로젝트 넘버.
regId 는 폰에서 앱이 실행 할때 생성한 ID 이다.

이렇게 하고...


 저 버튼을 클릭하면...


이렇게 폰으로 메시지가 전달이 된다.
여기에 나온는 메시지는..


웹에서 저 파라메터로 넘겨지고...

앱에서...


저기서 처리되니... 적당히 알아서 쓰면되겠다.