推送通知Jquery移动cordova应用程序android,重复ids

时间:2015-10-21 08:05:20

标签: php android mysql cordova push-notification

我正在使用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发送到数据库? 有什么想法吗?

2 个答案:

答案 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,你可以更新如果存在或插入,如果没有。我希望这有帮助。