2012-12-19 22 views
9

Bazı android cihazlara bir push güncellemesi göndermeye çalışıyorum. Bazılarının ortalama zamanda yeni bir kimliği var, bu yüzden Google bana kanonik kimlikleri olduğunu söyledi. belgelerine okudum: registration_id ayarlanırsa,android GCM, kanonik kimliğinin orijinal kimliğini alır

  • sunucu veritabanında yeni bir değer (kanonik ID) ile orijinal kimliğini değiştirin: message_id ayarlanırsa

    , registration_id kontrol edin. Orijinal kimliğin sonucun bir parçası olmadığını unutmayın, bu nedenle isteğinize geçirilen registration_ids listesinden (aynı dizini kullanarak) edinmeniz gerekir.

Bir bölüm eksik mi, yoksa Google'a 1'den fazla kayıt kimliği gönderirseniz bu belirsiz midir?

Benim istek (okunabilirlik için değiştirilen kimlikleri):

"{"data":{"favorite":1},"registration_ids":["1","2","3","4","5","6"]}" 

Google'dan yanıttır: Bundan

{ 
    "multicast_id":7917175795873320166, 
    "success":6, 
    "failure":0, 
    "canonical_ids":4, 
    "results":[ 
    {"registration_id":"3","message_id":"m1"}, 
    {"message_id":"m1"}, 
    {"message_id":"m1"}, 
    {"registration_id":"3","message_id":"m1"}, 
    {"registration_id":"3","message_id":"m1"}, 
    {"registration_id":"3","message_id":"m1"} 
] 
} 

, ben kimliği 3 doğru olduğunu biliyorum, ama hangi orijinal kimlikleri yapayım 3 ile değiştirin? Her kayıtlı kimlik için her mesajı göndermek bir atık olacaktır. Bir Java sunucusu için çözdüğüm Stackoverflow (GCM and id handling) üzerinde bir gönderi okudum, ancak benim (RoR) değil.

Bu sorunun nasıl çözüleceği hakkında bir fikriniz var mı?

cevap

15

Bağlandığınız yayında açıklandığı gibi, bunların tümü yanıt listesindeki konuma dayanır. Böylece, kural kimliğini aldığınızda, orijinal kayıt kimliğini "gönderim listenizi" aynı konumda güncellemeniz gerekir. senin "listesi gönder" burada

[0] {"registration_id":"3","message_id":"m1"}, 
[1] {"message_id":"m1"}, 
[2] {"message_id":"m1"}, 
[3] {"registration_id":"3","message_id":"m1"}, 
[4] {"registration_id":"3","message_id":"m1"}, 
[5] {"registration_id":"3","message_id":"m1"} 

Ve: burada örnekte Yani

kanonik (0, 3, 4, 5) 4 tanesi sonuçlarıdır

[0] "1", 
[1] "2", 
[2] "3", 
[3] "4", 
[4] "5", 
[5] "6" 

Sonuçlara göre, kayıt kimliğini 0, 3, 4, 5 konumunda 3 kimliğine güncellemeniz gerekir. Bu, aşağıdaki gibi bir kayıt listesiyle sona ereceğiniz anlamına gelir:

[0] "3", 
[1] "2", 
[2] "3", 
[3] "3", 
[4] "3", 
[5] "3" 

Ve nihayet:

Ayrıca
[0] "3", 
[1] "2", 

bkz: https://developer.android.com/google/gcm/adv.html#canonical ve https://developer.android.com/google/gcm/gcm.html#response

+0

Ah, sadece hesaba "message_id" içerdiği girdileri almadı, bu yüzden bir 4 girişli tepkisini düşündüğünü benim 6 girişli istek. İlk listeniz benim için yaptı. Teşekkürler. – Jos

+3

İlk gönderilmeden önce doğru "registration_id" nasıl filtrelenir? Aksi halde, ilk durumda sunucu hala üç kopyalanmış mesajlar gönderir ve yalnızca sunucu yanıtı aldıktan sonra çiftleri temizler. – iBog

İlgili konular