2015-06-11 31 views
0

請幫助我,我從ASP.NET webservice(VB.NET)推送android通知的問題。 這是我的代碼。從ASP.NET推送通知到android web服務

Public sApplicationID As String = "YYY....ZZZ" 
Public sSENDER_ID As String = "222...555" 

<WebMethod()> _ 
Public Function SendMessage(ByVal RegistrationID As String, ByVal Message As String) As String 
    Dim regid As String = RegistrationID 
    Dim tRequest As WebRequest 
    tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send") 
    tRequest.Method = "post" 
    'tRequest.ContentType = " application/json" 
    tRequest.ContentType = " application/x-www-form-urlencoded" 
    tRequest.Headers.Add(String.Format("Authorization: key={0}", sApplicationID)) 

    tRequest.Headers.Add(String.Format("Sender: id={0}", sSENDER_ID)) 

    Dim postData As String = "{""collapse_key"":""score_update"",""time_to_live"":108,""delay_while_idle"":1,""data"":{""message"":""" & Convert.ToString(Message) & """,""time"":""" & System.DateTime.Now.ToString() & """},""registration_ids"":" & regid & "}" 
    Console.WriteLine(postData) 
    Dim byteArray As [Byte]() = Encoding.UTF8.GetBytes(postData) 
    tRequest.ContentLength = byteArray.Length 

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

    Dim tResponse As WebResponse = tRequest.GetResponse() 

    dataStream = tResponse.GetResponseStream() 

    Dim tReader As New StreamReader(dataStream) 

    Dim sResponseFromServer As [String] = tReader.ReadToEnd() 

    tReader.Close() 
    dataStream.Close() 
    tResponse.Close() 

    Return sResponseFromServer 
End Function 

我在測試這項服務,但我總是得到錯誤信息

System.Net.WebException: The remote server returned an error: (401) Unauthorized. 
at System.Net.HttpWebRequest.GetResponse() 
+0

[Google GCM中的HTTP響應代碼401]的可能重複(http://stackoverflow.com/questions/11900855/http-response-code-401-in-google-gcm) – Kariem

回答

0

好像一些與認證沒有工作。按照guide,你的API密鑰無效:

如果你收到一個401 HTTP狀態代碼,你的API密鑰無效

又見使用時這個答案對於401的可能原因GCM:https://stackoverflow.com/a/11903863。它指的是一個不再存在的鏈接,但看起來非常全面。

+0

Terima kasih atas jawaban anda,但我仍然沒有成功。我嘗試了,我得到了不同的結果。如果我使用下面的代碼:Dim postData As String =(Convert.ToString((Convert.ToString(「collapse_key = score_update&time_to_live = 108&delay_while_idle = 1&data.message =」)&message)+「&data.time =」+ System.DateTime。 Now.ToString()+「&registration_id =」)&registrationid)+「」錯誤消息:錯誤= MismatchSenderId – Ishaq

+0

如果我使用此代碼:Dim postData As String =「{」「collapse_key」「:」「score_update」「, 「time_to_live」「:108,」「delay_while_idle」「:1,」「data」「:{」「message」「:」「」&Convert.ToString(message)&「」「,」「time」「: 「」&System.DateTime.Now.ToString()&「」「},」「registration_ids」「:」&registrationid&「}」錯誤信息:MissingRegistration – Ishaq

+1

請參閱[本表](https:// developers。 google.com/cloud-messaging/server-ref#error-codes)是因爲您收到其他錯誤代碼的原因。就像@Kariem所說的,你的401未授權問題是一個API密鑰問題(你的sApplicationID變量)。確保您在Developers Console中正確設置它(即API密鑰是服務器密鑰)。 – Koh