2011-12-29 130 views
0

每次我想發送一個推送通知到我的單元格,我從Google服務器得到302移動錯誤。它說,它轉移到www.google.com。這看起來不正確。所以我有以下信息:Android的c2dm 302 HTTP錯誤

  • 我坐在一個代理後面,但我也沒有代理嘗試過。沒有效果。
  • 捲曲的命令行方式工作正常
  • 接收從谷歌服務器的身份驗證令牌工作正常
  • 更改身份驗證令牌我想送也沒有真正的影響(改變最後3-4個字符)
  • 沒有發送註冊ID沒有效果

下面是代碼,發送推送通知:

QString headerStr = QString("GoogleLogin auth=") + m_authCode; 
qDebug(qPrintable(headerStr)); 

QUrl url; 
url.addQueryItem("registration_id", m_pRegCode->text()); 
url.addQueryItem("collapse_key", "0"); 
url.addQueryItem("data.message", "data"); 
qDebug("%s", qPrintable(url.toString())); 
qDebug("%s", qPrintable(QString(url.encodedQuery()))); 
QByteArray data; 
data = url.encodedQuery(); 

QUrl header("https://android.apis.google.com/c2dm/send"); 
QNetworkRequest req(header); 
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8"); 
req.setHeader(QNetworkRequest::ContentLengthHeader, data.length()); 
req.setRawHeader(QByteArray("Authorization"), headerStr.toAscii()); 

qDebug("%s", qPrintable(req.url().toString())); 
m_pPushRep = m_pManager->post(req, data); 

我收到的答案是:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>302 Moved</TITLE></HEAD><BODY> 
<H1>302 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com">here</A>. 
</BODY></HTML> 

我在做什麼錯?

編輯:解決方案其實很簡單:我的身份驗證ID末尾有一個空格。這實際上導致了錯誤代碼。因此,對於在遙遠的將來閱讀此內容的所有人:請檢查您的認證代碼!

+0

感動暫時...這可能意味着Google有維護。 – Rolice 2011-12-29 15:41:10

+0

這看起來不合法。它可以在命令行上與CUrl正常工作。所以我認爲Google服務器沒問題。 – muma 2011-12-29 15:50:26

回答

2

我遇到了類似的問題。從cURL工作,但不是從Qt工作。然而,我不得不使用帶-c標誌的cURL aka忽略ssl錯誤。在我對QNetworkReply做了一個簡單的ignoreSslErrors()後,它對我來說工作得很好,這也可能對你有用。我現在有這個代碼來做api調用。

QNetworkRequest request(QUrl("https://android.apis.google.com/c2dm/send")); 
QUrl postData; 
postData.addQueryItem("collapse_key","1"); 
postData.addQueryItem("registration_id",id); 
postData.addQueryItem("data.message",message); 
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded;charset=UTF-8"); 
request.setHeader(QNetworkRequest::ContentLengthHeader, postData.encodedQuery().length()); 
request.setRawHeader("Authorization","GoogleLogin auth=...."); 
network->post(request,postData.encodedQuery())->ignoreSslErrors(); 

這對我來說工作得很好。