C# GCM正在发送但未接收新注册的设备

C# GCM正在发送但未接收新注册的设备,c#,asp.net,C#,Asp.net,我在GCM部分遇到了一个问题。我们在数据库中注册了数千台设备,但其中一些设备没有接收消息。新注册的设备未接收消息。下面是我用来发送GCM的代码。有人能帮忙找出这个问题吗 //++ Send GCM private string sendGCM(string apiKey, string message, IEnumerable<string> registrationIds) { if (apiKey == null) {

我在GCM部分遇到了一个问题。我们在数据库中注册了数千台设备,但其中一些设备没有接收消息。新注册的设备未接收消息。下面是我用来发送GCM的代码。有人能帮忙找出这个问题吗

 //++ Send GCM
    private string sendGCM(string apiKey, string message, IEnumerable<string> registrationIds)
    {
        if (apiKey == null)
        {
            throw new ArgumentNullException("apiKey");
        }

        if (message == null)
        {
            throw new ArgumentNullException("message");
        }

        if (registrationIds == null)
        {
            throw new ArgumentNullException("registrationIds");
        }

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://android.googleapis.com/gcm/send");
        request.Method = "POST";
        request.ContentType = "application/json";
        request.Headers["Authorization"] = "key=" + apiKey;
        JObject jo = new JObject();
        JArray ids = new JArray();
        foreach (var regId in registrationIds)
        {
            ids.Add(regId);
        }

        jo["registration_ids"] = ids;
        JObject data = new JObject();
        //data["message"] = edtMessage.Text;
        data["message"] = message;
        jo["data"] = data;

        string query = jo.ToString();
        byte[] buff = Encoding.UTF8.GetBytes(query);

        Stream stream1 = request.GetRequestStream();
        MemoryStream mstream1 = new MemoryStream(buff);
        mstream1.CopyTo(stream1);

        stream1.Close();

        Stream stream2 = request.GetResponse().GetResponseStream();
        MemoryStream mstream2 = new MemoryStream();
        stream2.CopyTo(mstream2);

        String responseString = Encoding.UTF8.GetString(mstream2.GetBuffer());
        return responseString;
    }

                objGCM = new clsGCM();
                Int64 intGCMID = Convert.ToInt64(e.CommandArgument);
                objGCM.execGetInfo(intGCMID);
                string strMessage = objGCM.InfoMessage;

                if (strMessage != null && strMessage != "")
                {

                    //++ Send to the devices
                    objDeviceInfo = new clsDeviceInfo();
                    DataTable dtDeviceInfo = objDeviceInfo.Load();
                    for (int i = 0; i < dtDeviceInfo.Rows.Count; i = i + 1000)
                    {
                        IEnumerable<string> strDeviceToken = from g in dtDeviceInfo.AsEnumerable().Where(w => w.Field<Int32>("DeviceID") > i).Take(1000)
                                                             select g.Field<string>("DeviceToken");
                        sendGCM("Myapikeyhere", strMessage, strDeviceToken);
                    }

                    //++ Mark as sent
                    objGCM.execUpdateStatus(intGCMID);
                }
                Response.Redirect("~/Forms/frmGCM.aspx", false); 
//++发送GCM
私有字符串sendGCM(字符串apiKey、字符串消息、IEnumerable RegistrationID)
{
if(apiKey==null)
{
抛出新ArgumentNullException(“apiKey”);
}
如果(消息==null)
{
抛出新的ArgumentNullException(“消息”);
}
如果(注册ID==null)
{
抛出新ArgumentNullException(“RegistrationId”);
}
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(“https://android.googleapis.com/gcm/send");
request.Method=“POST”;
request.ContentType=“application/json”;
request.Headers[“Authorization”]=“key=”apiKey;
JObject jo=新的JObject();
JArray id=新的JArray();
foreach(注册ID中的变量regId)
{
id.Add(regId);
}
jo[“注册ID”]=ID;
作业对象数据=新作业对象();
//数据[“消息”]=edtMessage.Text;
数据[“消息”]=消息;
jo[“数据”]=数据;
字符串查询=jo.ToString();
byte[]buff=Encoding.UTF8.GetBytes(查询);
stream1=request.GetRequestStream();
MemoryStream mstream1=新的MemoryStream(buff);
mstream1.CopyTo(stream1);
stream1.Close();
stream2=request.GetResponse().GetResponseStream();
MemoryStream mstream2=新的MemoryStream();
stream2.CopyTo(mstream2);
字符串responseString=Encoding.UTF8.GetString(mstream2.GetBuffer());
回报率;
}
objGCM=新的clsGCM();
Int64 intGCMID=Convert.ToInt64(e.CommandArgument);
objGCM.execGetInfo(intGCMID);
字符串strMessage=objGCM.InfoMessage;
如果(strMessage!=null&&strMessage!=“”)
{
//++发送到设备
objDeviceInfo=新的clsDeviceInfo();
DataTable dtDeviceInfo=objDeviceInfo.Load();
对于(int i=0;iw.Field(“DeviceID”)>i).Take(1000)
选择g.Field(“DeviceToken”);
sendGCM(“Myapikeyhere”,strMessage,strDeviceToken);
}
//++标记为已发送
objGCM.execUpdateStatus(intGCMID);
}
重定向(“~/Forms/frmGCM.aspx”,false);

你能告诉我一个解决办法吗?你能告诉我一个解决办法吗?