首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从GCM获得多个通知

从GCM获得多个通知
EN

Stack Overflow用户
提问于 2016-06-08 18:09:39
回答 4查看 891关注 0票数 28

我使用PHP一次在多个android设备上发送通知。所有注册is都是唯一的,以下是我发送的CURL请求。

$url='https://android.googleapis.com/gcm/send';
$headers = array(
                'Authorization: key=' . ANDROID_KEY,
                'Content-Type: application/json'
            );
$registration_ids = [];//with multiple registration ids
$notification = array(
                'registration_ids' => $registration_ids,
                'data'             => array('notification_id' => $data['notification_id'],
                                            'title'           => $data['title'],
                                            'message'         => $data['message'])
            );
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notification));           
$res = curl_exec($ch);

在多次调试后,我找不到同一设备上有多个通知(超过10次)的任何原因。

有没有办法查看GCM收到的请求日志。任何线索都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2018-04-19 21:02:48

我认为问题出在我的android实现上。该设备被多次注册。

GCM为设备返回相同的注册id,直到下一次重新安装。在某些情况下,当注册id过期/无效时,GCM会返回一个新的id。

在推送时,GCM将返回过期/无效令牌的规范注册id。

解决方案是读取响应并用db中的新注册id更新旧注册id。

票数 1
EN

Stack Overflow用户

发布于 2017-01-27 17:18:45

在代码末尾添加

echo json_encode($res);

并查看CGM的结果。也许你可以在那里看到结果,如果它仍然是一个问题,粘贴在这里。

票数 0
EN

Stack Overflow用户

发布于 2017-09-29 00:21:55

GCM在其中有一些问题。这就是谷歌推出Firebase Cloud Messaging (FCM)的原因。请查看here提供的文档。

下面是我在项目中使用的示例代码。使用您的Android设备id和FCM服务器密钥对其进行测试。

$data = array(
    'to' => 'XXXXXXXXXXXdevice_idXXXXX',
    "priority" => "high",
    'data' => [
        'title' => 'Test Title',
        'body' => 'Test Body',
    ]
);

$headers = array(
    "Content-Type:application/json"
);

$headers[] = "Authorization:key=XXXXXXSERVER KEYXXXXXXXXXX";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://fcm.googleapis.com/fcm/send");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_TIMEOUT, 5 );
curl_setopt($ch, CURLOPT_HEADER, false);
//curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
$result = curl_exec($ch);

curl_close($ch);

如果您打印$result variable,您将得到如下的响应。它将告诉您是否发送了您的通知。

{"multicast_id":6375780930000000095,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:139000000000000cd617fcf9fd7ecd"}]} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37699504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档