APNS cihaz belirteci, oluşturulduktan sonra hiç değişiyor mu?


99

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?


Emin Gördüğünüz olun bu cevabı o 4 yerlere belgeler sağlar olarak nerede aygıt simgesi değişiklikler
Bal

Yanıtlar:


71

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.


Mevcut dokümanlar son cümleyi attı. O (başka SO soru, göründüğü stackoverflow.com/questions/2751481/... geri veriler) olacak onlar yeni yüklenen işletim verileri geri yüklemek için takip edilmedikçe (sıfırlanacak APN belirteçleri ama bu işletim sistemi Yükleme işlemlerini ve "mendil" korumak sistemi).
Robert Altman

1
@RobertAltman - Tüm hikayenin bu olduğunu sanmıyorum. Veritabanımızda tamamen aynı APNS jetonuna sahip tamamen farklı cihazlardan çok sayıda kayıt gördüm . Şu anda önümde bir iPad 2 ve bize aynı jetonu gönderen bir iPhone 3GS görüyorum. Bu davranışı başka biri doğrulayabilir mi?
DougW

@DougW, bu garip. Hala benzer bir sorun var mı? Bağlantıyı düzenledi ve en son dokümanlardan yayınlandı.
iosCurator

139

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.


Güncelleme (Haziran 2012):

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ı:

  1. İPhone4'te yüklü olan iOS4 ile başlayın; iTunes'daki yedekleme cihazı

  2. İOS5'e yükseltin
    Önceki bir testten, APN jetonunun artık farklı olduğunu biliyorum

  3. Yedeği cihaza geri yükleyin
    APN belirteci artık 1. adımla aynıdır.

  4. İOS'u sıfırla (cihazı temizle)
    APN Token değişiklikleri

  5. 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.

  6. Cihaza "doğru" yedeklemeyi geri yükleyin.
    APN belirteci artık 1. adımla aynıdır.

  7. 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.


Güncelleme (Ağustos 2012)

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.]


Bu, jetonu bir kullanıcıyı benzersiz bir şekilde tanımlamanın bir yolu olarak kullanabileceğiniz anlamına mı geliyor? (Bu, kişinin 'oy kullanması' gereken uygulamalarda çok pratiktir?). Durumu hayal edebiliyorum: Kullanıcı oy veriyor ve uygulama bildirimler aracılığıyla rastgele bir sayıyla yanıt veriyor. Oylamayı geçerli kılmak için bu numaranın sunucuya yeniden gönderilmesi gerekir. Bu şekilde oylama kolayca hile yapılamaz.
Toad

ayrıca ilginç: jeton, uygulamayı silerken ve yeniden yüklerken değişir mi? Veya bu 'yedeği geri yükleme' seçeneğine benzer
Toad

@Toad Bir uygulamanın kaldırılması ve yeniden yüklenmesi sonucunda belirteç değişmeyecektir.
Robert Altman

@Toad Bunun iyi bir kullanıcı tanımlama şekli olacağını düşünmezdim; jeton, cihaz başına (ve uygulama başına) benzersiz olduğundan, birden çok cihazı olan bir kullanıcının birden fazla jetonu olacaktır.
Robert Altman

1
Sertifikalar ile cihaz belirteci arasındaki ilişkiyi merak ediyorum. .p12 sertifikasının süresi dolarsa, yeni sertifikayı değiştirmeniz gerekir. Bir referans buldum "Yeni bir cihaz jetonuna ihtiyaç duyulduğunda, APN'ler cihazın sertifikasında bulunan bilgileri kullanarak bir tane oluşturur." Öyleyse, sertifikaları değiştirirken cihaz simgesinin yenilenme olasılığı yok mu?
illusionJJ


22

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:

  1. Cihazın yerel depolamasını güncelleyin (muhtemelen güncelleme dahil nil)
  2. Yeni jetonun farkında olmak için jetonu kullanan cihazdaki her şeyi güncelleyin
  3. Bu jetonun farkında olan tüm API'leri yeni jetonla güncelleyin.

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_tokenve ' yi iletmeniz gerekir new_token.

Ergo, genel olarak bir "cihaz jetonunu" kabul eden API'lerin% 100'ünün UPDATEbu 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ı.


kulağa hoş geliyor ama uygulamamı kaldırıp yeniden yükledim nedir? bu senaryoda yerel depolama alanına kaydettiğim cihaz jetonu silinecek
Kuf

@ Kuf, bu soruya bir cevap aldın mı? Bende de aynısı var - uygulama kaldırılsa / yeniden kurulsa bile, sistem belirtecini nasıl karşılaştırırız?
nkirkes

@nkirkes bakın bu soruyu daha fazla ayrıntı için
Kuf

Bahsettiğiniz üç "Güncelleme" noktası, iOS'un mu, SDK'nın mı yoksa kendimizin mi sorumlulukları?
somenickname

7

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.


2
URL öldü! Lütfen düzeltin.
Ramis


4

Sanırım kimse aradıktan sonra jetonun değiştiğinden bahsetmeye değer unregisterForRemoteNotifications. Bir registerForRemoteNotificationsdahaki 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


3

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.


Haklısınız: jetonun kalıcı olduğunu varsayamazsınız; APN belgelerinde tanımlanan angajman kurallarına uyun. Aslında, Apple geliştiricileri bana token'ın sonunda değişeceğini söyledi (2 yıl gibi bir süre sonra).
Robert Altman

1
Eski bir tartışmayı yeniden canlandırmak, ancak birisi bunu faydalı bulabilir: Bu hafta kendi kendine barındırılan bir Parse sunucusunda çalışarak biraz zaman geçirdim ve test sorunları yaşıyorum - geliştirici uygulamamı her yenilediğimde (bir UX değişikliklerinin sayısı), token kimliği her yazılım kurulumunda değişti ... yani bu çok eğlenceli değil mi? (iç çekiş)
ChrisH

3

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.


2

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.

Bu kılavuzdan


0

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.


0

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.


0

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.


0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.