Android通知使用GCM和java使用json消息推送空

时间:2016-04-21 11:16:27

标签: java google-cloud-messaging

我很难将通知推送到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”}]}

1 个答案:

答案 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);
  }