Anlık bildirim cihaz belirteci oluşturulduktan sonra hiç değişiyor mu?
Örnek olduğunda, uygulama güncellenir? veya başka bir durumda değişebilir mi?
Yanıtlar:
Gönderen [Elma Belgeleme ApplePushService] 2
Bu jeton güveni aşamasının biçimi, yalnızca APN'lerin daha sonra onurlandıracağı jetonu oluşturmasını sağlar ve bir cihaz tarafından kendisine verilen jetonun, daha önce söz konusu cihaz için sağlanmış olan jetonla aynı olduğundan ve yalnızca bu cihaz için.
Kullanıcı, yedekleme verilerini yeni bir cihaza geri yüklerse veya işletim sistemini yeniden yüklerse, cihaz simgesi değişir.
Apple'ın resmi belgeleri bu noktada net değil. Gözlemlediğim şey şudur: Belirteç, belirli bir cihaz, uygulama ve etki alanı için değişmez (üretime karşı korumalı alan). Sistemin güvenilir bir şekilde çalışması için bunun doğru kalması gerektiğine inanıyorum. Bir uygulama güncellemesinin yeni bir APN belirtecini tetiklediği durumu düşünün; Bildirimler etkinleştirilmiş en yeni Twitter benzeri uygulamayı kullanıyor olsaydım, uygulamamı iTunes'dan güncellediğimde ne olur? Güncellemeyi cihazımla "senkronize ettiğim" için uygulamaları çalıştırmamış olsam bile bildirimlerin gönderilmeye devam edeceğini ummalı mıyım? Güncellenen uygulamayı çalıştırmamış olsanız bile işletim sistemi sizin adınıza bildirim alabileceğinden, uygulamayı değiştirme eylemi APN sistemini etkileyemez.
Açık olmak gerekirse, Apple "Bir uygulama her başlatıldığında [APN sunucularına] kaydolmalı ve sağlayıcısına mevcut belirteci vermelidir" diyor. Tüm kalbimle katılıyorum; bunu yapmak, uygulamanızı kötü varsayımlardan veya olağandışı durumlardan koruyacaktır.
Tek bir cihaz için tüm uygulamalarda anlık bildirim belirteçleri benzersiz midir? cihaz simgelerinin "işletim sistemi yüklemesi" başına benzersiz olduğunu belirtir; ve yedeklemeden bir cihaza geri yüklemenin jetonu koruyacağını, ancak bir cihazı silmenin yeni bir jeton almasına neden olacağı. Bu, Apple'ın sorunsuz çalışma ve gizlilik niyetleriyle tamamen tutarlı olacaktır: bir cihazı silmek, belki de yeni bir ilişkilendirmeyi garanti edecek kadar ciddidir, ancak bir işletim sistemi güncellemesinden sonra bir görüntüyü geri yükleyen bir kullanıcı, mevcut bildirimlerini korumak isteyecektir. İPad'imdeki en son iOS5 güncellemesini hatırlarsam, yükseltmeden sonra en son yedeği geri yükledim, böylece bu, bildirim simgemin tutarlılığını koruyacaktı. [Düzenleme: bir yedeği farklı bir cihaz jetonu Çoğaltmayacaktır.]
uyarı: Konuyla ilgili kesin bilgim yok, sadece APN ile çalışırken bazı makul deneyimlerim (üçüncü taraf geliştirici olarak). Her zaman olduğu gibi, varsayımlarınızı doğrulamak en iyisidir.
Yakın zamanda a> Apple mühendisleriyle konuşma ve b> bazı gerçek dünya testleri yapma şansım oldu ve sonuçları sunmak istedim:
Tamamlamak gerekirse, bir APN belirteci iade etmekten bahsettiğimde, tek bir paket tanımlayıcısının / uygulamanın bağlamını varsayıyorum.
İlk olarak Apple mühendisleri, iki cihazın aynı APN'yi döndürmesinin mümkün olmaması gerektiğini söyledi. Aşağıdaki yorumlara rağmen, bunun başarısız olduğu bir durumu belirleyemedim.
İkinci olarak, yükseltme test dizisi ve sonuçları:
İPhone4'te yüklü olan iOS4 ile başlayın; iTunes'daki yedekleme cihazı
İOS5'e yükseltin
Önceki bir testten, APN jetonunun artık farklı olduğunu biliyorum
Yedeği cihaza geri yükleyin
APN belirteci artık 1. adımla aynıdır.
İOS'u sıfırla (cihazı temizle)
APN Token değişiklikleri
Farklı bir telefonu iTunes'a yedekleyin ve bu yedeklemeyi cihazı test etmek için geri yükleyin; temelde, sanki telefonları değiştiriyormuşum gibi "yanlış" yedeği geri yüklüyorum.
APN belirteci yeniden değişir; ayrıca farklıdır ve jetonlarla orijinal jeton veya "klonlanmış" jetonla eşleşmez.
Cihaza "doğru" yedeklemeyi geri yükleyin.
APN belirteci artık 1. adımla aynıdır.
Son olarak, telefonu iOS6'ya (beta2) yükselttim, yedeklememi geri yükledim ve yeniden test ettim. Beklendiği gibi, jeton 1. adımdaki jetonla eşleşmeye devam etti.
Bu noktada, APN belirteçlerinin farklı cihazlar arasında kopyalanamayacağından oldukça eminim; belki de bu, iOS'un önceki sürümlerinde bir hata olarak gerçekleşmiş olabilir, ancak iOS5'in (ve muhtemelen iOS6) APN belirteçlerini doğru şekilde işlediğinden eminim.
Cihaz belirteçleri: Sadece bu eklenmez fark etti olacaktır değiştirin. Benimle paylaşılan Apple geliştiricilerinden biri tokenlerin aslında süresinin dolduğunu (sanırım 2 yıl sonra). Birçok amaç için, bu, değişmez olarak düşünülebilecek kadar uzundur.
[Test komut dosyalarımı her iki yılda bir, özellikle her yıl telefonları değiştirdiğim için, yeni belirteçlerle güncellemem gerekip gerekmediğini merak etmiyorum.]
Bir uygulamayı yeniden yüklersem iOS9 ve APN Push token değişiklikleri ile test ettim .
EVET , cihaz simgeleri değişebilir.
Uygulamanız bir jeton aldığında onu saklamalıdır. Yeni bir belirteç alındığında her Ardından (ki olacak farklıysa durumunda ne, sonuçta), saklanan belirteç yeni belirteç karşılaştırmak ve:
nil
)Pratik bir mesele olarak, son adım büyük ihtimalle önemsiz olmayacaktır. Örneğin, cihazın hangi posta koduna abone olduğuna bağlı olarak bir cihaz belirtecine hava durumu uyarıları gönderen bir hizmetiniz varsa, teslimatı güncelleyebilmesi için söz konusu hizmete old_token
ve ' yi iletmeniz gerekir new_token
.
Ergo, genel olarak bir "cihaz jetonunu" kabul eden API'lerin% 100'ünün UPDATE
bu jeton için bir tür tesise sahip olması gerekir . To değil bunun için inşa olduğunu için yanlış teslimi ve non-teslim bildirimleri için yapı.
Cihaz jetonu, iOS 8 ve sonraki sürümlerden değişiyor
Lütfen Apple web sitesinden aşağıdaki metne bakın. Kullanıcı Bildirimlerini Kaydetme, Planlama ve İşleme
Cihaz jetonu, belirli bir cihazdaki uygulamanıza push bildirimleri göndermenin anahtarıdır. Cihaz jetonları değişebilir, bu nedenle uygulamanızın her başlatıldığında yeniden kaydolması ve alınan jetonu sunucunuza geri göndermesi gerekir. Cihaz jetonunu güncelleyemezseniz, uzaktan bildirimler kullanıcının cihazına gitmeyebilir. Aygıt belirteçleri, kullanıcı yedekleme verilerini yeni bir cihaza veya bilgisayara geri yüklediğinde veya işletim sistemini yeniden yüklediğinde her zaman değişir. Verileri yeni bir cihaza veya bilgisayara taşırken, kullanıcının bu cihaza uzaktan bildirim gönderilebilmesi için önce uygulamanızı bir kez başlatması gerekir.
Sanırım kimse aradıktan sonra jetonun değiştiğinden bahsetmeye değer unregisterForRemoteNotifications
. Bir registerForRemoteNotifications
dahaki sefere aradığınızda jeton farklıdır. Apple belgelerinde bunun teyidini bulamadım ama böyle bir davranışa şahit oldum. Lütfen bunu aklınızda bulundurun
Uygulamanız yeni bir cihaza geri yüklenmediği sürece değişmemelidir (bu noktada push bildirimlerini tekrar kabul etmesi istenmez ve yeni jetonu kabul etmeniz gereken kayıtlı aramayı size gönderir).
Ancak Apple asla değişmeyeceğini garanti etmez (bu nedenle belgeler bundan hiç bahsetmez). En kötüsünü daha iyi programlayın ve bir gün değişebileceğini varsayın. Ayrıca, sunucunuza düzenli olarak bir belirteç göndermek, bir süredir kayıtlı olmayan ve muhtemelen uygulamanızı kaldırmış veya ilgisini bir süre önce kaybetmiş (ve belgelerde bunu istenen davranış olarak belirtmiş!) Belirteçleri kaldırmanıza olanak tanır.
Kaynak - Apple Docs
APN'ler, çeşitli nedenlerle yeni bir cihaz belirteci verebilir:
Kullanıcı, uygulamanızı yeni bir cihaza yükler
Kullanıcı cihazı bir yedekten geri yükler
Kullanıcı işletim sistemini yeniden yükler
Diğer sistem tanımlı olaylar
Sonuç olarak, uygulamalar başlatma sırasında cihaz jetonunu istemelidir.
Bunlara ek olarak:
ÖNEMLİ
APN'ler cihaz belirteçleri değişken uzunluktadır. Boyutlarını sabit kodlamayın.
Apple ile bağlantılar hızla geçerliliğini yitirir! bu yüzden şimdi oldukça net görünen şeyi alıntılıyorum:
Uygulamanızda cihaz belirteçlerini asla önbelleğe almayın; bunun yerine, ihtiyaç duyduğunuzda sistemden alın. APN'ler, belirli etkinlikler gerçekleştiğinde uygulamanıza yeni bir cihaz jetonu verir. Cihaz jetonunun farklı olacağı garanti edilir; örneğin, bir kullanıcı bir cihazı yedekten geri yüklediğinde, kullanıcı uygulamanızı yeni bir cihaza yüklediğinde ve kullanıcı işletim sistemini yeniden yüklediğinde. Önbelleğe güvenmek yerine jetonu almak, sağlayıcınızın APN'lerle iletişim kurması için gereken mevcut cihaz jetonuna sahip olmanızı sağlar. Bir cihaz jetonunu almaya çalıştığınızda ancak değişmediğinde, getirme yöntemi hızlı bir şekilde geri döner.
Apple push bildirim öğelerine referans olarak
Cihaz jetonu, belirli bir cihazdaki uygulamanıza push bildirimleri göndermenin anahtarıdır. Cihaz jetonları değişebilir, bu nedenle uygulamanızın her başlatıldığında yeniden kaydolması ve alınan jetonu sunucunuza geri göndermesi gerekir. Cihaz jetonunu güncelleyemezseniz, uzaktan bildirimler kullanıcının cihazına gitmeyebilir. Aygıt belirteçleri, kullanıcı yedekleme verilerini yeni bir cihaza veya bilgisayara geri yüklediğinde veya işletim sistemini yeniden yüklediğinde her zaman değişir. Verileri yeni bir cihaza veya bilgisayara taşırken, kullanıcının bu cihaza uzaktan bildirim gönderilebilmesi için önce uygulamanızı bir kez başlatması gerekir.
Bir aygıt belirtecini asla önbelleğe almayın; jetonu her zaman ihtiyaç duyduğunuzda sistemden alın. Uygulamanız daha önce uzaktan bildirimler için kaydolduysa, registerForRemoteNotifications yöntemini tekrar çağırmak herhangi bir ek yüke neden olmaz ve iOS mevcut cihaz jetonunu uygulama temsilcinize hemen iade eder. Ek olarak iOS, yalnızca uygulamanızın kaydedilmesine veya yeniden kaydolmanıza yanıt olarak değil, cihaz belirteci her değiştiğinde temsilci yönteminizi çağırır.
Bu bağlantıya göre cihaz belirteci
Her talepte bulunan cihaz belirteci, bildirimi alan cihazın kimliğini temsil eder. APN'ler, her bir benzersiz uygulamayı ve cihaz kombinasyonunu tanımlamak için cihaz belirteçlerini kullanır. Ayrıca, bir cihaza gönderilen uzak bildirimlerin yönlendirmesini doğrulamak için bunları kullanır. Uygulamanız bir cihazda her çalıştığında, bu jetonu APN'lerden alır ve sağlayıcınıza iletir. Sağlayıcınız jetonu depolar ve söz konusu uygulama ve cihaza bildirim gönderirken kullanır. Belirtecin kendisi opak ve kalıcıdır, yalnızca bir aygıtın verileri ve ayarları silindiğinde değişir. Yalnızca APN'ler bir cihaz kodunu çözebilir ve okuyabilir.
Evet değişebilir. İdeal olarak geri arama yöntemi aracılığıyla bir belirteç aldığımızda
- (void) uygulama: (UIApplication *) uygulama didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken
Uygulama, uzak sunucuda belirteci kaydetmeli / yenilemelidir. Bu, APNS ve sunucunuzdaki jetonun senkronize olmasını sağlayacaktır.
Gereğince Elma belgeleri ,
Uygulamaya özgü bir cihaz jetonunun edinilmesi ve kullanılması şu şekilde çalışır:
Uygulamanız uzak bildirimler için APN'lere kaydolur Yeni bir cihaz belirteci gerektiğinde, APN'ler, aygıtın sertifikasında bulunan bilgileri kullanarak bir tane oluşturur. Belirteci bir belirteç anahtarı kullanarak şifreler ve ortadaki sağ okta gösterildiği gibi aygıta geri döndürür. Sistem, uygulamanızı çağırarak cihaz belirtecini uygulamanıza geri gönderir: didRegisterForRemoteNotificationsWithDeviceToken: delegate yöntemi. Jetonu aldıktan sonra, uygulamanız (temsilci yöntemi içinde) bunu sağlayıcınıza ikili veya onaltılık biçimde iletmelidir. Sağlayıcınız bu belirteç olmadan cihaza bildirim gönderemez. Ayrıntılar için, Uzaktan Bildirim Desteğini Yapılandırma bölümünde Uzaktan Bildirimleri Almak için Kaydolma konusuna bakın.
Uygulamanın kurulumundaki cihaz belirteci geçişi.
Bu , uygulamayı yeniden yüklerseniz değişeceği anlamına gelir ; bir yedeklemeden, iOS yükseltme vb. yaparsanız sorun olmaz.
Herhangi bir problemden kaçınmak için onu kullanmanın doğru yolu NSPAppDelegate
, yöntemde her uygulama başlatıldığında verileni almaktır.didRegisterForRemoteNotificationsWithDeviceToken