0

Android Google Cloud Messaging を使用して、c#.net でデバイスに通知を送信しています。APIキー、RegistrationID、およびsenderIDを取得しました(最初の方法はうまくいきましたが、GCMの構成に問題はありません)。

メッセージを 1 つの登録 ID に送信する最初の方法を次に示します (postData を確認してください。Json を使用していません)。

    public void SendPushNotification(string regID, string message)
 {


     {
         string GoogleAppID = "APIKey";
         var SENDER_ID = "SenderID";
         var value = 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.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + regID + "";
         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();

         HttpWebResponse httpResponse = (HttpWebResponse)tResponse;
         string statusCode = httpResponse.StatusCode.ToString();

         tReader.Close();
         dataStream.Close();
         tResponse.Close();
     }
        catch {
            throw new WebFaultException<string>("Error", HttpStatusCode.ServiceUnavailable);
        }

したがって、それを呼び出すと、デバイスはメッセージを正常に受信します。

Json 形式を使用して複数の ID に送信する 2 番目の方法を次に示します (コードで宣言したリストに登録 ID を追加したため、この手順では registrationID をパラメーターとして使用しないことに注意してください)。

    public void SendPushNotification(string message)
 {

     string stringregIds = null;
     List<string> regIDs = new List<string>();
     //Here I add the registrationID that I used in Method #1 to regIDs
     //Then I use 
     stringregIds = string.Join("\",\"", regIDs);
     //To Join the values (if ever there are more than 1) with quotes and commas for the Json format below



     try
     {
         string GoogleAppID = "APIKey";
         var SENDER_ID = "SenderID";
         var value = 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\":true,\"data\": { \"message\" : "+"\""+value+"\",\"time\": "+"\""+System.DateTime.Now.ToString()+"\"},\"registration_ids\":[\""+stringregIds+"\"]}";

         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();

         HttpWebResponse httpResponse = (HttpWebResponse)tResponse;
         string statusCode = httpResponse.StatusCode.ToString();

         tReader.Close();
         dataStream.Close();
         tResponse.Close();
     }
        catch {
            throw new WebFaultException<string>("Error", HttpStatusCode.ServiceUnavailable);
        }

メソッドはエラーなどを表示しませんが、通知はデバイスに届きません。(私は console.writelined postData で、それはhttp://developer.android.com/google/gcm/http.htmlと同じ形式 なので、何を修正すればよいかよくわかりません。ユーザーに通知を送信する方が本当に簡単です)同時に、X 秒ごとに各ユーザーに 1 を送信するだけではありません。

ありがとう。

4

3 に答える 3

2

変化

Request.ContentType = " application/x-www-form-urlencoded;charset=UTF-8";

Request.ContentType = "application/json";

質問に答えます。

彼は、正反対のことを明示的に暗示している JSON データを提供しています。

HTTP ヘッダーには、次のヘッダーが含まれている必要があります。

Content-Type: JSON の場合は application/json。application/x-www-form-urlencoded;charset=プレーン テキストの場合は UTF-8。

参照: https://developer.android.com/google/gcm/http.html

于 2014-11-24T19:07:53.123 に答える
1

使用する

Request.ContentType = "application/json";
于 2015-12-21T13:33:54.253 に答える