正如你们许多人所知,为了在我的应用程序中支持推送通知,我需要在MySQL中存储两件事:
我分别得到:
let device = UIDevice.currentDevice().identifierForVendor!.UUIDString
let deviceTokenString: String = ( deviceToken.description as NSString ).stringByTrimmingCharactersInSet( characterSet ).stringByReplacingOccurrencesOfString( " ", withString: "" ) as String
总而如您所知,每次启动应用程序时,它都会尝试注册到适当的MySQL表推送通知,但如果它已经存在(其设备ID已经存在),则新注册将被丢弃。无论如何,我刚刚理解(正如解释here)每次在我的iPhone中重新安装新版本的应用程序时设备ID都会更改。风险是用太多无用的条目填充表格。有没有办法保持相同的设备ID?或者,处理这个问题最聪明的方法是什么?
答案 0 :(得分:1)
iOS项目代码没有可用的设备标识符。 删除“死亡”的唯一可能性。推送令牌是检查推送令牌是否仍然有效。发送推送时,这是合理的。如果它无效,那么从你的Mysql表中删除它。 看看这个SO Question and answer。 从Apple可能会对那些向死亡令牌发送大量推送请求的开发人员实施制裁的角度来验证推送令牌也很重要。
答案 1 :(得分:0)
推送通知适用于两件事:一个是设备ID(设备/用户的标识符,主要由应用程序的所有者实现),另一个是GCM令牌(由GCMM服务器为每个生成和维护)安装)。
设备ID可以是您用来识别用户/设备等的任何标识符,设备令牌由Google服务器生成,每次安装该应用时都会重新生成。
现在假设您的手机中安装了应用程序,因此在您的MySql数据库中将包含包含您的deviceId和GCM令牌的1行,GCM将按此工作。
现在假设您重新安装应用程序,因此会生成新令牌,但设备标识符相同。因此,在您的服务器端代码中,您需要检查表中是否存在设备ID,如果存在,则比较新令牌和旧令牌,如果它们相同,则不执行任何操作。如果它们不同,请用新的令牌替换旧令牌。如果设备ID不存在,则应插入。这样就不会有不必要的条目了。
这是我从你的问题中可以理解的。希望这会有所帮助。