Mendiagnosis pemberitahuan yang dihentikan di Microsoft Azure Notification Hubs

Pertanyaan umum terkait Microsoft Azure Notification Hubs adalah cara memecahkan masalah saat pemberitahuan dari aplikasi tidak muncul di perangkat klien. Pelanggan ingin tahu letak masalah dan mengapa pemberitahuan dihentikan, dan bagaimana memperbaiki masalah tersebut. Artikel ini mengidentifikasi sejumlah alasan yang mungkin menyebabkan pemberitahuan dihentikan atau tidak diterima oleh perangkat. Artikel ini juga menjelaskan cara menentukan akar masalahnya.

Sangat penting untuk terlebih dahulu memahami cara Notification Hubs mendorong pemberitahuan ke perangkat.

Notification Hubs architecture

Dalam alur pemberitahuan kirim umum, pesan dikirim dari ujung belakang aplikasi ke Notification Hubs. Notification Hubs memproses semua pendaftaran. Notification Hubs memperhitungkan tag yang dikonfigurasi dan ekspresi tag untuk menentukan target. Target adalah pendaftaran yang perlu menerima pemberitahuan push. Pendaftaran ini dapat mencakup salah satu platform kami yang didukung: Android, Baidu (perangkat Android di Cina), Fire OS (Amazon) iOS, Windows, dan Windows Phone.

Dengan target yang ditetapkan, Notification Hubs mendorong pemberitahuan ke layanan pemberitahuan push untuk platform perangkat. Contohnya termasuk layanan Apple Push Notification (APN) untuk iOS dan macOS, serta Firebase Cloud Messaging (FCM) untuk perangkat Android. Notification Hubs mendorong pemberitahuan yang dibagi di beberapa batch pendaftaran. Notification Hubs mengautentikasi dengan layanan pemberitahuan push masing-masing, berdasarkan info masuk yang Anda tetapkan di portal Microsoft Azure, pada Konfigurasi Notification Hub. Layanan pemberitahuan push kemudian meneruskan pemberitahuan ke perangkat klien masing-masing.

Bagian terakhir dari pengiriman pemberitahuan adalah antara layanan pemberitahuan push platform dan perangkat. Pengiriman pemberitahuan dapat gagal pada salah satu dari empat tahap dalam proses pemberitahuan push (klien, aplikasi ujung belakang, Notification Hubs, dan layanan pemberitahuan push platform). Untuk informasi lebih lanjut tentang arsitektur Notification Hubs, lihat Gambaran umum Notification Hubs.

Kegagalan untuk mengirimkan pemberitahuan mungkin terjadi selama fase pengujian/penahapan awal. Pemberitahuan yang dihentikan pada tahap ini mungkin menunjukkan masalah konfigurasi. Jika kegagalan untuk mengirimkan pemberitahuan terjadi dalam produksi, beberapa atau semua pemberitahuan mungkin akan dihentikan. Masalah pola aplikasi atau pesan yang lebih mendalam ditunjukkan dalam kasus ini.

Bagian berikutnya melihat skenario di mana pemberitahuan mungkin dihentikan, mulai dari umum hingga jarang.

Kesalahan konfigurasi Notification Hubs

Untuk mengirim pemberitahuan ke layanan pemberitahuan push masing-masing, Notification Hubs harus mengautentikasi dirinya sendiri dalam konteks aplikasi Anda. Anda harus membuat akun pengembang dengan layanan pemberitahuan platform target (Microsoft, Apple, Google, dll.). Kemudian, Anda harus mendaftarkan aplikasi Anda dengan OS di mana Anda mendapatkan token atau kunci yang Anda gunakan untuk bekerja dengan PNS target.

Anda harus menambahkan info masuk platform ke portal Microsoft Azure. Jika tidak ada pemberitahuan yang mencapai perangkat, langkah pertama adalah memastikan bahwa info masuk yang benar telah dikonfigurasi di Notification Hubs. Info masuk harus sesuai dengan aplikasi yang dibuat pada akun pengembang khusus platform.

Untuk mengetahui instruksi langkah demi langkah guna menyelesaikan proses ini, lihat Mulai menggunakan Azure Notification Hubs.

Berikut adalah beberapa kesalahan konfigurasi umum untuk diperiksa:

Lokasi nama hub pemberitahuan

Pastikan bahwa nama hub pemberitahuan Anda (tanpa kesalahan ketik) sama di setiap lokasi berikut:

  • Tempat Anda mendaftar dari klien
  • Tempat Anda mengirim pemberitahuan dari ujung belakang
  • Tempat Anda mengonfigurasi info masuk layanan pemberitahuan push

Pastikan Anda menggunakan string konfigurasi tanda tangan akses bersama yang benar pada klien dan ujung belakang aplikasi. Umumnya, Anda harus menggunakan DefaultListenSharedAccessSignature pada klien dan DefaultFullSharedAccessSignature pada ujung belakang aplikasi. Proses ini memberi izin untuk mengirim pemberitahuan ke Notification Hubs.

Konfigurasi APN

Anda harus mempertahankan dua hub yang berbeda: satu untuk produksi dan satu lainnya untuk pengujian. Anda harus mengunggah sertifikat yang Anda gunakan di lingkungan kotak pasir ke hub terpisah dari sertifikat/hub yang akan Anda gunakan dalam produksi. Jangan mencoba mengunggah jenis sertifikat yang berbeda ke hub yang sama. Hal tersebut akan menyebabkan kegagalan pemberitahuan.

Jika Anda secara tidak sengaja mengunggah jenis sertifikat yang berbeda ke hub yang sama, Anda harus menghapus hub dan memulai dari awal dengan hub baru. Jika karena alasan tertentu Anda tidak dapat menghapus hub, Anda setidaknya harus menghapus semua pendaftaran yang ada dari hub.

Konfigurasi FCM

Catatan

Untuk informasi tentang langkah-langkah penghentian dan migrasi Firebase Cloud Messaging, lihat migrasi Google Firebase Cloud Messaging.

  1. Pastikan bahwa kunci server yang Anda peroleh dari Firebase cocok dengan kunci server yang Anda daftarkan di portal Microsoft Azure.

    Firebase server key

  2. Pastikan Anda telah mengonfigurasi ID Proyek pada klien. Anda bisa mendapatkan nilai untuk ID Proyek dari dasbor Firebase.

    Firebase Project ID

Masalah aplikasi

Tag dan ekspresi tag

Jika Anda menggunakan tag atau ekspresi tag untuk membagi peserta Anda, ada kemungkinan bahwa saat Anda mengirim pemberitahuan, tidak ada target yang ditemukan. Kesalahan ini didasarkan pada tag atau ekspresi tag yang ditentukan dalam panggilan kirim Anda.

Tinjau pendaftaran Anda untuk memastikan tag sudah sesuai ketika Anda mengirim pemberitahuan. Kemudian, verifikasi tanda terima pemberitahuan hanya dari klien yang memiliki pendaftaran tersebut.

Contohnya, misalkan semua pendaftaran Anda dengan Notification Hubs menggunakan tag "Politik". Jika Anda kemudian mengirim pemberitahuan dengan tag "Olahraga", notifikasi tidak akan dikirim ke perangkat apa pun. Kasus kompleks mungkin melibatkan ekspresi tag tempat Anda mendaftar dengan menggunakan "Tag A" atau "Tag B," tetapi Anda menargetkan "Tag A && Tag B." Bagian tips diagnosis mandiri nanti dalam artikel menunjukkan kepada Anda cara meninjau pendaftaran dan tag mereka.

Masalah templat

Jika Anda menggunakan templat, pastikan Anda mengikuti panduan yang dijelaskan dalam Templat.

Pendaftaran tidak sah

Jika hub pemberitahuan dikonfigurasi dengan benar dan tag atau ekspresi tag digunakan dengan benar, target yang valid akan ditemukan. Pemberitahuan harus dikirim ke target ini. Notification Hubs kemudian menjalankan beberapa batch pemrosesan secara paralel. Setiap batch mengirim pesan ke serangkaian pendaftaran.

Catatan

Karena Notification Hubs memproses batch secara paralel, urutan pengiriman pemberitahuan tidak dijamin.

Notification Hubs dioptimalkan untuk model pengiriman pesan "paling banyak". Kita mencoba deduplikasi, sehingga tidak ada pemberitahuan yang dikirimkan lebih dari sekali ke perangkat. Pendaftaran diperiksa untuk memastikan bahwa hanya satu pesan yang dikirim per pengidentifikasi perangkat sebelum dikirim ke layanan pemberitahuan push.

Setiap batch dikirim ke layanan pemberitahuan push, yang pada gilirannya menerima dan memvalidasi pendaftaran. Selama proses ini, ada kemungkinan bahwa layanan pemberitahuan push akan mendeteksi kesalahan dengan satu atau beberapa pendaftaran dalam batch. Layanan pemberitahuan push kemudian mengembalikan kesalahan ke Notification Hubs, dan proses akan berhenti. Layanan pemberitahuan push menghentikan batch tersebut sepenuhnya. Hal ini terutama berlaku dengan APN, yang menggunakan protokol aliran TCP.

Dalam hal ini, pendaftaran yang salah dihapus dari database. Kemudian, kita mencoba lagi pengiriman pemberitahuan untuk sisa perangkat pada batch tersebut.

Untuk mendapatkan informasi kesalahan lainnya tentang upaya pengiriman pendaftaran yang gagal, Anda dapat menggunakan REST API Notification Hubs Per Telemetri Pesan: Telemetri pesan Dapatkan Pemberitahuan dan umpan balik PNS. Untuk contoh kode, lihat contoh Kirim REST.

Masalah layanan pemberitahuan push

Setelah layanan pemberitahuan push menerima pemberitahuan, layanan pemberitahuan push mengirimkan pemberitahuan ke perangkat. Pada titik ini, Notification Hubs tidak memiliki kontrol atas pengiriman pemberitahuan ke perangkat.

Karena layanan pemberitahuan platform kuat, pemberitahuan cenderung menjangkau perangkat dalam beberapa detik. Jika layanan pemberitahuan push mengalami pelambatan, Notification Hubs menerapkan strategi back-off eksponensial. Jika layanan pemberitahuan push tetap tidak dapat dijangkau selama 30 menit, ada kebijakan yang berlaku untuk kedaluwarsa dan menghentikan pesan secara permanen.

Jika layanan pemberitahuan push mencoba mengirimkan pemberitahuan tetapi perangkat offline, pemberitahuan disimpan oleh layanan pemberitahuan push. Pemberitahuan disimpan hanya untuk jangka waktu terbatas. Pemberitahuan dikirimkan ke perangkat saat perangkat tersedia.

Setiap aplikasi hanya menyimpan satu pemberitahuan terbaru. Jika beberapa pemberitahuan dikirim saat perangkat offline, setiap pemberitahuan baru menyebabkan pemberitahuan terakhir dibuang. Hanya menyimpan pemberitahuan terbaru disebut penggabungan di APN dan runtuhan di FCM. (FCM menggunakan kunci runtuhan.) Saat perangkat tetap offline untuk waktu yang lama, pemberitahuan yang disimpan untuk perangkat akan dibuang. Untuk informasi lebih lanjut, lihat Gambaran Umum APN dan Tentang pesan FCM.

Dengan Notification Hubs, Anda dapat meneruskan kunci penggabungan melalui header HTTP dengan menggunakan API SendNotification generik. Misalnya, untuk .NET SDK, Anda akan menggunakan SendNotificationAsync. API SendNotification juga mengambil header HTTP yang diteruskan sebagaimana adanya ke layanan pemberitahuan push masing-masing.

Tips diagnosis mandiri

Berikut adalah jalur untuk mendiagnosis akar masalah pemberitahuan yang dihentikan di Notification Hubs.

Verifikasi info masuk

Portal pengembang layanan pemberitahuan push

Verifikasi info masuk di portal pengembang layanan pemberitahuan push masing-masing (APN, FCM, Layanan Pemberitahuan Windows, dan sebagainya). Untuk informasi lebih lanjut, lihat Tutorial: Mengirim pemberitahuan ke aplikasi Platform Windows Universal dengan menggunakan Azure Notification Hubs.

Portal Azure

Untuk meninjau dan mencocokkan info masuk dengan info masuk yang Anda peroleh dari portal pengembang layanan pemberitahuan push, buka tab Kebijakan Akses di portal Microsoft Azure.

Azure portal Access Policies

Verifikasi pendaftaran

Visual Studio

Di Visual Studio, Anda bisa menyambungkan ke Azure melalui Penjelajah Server untuk menampilkan dan mengelola beberapa layanan Azure, termasuk Notification Hubs. Pintasan ini terutama berguna untuk lingkungan pengembangan/pengujian Anda.

Visual Studio Server Explorer

Server Explorer

Anda dapat melihat dan mengelola semua pendaftaran di hub Anda. Pendaftaran dapat dikategorikan berdasarkan platform, pendaftaran asli atau templat, tag, pengidentifikasi layanan pemberitahuan push, ID pendaftaran, dan tanggal kedaluwarsa. Anda juga dapat mengedit pendaftaran di halaman ini. Fitur ini sangat berguna untuk mengedit tag.

Klik kanan hub pemberitahuan Anda di Penjelajah Server dan pilih Diagnosa.

Visual Studio Server Explorer: Diagnose menu

Anda akan melihat halaman berikut:

Visual Studio: Diagnose page

Beralih ke halaman Pendaftaran Perangkat:

Visual Studio: Device Registrations

Anda dapat menggunakan laman Pengiriman Uji untuk mengirim pesan pemberitahuan uji:

Visual Studio: Test Send

Catatan

Gunakan Visual Studio untuk mengedit pendaftaran hanya selama pengembangan/pengujian, dan dengan jumlah pendaftaran yang terbatas. Jika Anda perlu mengedit pendaftaran secara massal, pertimbangkan untuk menggunakan fungsi ekspor dan impor pendaftaran yang dijelaskan dalam Cara: Mengekspor dan Memodifikasi Pendaftaran secara Massal.

Azure Service Bus Explorer

Banyak pelanggan menggunakan Penjelajah Bus Layanan untuk melihat dan mengelola hub pemberitahuan mereka. Penjelajah Bus Layanan adalah proyek sumber terbuka.

Memverifikasi pemberitahuan pesan

Portal Azure

Untuk mengirim pemberitahuan uji ke klien Anda tanpa harus menjalankan dan menjalankan kembali layanan, pada SUPPORT + TROUBLESHOOTING, pilih Pengiriman Uji.

Test Send functionality in Azure

Visual Studio

Anda juga dapat mengirim pemberitahuan uji dari Visual Studio.

Test Send functionality in Visual Studio

Pemberitahuan debug gagal dan meninjau hasil pemberitahuan

Properti EnableTestSend

Saat Anda mengirim pemberitahuan melalui Notification Hubs, pemberitahuan tersebut awalnya diantrekan. Notification Hubs menentukan target yang benar, lalu mengirim pemberitahuan ke layanan pemberitahuan push. Jika Anda menggunakan REST API atau salah satu SDK klien, kembalinya panggilan kirim Anda hanya berarti bahwa pesan diantrekan dengan Notification Hubs. Hal ini tidak memberikan wawasan tentang apa yang terjadi ketika Notification Hubs akhirnya mengirim pemberitahuan ke layanan pemberitahuan push.

Jika pemberitahuan Anda tidak sampai di perangkat klien, kesalahan mungkin terjadi saat Notification Hubs mencoba mengirimkannya ke layanan pemberitahuan push. Misalnya, ukuran payload mungkin melebihi batas maksimum yang diizinkan oleh layanan pemberitahuan push, atau info masuk yang dikonfigurasi di Notification Hubs mungkin tidak valid.

Untuk mendapatkan wawasan tentang kesalahan layanan pemberitahuan push, Anda dapat menggunakan properti EnableTestSend. Properti ini diaktifkan secara otomatis saat Anda mengirim pesan uji dari portal atau klien Visual Studio. Anda dapat menggunakan properti ini untuk melihat informasi penelusuran kesalahan terperinci dan juga melalui API. Saat ini, Anda dapat menggunakannya di SDK .NET. Properti ini akan ditambahkan ke semua SDK klien pada akhirnya.

Untuk menggunakan properti EnableTestSend dengan panggilan REST, tambahkan parameter string kueri yang disebut uji pada akhir panggilan kirim Anda. Misalnya:

https://mynamespace.servicebus.windows.net/mynotificationhub/messages?api-version=2013-10&test

Contoh SDK .NET

Berikut adalah contoh penggunaan SDK .NET untuk mengirim pemberitahuan pop-up (toast) asli:

NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(connString, hubName);
var result = await hub.SendWindowsNativeNotificationAsync(toast);
Console.WriteLine(result.State);

Di akhir eksekusi, result.State cukup menyatakan Enqueued. Hasilnya tidak memberikan wawasan tentang apa yang terjadi pada pemberitahuan push Anda.

Selanjutnya, Anda dapat menggunakan properti Boolean EnableTestSend. Gunakan properti EnableTestSend saat Anda menginisialisasi NotificationHubClient untuk mendapatkan status terperinci tentang kesalahan layanan pemberitahuan push yang terjadi saat pemberitahuan dikirim. Panggilan kirim membutuhkan waktu tambahan untuk kembali karena pertama-tama membutuhkan Notification Hubs untuk mengirimkan pemberitahuan ke layanan pemberitahuan push.

    bool enableTestSend = true;
    NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(connString, hubName, enableTestSend);

    var outcome = await hub.SendWindowsNativeNotificationAsync(toast);
    Console.WriteLine(outcome.State);

    foreach (RegistrationResult result in outcome.Results)
    {
        Console.WriteLine(result.ApplicationPlatform + "\n" + result.RegistrationId + "\n" + result.Outcome);
    }

Sampel output

DetailedStateAvailable
windows
7619785862101227384-7840974832647865618-3
The Token obtained from the Token Provider is wrong

Pesan ini menunjukkan bahwa info masuk yang dikonfigurasi di Notification Hubs tidak valid atau ada masalah dengan pendaftaran di hub. Hapus pendaftaran ini dan biarkan klien membuat ulang pendaftaran sebelum mengirim pesan.

Catatan

Penggunaan properti EnableTestSend sangat dibatasi. Gunakan opsi ini hanya di lingkungan pengembangan/pengujian dan dengan set pendaftaran terbatas. Pemberitahuan debug hanya dikirim ke 10 perangkat. Ada juga batasan untuk memproses pengiriman debug, yaitu 10 per menit. Pemberitahuan debug juga dikecualikan dari SLA Azure Notification Hubs.

Meninjau telemetri

Portal Azure

Di portal, Anda bisa mendapatkan gambaran umum singkat tentang semua aktivitas di hub pemberitahuan Anda.

  1. Pada tab Gambaran Umum, Anda dapat melihat tampilan agregat pendaftaran, pemberitahuan, dan kesalahan berdasarkan platform.

    Notification Hubs overview dashboard

  2. Pada tab Log aktivitas , Anda dapat menambahkan metrik khusus platform lainnya untuk tampilan yang lebih dalam. Anda dapat melihat secara khusus kesalahan yang dikembalikan saat Notification Hubs mencoba mengirim pemberitahuan ke layanan pemberitahuan push.

    Azure portal activity log

  3. Pada tab Gambaran Umum , mulailah dengan meninjau Pesan Masuk, Operasi Pendaftaran, dan Pemberitahuan Yang Berhasil. Kemudian, buka tab per platform untuk meninjau kesalahan yang khusus untuk layanan pemberitahuan push tersebut.

  4. Jika pengaturan autentikasi untuk hub pemberitahuan Anda salah, pesan Kesalahan Autentikasi PNS akan muncul. Pesan ini adalah indikasi yang baik untuk memeriksa info masuk layanan pemberitahuan push.

Akses terprogram

Untuk mengetahui informasi tentang akses terprogram selengkapnya, lihat Akses terprogram.

Catatan

Beberapa fitur terkait telemetri, seperti mengekspor dan mengimpor pendaftaran dan akses telemetri melalui API, hanya tersedia pada tingkat layanan Standar. Jika Anda mencoba menggunakan fitur-fitur ini dari tingkat layanan Gratis atau Dasar, Anda akan mendapatkan pesan pengecualian jika Anda menggunakan SDK. Anda akan mendapatkan kesalahan HTTP 403 (Dilarang) jika Anda menggunakan fitur langsung dari API REST.

Untuk menggunakan fitur terkait telemetri, pertama-tama pastikan di portal Microsoft Azure bahwa Anda menggunakan tingkat layanan Standar.