Uso le notifiche push e memorizza i token dispositivo come presumo che facciano tutti gli altri. In primo luogo li trasformo in una stringa mia app:Collisione di token APNS, archiviata in Postgres
NSString *deviceTokenString = [[[token description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""];
Poi metterle al mio server, dove ActiveRecord li memorizza in una colonna character varying(255)
:
Device.where(:token => device_token, :username => username).first_or_create!(:model => model)
ho una convalida che garantisce l'assenza di due gettoni sono gli stessi, che capisco dovrebbe sempre essere il caso:
class Device < ActiveRecord::Base
belongs_to :user
validates_uniqueness_of :token
end
Tuttavia, ho iniziato a vedere la convalida errori di univocità gettone:
ActiveRecord::RecordInvalid: Validation failed: Token has already been taken
interrogazione manuale in psql conferma che un dispositivo sta tentando di registrarsi con un token già nella tabella sotto un altro utente. Questo non dovrebbe essere impossibile? Qualcosa nel modo in cui sto trasformando i token che li troncano? Ho controllato tutti gli esempi di codice che sono riuscito a trovare quando si è verificato il problema e tutti sembrano utilizzare il metodo che ho elencato nel primo esempio di codice.
suona più probabile che sia un bug applicazione in cui uno stato condiviso non è correttamente cancellata. Ma difficilmente sembra impossibile che APNS possa avere stranezze o comportamenti non specificati come "unico nel tempo quindi cicli". Vorrei provare a catturare i dati in arrivo non elaborati e la prossima volta che visualizzi un duplicato, guarda che cosa ha effettivamente inviato il cliente per verificare che sia quello che ti aspetti. –
Non riesco a catturare nulla sul client, ma ho salvato l'input per ogni duplicato e nulla sembra sbagliato. Stanno semplicemente inviando un identificatore che è già stato usato. – kevboh
È ora di parlare con il supporto Apple. Immagino, quindi, e seguo quassù quando (se) ascolterai qualcosa. Non trattenere il respiro. –