Android c2dm 302 Http 错误

Posted

技术标签:

【中文标题】Android c2dm 302 Http 错误【英文标题】:Android c2dm 302 Http error 【发布时间】:2011-12-29 15:36:43 【问题描述】:

每次我想向我的手机发送推送通知时,我都会从 Google 服务器收到 302 Moved Error。它说,它搬到了 www.google.com。这似乎不正确。所以我有以下信息:

我坐在代理后面,但我在没有代理的情况下也试过了。没有效果。 CUrl 命令行方法工作正常 从 Google 服务器接收身份验证令牌工作正常 更改我要发送的身份验证令牌没有实际效果(更改最后 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 末尾有一个空格。这实际上导致了错误代码。因此,对于在遥远的将来阅读此内容的每个人:检查您的身份验证码!

【问题讨论】:

Moved Temporary...这可能意味着Google有维护。 这似乎不合法。它在命令行上与 CUrl 一起工作得很好。所以我认为谷歌服务器很好。 【参考方案1】:

我遇到了类似的问题。从 cURL 工作,但不是从 Qt 工作。然而,我不得不将 -k 标志与 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();

这对我来说很好用。

【讨论】:

以上是关于Android c2dm 302 Http 错误的主要内容,如果未能解决你的问题,请参考以下文章

Android C2DM 服务器发送错误

Android c2dm 自动注销

如何在android中实现C2DM?

Android C2DM 如何提高带宽使用率?

如何解决经过nginx后不定时出现的http 302错误

如何从 Android APP 调用 C2DM PHP 函数