我使用推送通知并存储设备令牌,就像我假设其他人一样。首先,我将它们转换为我的应用程序的字符串:
NSString *deviceTokenString = [[[token description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""];
然后我把它们放到我的服务器上,ActiveRecord 将它们存储在一个character varying(255)
列中:
Device.where(:token => device_token, :username => username).first_or_create!(:model => model)
我有一个验证可以确保没有两个令牌是相同的,我理解应该总是这样:
class Device < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :token
end
但是,我已经开始看到令牌唯一性的验证错误:
ActiveRecord::RecordInvalid: Validation failed: Token has already been taken
psql 中的手动查询确认设备正在尝试使用已在不同用户下的表中的令牌进行注册。这不应该是不可能的吗?我转换令牌的方式是否会截断它们?我检查了问题第一次出现时我能找到的每个代码示例,每个人似乎都使用我在第一个代码示例中列出的方法。