我很难将通知推送到Android设备。
这是我写的一小段代码:
$tocity=$_POST['tocity'];
$res=mysql_query("SELECT Route FROM routes where City1 LIKE '%$tocity%' OR City2 LIKE '%$tocity%' OR City3 LIKE '%$tocity%' OR City4 LIKE '%$tocity%' OR City5 LIKE '%$tocity%' OR City6 LIKE '%$tocity%' OR City7 LIKE '%$tocity%' OR City8 LIKE '%$tocity%' OR City9 LIKE '%$tocity%' OR City10 LIKE '%$tocity%' OR )");
while($result=mysql_fetch_array($res)){
echo $result['Route'];
}
查看https://developers.google.com/cloud-messaging/http#send-to-sync,当我尝试发送到同步选项时,它工作正常。我的手机上收到通知声音,但没有实际通知,因为没有链接到推送的消息或数据。
现在当我用以下行替换我的数据字符串时,我仍然得到相同的结果:
String API_KEY = "AIzaSy....";
String url = "https://android.googleapis.com/gcm/send";
String to = "ce0kUrW...";
String data = "{\"to\": \"" + to + "\"}";
RequestBody body = RequestBody.create(MediaType.parse("application/json"), data);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).post(body).addHeader("Authorization", "key=" + API_KEY).build();
Response response = client.newCall(request).execute();
System.out.println(response.headers());
System.out.println(response.body().string());
我不确定我错过了什么。我的猜测是我的通知格式是错误的,但我已经尝试了我在研究过程中发现的每一种组合。
他们写日志的内容如下:
Content-Type:application / json;字符集= UTF-8
日期:星期四,2016年4月21日10:51:23 GMT
到期:星期四,2016年4月21日10:51:23 GMT
Cache-Control:private,max-age = 0
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1;模式=块
服务器:GSE
替代协议:443:quic
Alt-Svc:quic =“:443”; MA = 2592000; V = “32,31,30,29,28,27,26,25”
Transfer-Encoding:chunked
OkHttp-Selected-Protocol:http / 1.1
OkHttp-Sent-Millis:1461235877551
OkHttp-Received-Millis:1461235877855
{ “multicast_id”:6596853786874127657, “成功”:1, “失败”:0, “canonical_ids”:0 “结果”:[{ “MESSAGE_ID”: “0:1461235883968556%6ff215a7f9fd7ecd”}]}
答案 0 :(得分:1)
日志条目表示您的邮件已成功处理。但是对于带有效载荷选项的通知,您应该发送如下的JSON消息:
{
"to" : "<your-recipient-id>",
"notification" : {
"body" : "Hi, this is a test",
"title" : "My test"
}
}
请按照建议进行更改,如果有帮助请告诉我们。 您可以查看开发人员指南中的Messaging Concepts and Options - 该指南提供了一些有用的示例。
也许作为一个例子 - 这是你如何处理通知。
在您的应用onMessageReceived()
中,您可以使用notification
作为密钥检索通知有效内容来处理它。例如:
public void onMessageReceived(String from, Bundle data) {
String notificationJSONString = data.getString("notification");
//then you can parse the notificationJSONString into a JSON object
JSONObject notificationJSON = new JSONObject(notificationJSONString );
String body = notificationJSON.getString("body");
Log.d(TAG, "Notification Message is : " + body);
}