我正在使用this push plugin进行Jquery(2.x),Jquery mobile(1.4.5)构建与cordova(5.1.1)针对Android设备。
该插件工作正常,我已设法通过php将用户的设备注册ID发送到我的服务器到mysql数据库。 此外,我还成功通过GCM Google服务向注册的身份证发送了通知。
我用来执行此操作的代码是:
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
var push = PushNotification.init({
"android": {
"senderID": "xxxxxxxxx"
},
"ios": {"alert": "true", "badge": "true", "sound": "true"},
"windows": {}
});
push.on('registration', function(data) {
console.log("registration event");
var gcm_regid = data.registrationId;
$.post('http://xxxxx.xxx/insert.php', {gcm_regid: gcm_regid});
return false;
});
并且insert.php是
<?php
$con = mysql_connect("localhost","gcm","password");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("gcm", $con);
$gcm_regid=$_POST['gcm_regid'];
$query=mysql_query("INSERT INTO gcm_users(gcm_regid) VALUES('$gcm_regid')");
if($query){
echo "Data for $gcm_regid inserted successfully!";
}
else{ echo "An error occurred!"; }
?>
我的SQL数据库具有以下结构:
id -> int(11) --> AUTO_INCREMENT
gcm_regid text
created_at --> timestamp -> CURRENT_TIMESTAMP
问题在于,只要用户在他的设备上启动应用程序,注册ID就会再次发送到mysql数据库,从而为同一个registrationId创建重复的条目。
如何防止这种情况发生?
如何阻止设备再次将ID发送到数据库? 有什么想法吗?
答案 0 :(得分:0)
我设法通过改变我的sql数据库来部分解决我自己的问题
到gcm_regid
- &gt; VARCHAR
并执行以下操作到我的数据库
ALTER IGNORE TABLE gcm_users
ADD UNIQUE INDEX idx_name (gcm_regid);
现在每次插入重复的gcm_regid
时,数据库都会自动拒绝它。
这显然不是最佳解决方案,但我希望有人有更好的方法......
答案 1 :(得分:0)
我也是通过保存device.uuid变量来实现的。所以这是一个独特的userid by device,你可以插入你的sql查询WHERE uuid = device.uuid,你可以更新如果存在或插入,如果没有。我希望这有帮助。