6

'a bırakılan bildirimleri belirleme Azure Bildirim Hub'ları aracılığıyla iOS ve Android cihazlarına push bildirimlerinin başarılı bir şekilde uygulanması sağlanmıştır. Sorun, bazı iOS aygıtlarının Azure Notification Hubs tarafından gönderilen bildirimleri hiçbir zaman almadığı yönündedir.Azure Bildirim Hub'dan APNS

İletileri uygun aygıtlara yönlendirmek için şablonlar ve etiketler kullanıyoruz. Etiketler ilgi alanıdır ve asla kullanıcıya özgü değildir. Bu nedenle, bir etiketin o etikete abone olan tüm cihazlara aktarılması için bir bildirim bekleriz.

Android aygıtlar bildirimlerini hatasız şekilde alıyor ancak iOS aygıtları tutarlı değil. Çoğu çalışır. Bir çift yapmaz.

Push bildirimlerinin en iyi şekilde teslim edildiğini ve güvenilirlik garantisi vermediğinin bilincindeyiz, ancak sınırlı testlerimiz, tutarlı olmayan bir şekilde (yaklaşık bir düzine iki başarısızlıktan daha fazla) push bildirimleri almayan daha fazla aygıt ortaya çıkarmıştır. cihazlar).

var outcome = await hub.SendTemplateNotificationAsync(properties, tag); 

Biz emin olmak için GetAllRegistrationsAsync yöntemini kullandık: Biz Azure Bildirim Hub bağlanır ve Azure uyarılarını yollar sonunda geri basit bir C# rutini var

: Burada

düzmece kontrol ettiğimiz her cihazın başarıyla kaydedildiğini ve doğru şablonu kullandığını. Her cihaz kayıtlı, tüm şablonlar doğru.

"Test modu" nda değiliz; NotificationHubClient.CreateClientFromConnectionString'un enableTestSend parametresi yanlış olarak ayarlanır.

Sorun: biz bildirimi gönderdiğinizde

, çoğu cihazlar Test ettiğimiz belirli durumlarda bildirim ve almak, doğru sayı ile rozet sayacı güncelleyin. Ancak, birkaç aygıtın bildirimi almıyor gibi görünüyor. Cihazlardan biri cihazı yeniden başlattıktan sonra bildirimi aldı, ancak bundan sonra durdu.

Yukarıda belirtilen GetAllRegistrationsAsync yöntemini kullanarak, sorunlu aygıtların Azure'a doğru şekilde kaydedildiğini doğruladık ve doğru etiketlere ve şablonlara sahip olduklarını doğruladık.

Sorun aygıtlarının aygıt belirteçlerini Azure kayıtlarından belirledik. Cihazın belirteçlerini kullanarak sorunlu cihazlara bir bildirim göndermek için doğrudan APNS ile iletişim kuran bir PHP betiği kullandık. Her seferinde cihaz bu doğrudan gönderim bildirimini alır. Sadece Azure'dan güvenilmez olan bildirimler.Azure Bildirim Hub Monitör sayfasını incelediğimizde

, geçen 24 saat boyunca bu ölçümleri görmek:

  • 967 APNS Başarılı Bildirimler
  • 3 APNS Kötü Kanal Hataları
  • 2 APNS Doldu Kanal Hataları
  • 4 APNS hatalar

... ve ge içinde Azure APNS'ye için veya bildirilen başka bir hata neral. Gördüğümüz başarısızlık oranı 20'nin üzerinde bir hata üretmelidir.

Hatalardan hangi cihaz sembollerinin sorumlu olduğunu belirleyemedik; Bu bilgiyi Azure'dan almanın bir yolu var mı?

Neden APNS'nin kendisi üzerinden bildirimleri doğrudan bu cihazlara gönderebildiğimizi açıklamakta bir kayıp olamayız, ancak Azure üzerinden değil, neden Azure'un neden olduğundan daha fazla hata bildirmediğini açıklıyoruz.

Herhangi bir öneri veya anlayış?

cevap

5

Veritabanınızda sandbox cihaz belirteçlerine sahip olmanız oldukça olasıdır (aygıt sembollerinin sunucunuzda mı yoksa Azure Bildirim Hub'ında mı saklandığından emin değilim). Üretim itme ortamına bir sanal aygıt aygıt belirteci ile bildirim göndermeye çalışırken, bir InvalidToken hatası Apple tarafından döndürülür ve bağlantı kapatılır.

Çoğu zaman, Apple'ın APN sunucusuna push bildirimleri gönderen sunucu hata yanıtını aldığında, daha önce çok sayıda bildirim gönderdi (muhtemelen geçerli belirteçlerle) ve hepsi Apple tarafından atılır. Bu noktada, yeni bildirimler, yalnızca APNS ile yeni bir bağlantı kurulduktan sonra Apple tarafından kabul edilir, bu nedenle geçersiz bağlantıdan sonra eski bağlantıya gönderilen iletilerin yeniden gönderilmesi gerekir. Azure'un doğru şekilde yeniden gönderilmesini sağlaması mümkün değildir.

Dediğiniz gibi, Azure Bildirim Hub Monitörü sayfası birkaç hata gösteriyor. 3 APNS Bad Channel Errors'un geçersiz cihaz simgeleri anlamına geldiğinden şüpheleniyorum. DB'de gerçekte kaç tane geçersiz cihaz belirtebildiğini bilmiyorum, ancak bir tanesi bile Apple tarafından kabul edilmeyen geçerli belirteçlerle birçok bildirime neden olabilir.

En iyi çözüm, tüm aygıt tokenlerini DB'de sınamak ve geçersiz olanları bulmak ve silmek.

+0

Bu oldukça makul bir açıklama gibi görünüyor, ancak açıklamanız, doğrudan mesajın Azure'ın kullandığı aynı cihaz belirtecini kullanarak APNS aracılığıyla gönderilememesi gerektiği anlamına gelmez mi? Veya Apple, gönderen IP'ye (veya benzeri bir şeye) göre gelen mesajları seçerek reddedebilir mi? Alternatif olarak, bu geçersiz cihaz belirteçlerini Azure'dan çıkarmak için bir yol biliyor musunuz? (Kayıtları yapmıyoruz; cihazlar doğrudan Azure ile iletişim kurar.) –

+0

@AlanMcBee Doğrudan göndermeye çalıştığınız cihaz kodları geçerli olabilir, aksi takdirde çalışmazlar. Sorun muhtemelen farkında olmadığınız diğer cihaz belirteçlerinden kaynaklanmaktadır. Geçersiz jetonları Azure'dan nasıl kaldırabileceğinizi bilmiyorum. Azure ile hiç çalışmadım. Geliştirme oluşturmayı test ederken (sandbox push ortamı ile) Azure ile cihaz kaydettirdiniz mi? Bunlar en olası sorunlu cihaz belirteçleri. – Eran

+0

Muhtemelen test sırasında oluşturduğumuz üretim öncesi kayıtların tümünü kaydetmemeliydik, böylece herhangi bir sorun olmayacaktı. Ancak, üretim uygulamasının tamamı üretim sertifikasına sahip olduktan sonra, sorunlu aygıtların tümü, Azure ile belirteçlerini başarıyla kaydettirdi.Bireysel geçersiz cihaz jetonlarının sonunda kayıttan kaldırılmasını bekledim. Tek tek cihaz hatalarını takip etmeye yardımcı olmak için Microsoft ile açık bir destek biletimiz var. Bu ileti dizisini yayınlayacağım. –

İlgili konular