これらはいくつかの優れた解決策でしたが、トピック メッセージングを使用して通知を送信していたため、役に立ちませんでした。この通り
HTTP ヘッダーには、次のヘッダーが含まれている必要があります。Authorization: key=YOUR_API_KEY Content-Type: application/json for JSON; application/x-www-form-urlencoded;charset=プレーン テキストの場合は UTF-8。Content-Type を省略した場合、形式はプレーン テキストと見なされます。
ただし、私はクラウド エンドポイントを使用しており、私のアプリ (既に出回っています) は json を想定しているため、リクエストをプレーン テキストでフォーマットすることはできませんでした。解決策は、上記のドキュメントを無視し、バックエンドで http 要求ヘッダーを次のようにフォーマットすることでした。
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
魔法のように、突然すべての特殊文字 (読み: 日本語) が、フロント エンドの変更なしでアプリケーションに渡されます。私の完全なhttpポストコードは以下です( where payload = Cloud endpoint model object, converted to json<String> via Gson):
try {
URL url = new URL("https://gcm-http.googleapis.com/gcm/send");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
connection.setRequestProperty("Authorization", "key=" + API_KEY);
connection.setRequestMethod("POST");
byte[] bytes=payload.getBytes("UTF-8");
OutputStream out = connection.getOutputStream();
try {
out.write(bytes);
} finally {
out.close();
}
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// OK
log.warning("OK");
} else {
// Server returned HTTP error code.
log.warning("some error "+connection.getResponseCode());
}
} catch (MalformedURLException e) {
// ...
}