我想检查我的推送通知实现是否正确。
每次我打开我的应用程序(实际上我只在特定页面上注册推送通道,所以每次我从该页面来回移动)都会创建一个新的推送通道URI,我存储在我的移动服务数据库中发送推送通知。这对我来说似乎不正确,因为每次打开app / page时都会生成一个新的推送通道URI,因此对于使用我的应用程序的每个设备,通道URI列表只会增长和增长。我假设你创建一个推送通道,存储通道URI并根据需要推送到它。我会在这里注意到我正在使用原始推送通知。
据我所知,推送频道每隔一段时间就会过期,但对我而言,每次我退出应用程序/页面时都会发生这种情况,因此当调用onNavigateTo时,我会找到确实存在的推送频道和新频道始终创建URI。它是否正确?
我的代码如下:
protected override void OnNavigatedTo(NavigationEventArgs e) { registerPushChannel(); }
private void registerPushChannel()
{
// The name of our push channel.
string channelName = "RawSampleChannel";
// Try to find the push channel.
pushChannel = HttpNotificationChannel.Find(channelName);
// If the channel was not found, then create a new connection to the push service.
if (pushChannel == null)
{
pushChannel = new HttpNotificationChannel(channelName);
// Register for all the events before attempting to open the channel.
pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived);
pushChannel.Open();
}
else
{
// The channel was already open, so just register for all the events.
pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived);
// code which passes the new channel URI back to my web service
}
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
pushChannel.Close();
}
因此,为了澄清,应用程序已打开,推送频道已注册,频道uri已保存在我的网络服务中。然后,Web服务将通知发送到通道uri。当我退出应用程序或页面并返回它时,找到推送通道但创建了一个新的通道uri,我再次将其保存到我的Web服务。我的频道表实际上正在不断增长和发展。
这是否应该与不断生成的新频道URI一起使用?这对我来说没什么意义。我不确定烤面包和磁贴通知是如何工作的,但我认为当应用关闭以便在应用关闭时继续接收通知时,通道URI需要是静态的,但也许这可能是bindtotoast的功能和bindtotile一起,我正在做的是正确的,因为它与原始通知有关。
答案 0 :(得分:7)
你大部分都是这样做的。
推送通知是一件有趣的事情 您创建一个频道,将其发送到您的服务器,然后服务器可以发送直到它失败(频道Uri过期或出现错误)。 此时,应用需要创建一个新的ChannelUri,然后更新在服务器上为该应用/设备存储的值。然后,服务器将能够发送通知。
一些重点
registerPushChannel
方法那样运行代码,则无法知道某个频道是否已在应用中过期。 (除非您在后端跟踪此信息,并且应用程序会查询后端。)尝试确保频道始终可用的标准方法是在应用启动时检查频道 这就是你正在做的事情,你可能只想确保更新服务器记录而不仅仅是添加更多。