无需登录即可安装应用程序时的 GCM 和规范 ID
Posted
技术标签:
【中文标题】无需登录即可安装应用程序时的 GCM 和规范 ID【英文标题】:GCM and canonical Ids when reinstalling the app witouth logout 【发布时间】:2015-04-03 11:38:52 【问题描述】:我已经在我的 android 应用中实现了推送通知。
现在,我遇到了著名的规范 id 问题。
如果我在没有注销的情况下卸载应用程序,因此没有从我的数据库中删除device_ids
,当我重新安装应用程序时,我会收到不适合新用户的通知。
Google 建议使用规范 id 来解决这个问题,但我不明白我必须在哪里拦截它并更改我的数据库中的 id。 我有这个发送通知的 php 页面:
$gcm=new GCM();
//get the array of all id associated to the user
$row= (query to get registration_ids from my database);
while($row = mysql_fetch_assoc($result))
array_push($registration_ids, $row['id_device']);
//create a message to send
$mymessage="my message";
$message=array("message"=>$mymessage);
//send the notification and take the result
$result_android=$gcm->send_notification($registration_ids,$message);
echo $result_android;
//class that send the notification
class GCM
function __construct()
public function send_notification($registatoin_ids,$message)
// GOOGLE API KEY
define("GOOGLE_API_KEY","xxxxxxxxxxxxxxxxx");
$url="https://android.googleapis.com/gcm/send";
$fields=array(
"registration_ids"=>$registatoin_ids,
"data"=>$message,
);
var_dump($fields);
$headers=array(
"Authorization: key=".GOOGLE_API_KEY,
"Content-Type: application/json"
);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($fields));
$result=curl_exec($ch);
if($result===FALSE)
die("Curl failed: ".curl_error($ch));
curl_close($ch);
echo $result;
我应该在哪里获取canonical_ids
并将其插入到我的数据库中?服务器端还是客户端?我很困惑。
【问题讨论】:
在你的代码中加入一些 cmets 可以帮助其他人回答你的问题。使标题更像问题也会有所帮助。 对不起,我已经编辑了我的问题 查看 SO 帖子的答案,可能与您要查找的内容相关,此处包含大量信息。 ***.com/questions/27072824/…希望有帮助!! 感谢您的信息。然后我必须在服务器端获取规范 ID 并覆盖我在数据库中发出请求的旧 reg id?但是这样客户端总是最后一次收到一个错误的请求,对吗? 【参考方案1】:现在,当我向具有多个注册 ID 的设备发送推送通知时,发送请求的 php 页面的结果是这样的:
array(2) ["registration_ids"]=> array(1) [0]=> string(162) "XXXXXX(old reg id)XXXXXXX" ["data"]=> array(1) ["price"]=> string(24) "Hi, I’m a push notification!"
"multicast_id":7004172909649400096,"success":1,"failure":0,"canonical_ids":1,"results":["registration_id":" XXXXXX(canonical reg id)XXXXXXX ","message_id":"0:1428420202799897%73660ba9f9fd7ecd"]
我应该怎么做才能不发送错误的通知?
【讨论】:
【参考方案2】:您需要阅读此工作Example 来解决您的问题。基本上我们必须用现有的重复注册 id 更新规范 id。作为对 GCM 通知的响应,有一件事是相似的,即数组的位置有助于使用现有注册 id 更新规范 id 以避免重复消息。
【讨论】:
以上是关于无需登录即可安装应用程序时的 GCM 和规范 ID的主要内容,如果未能解决你的问题,请参考以下文章