2013-04-22 2 views
0

Я использую веб-службы C# для регистрации идентификаторов регистрации в GCM. У меня есть два телефона для Android, и у меня есть действующие регистрационные идентификаторы. Когда я передаю их отдельно, GCm не возвращает никаких ошибок, и устройства не уведомлены. Но когда я пытаюсь передать их вместе как JSON, я получаю ошибку, поскольку "Error = missing registration".GCM, возвращающий отсутствующую регистрационную ошибку

это код моего веб-сервиса, который проходит registtration идентификаторами в GCM ..

public string Notify(string deviceId, string 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(HttpRequestHeader.Authorization, "key=AIzaSyCUJX_f_NZzYbigWMDK9U5vkzZ9mPiK8jA"); 
     tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID)); 
     int count = 2; 

      SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["Login"]); 
      conn.Open(); 

      string send_notification = "select RegId from REG_ID ";//where RegId <> '"+deviceId+"'"; 
      SqlCommand cmd2 = new SqlCommand(send_notification, conn); 
      DataSet ds2 = new DataSet(); 
      SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2); 
      adapter2.Fill(ds2); 
      int count1 = ds2.Tables[0].Rows.Count; 
      registration[] r = new registration[count1]; 
      for (int i = 0; i < count1; i++) 
      { 
       r[i] = new registration(); 
       r[i].registration_ids = ds2.Tables[0].Rows[i]["RegId"].ToString(); 
      } 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     string strJson = js.Serialize(r); 
     string postData = /*"collapse_key=score_update&time_to_live=108&delay_while_idle=1&*/"data.message=" + message + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id= "+ deviceId + ""; 
     Console.WriteLine(strJson); 
     Byte[] byteArray = Encoding.UTF8.GetBytes(strJson); 
     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; 
    } 

Я новичок в разработке и может быть что-то очень простое отсутствует. Любая помощь appreciated..Thanks заранее

ответ

2

Ваш JSON должен выглядеть следующим образом:

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
    }, 
    "registration_ids": ["4", "8", "15", "16", "23", "42"] 
} 
  • код, который вы вывесили имеет сочетание формата JSON и текстовой формат.
  • Если вы хотите отправить несколько сообщений по одному запросу, вы должны изменить свой тип контента на application/json.
  • Из вашего кода неясно, что содержит ваш strJson, поэтому я не могу сказать, действительно ли это.
  • Ваша переменная postData, по-видимому, принадлежит формату обычного текста, но вы все равно не используете ее.
+0

Thx .. но я получил решение. Я поместил каждый регистрационный идентификатор индивидуально внутри цикла. Вышеуказанный формат, который вы показали, правильный, но я не могу легко это сформировать, поскольку мне нужно получить идентификаторы регистрации из базы данных. Это мой код, и он работает успешно. –