WP7 app development lessons learned: The battery level of a device affects the push notifications
Are your toast push notifications getting suppressed, even though previously they were working fine? This may be because of the battery level of the device. According to the MSDN documentation, notification may get suppressed if the channel hasn't been configured to accept a particular type of notification:
The push notification was received and dropped by the Push Notification Service. The Suppressed status can occur if the notification channel was configured to suppress push notifications for a particular push notification class.
This is quite hard description to understand. It gets more complicated after reading the description for suppressed notifications from the Push Notification Recipe:
Suppressed status can occur if the notification channel was configured to suppress push notifications for a particular push notification class, for example the application tile was not pined to the Start menu.
So even though the channel has been configured to accept live tile notifications (by calling channel.BindToShellTile), we may get suppressed notifications if the app has not been pinned to the menu.
But there is a third reason which will cause the notifications getting suppressed: The battery level of your device. The different battery levels and their effect to the notifications is available through the MSDN's article Power Management and Push Notifications for Windows Phone. Here's the summary from the article:
The battery capacity is critically low. No push notifications of any type will be sent to the device.
The battery capacity is low. Only raw notifications will be sent to the device.
The battery capacity is not low. All push notification types will be sent to the device.
From the notification's sender's perspective the low battery level looks identical to the situation where a live tile notification is sent but the app hasn't been pinned to the start menu. This is a good thing to remember before you start debugging or modify your previously-working code.