我想检查我的推送通知实现是否正确。
每次我打开我的应用程序(事实上,我只在特定页面上注册推送通道,因此每次我从该页面来回切换时)都会创建一个新的推送通道 URI,我将其存储在我的移动服务数据库中以发送将通知推送至。这对我来说似乎不正确,因为每次打开应用程序/页面时都会生成一个新的推送通道 URI,因此通道 URI 列表只会随着使用我的应用程序的每个设备而不断增长。我假设您创建一个推送通道,存储通道 URI 并根据需要推送到它。我将在这里指出我正在使用原始推送通知。
我知道推送通道会经常过期,但对我来说,每次我退出应用程序/页面时都会发生这种情况,因此当调用 onNavigateTo 时,我会找到确实存在的推送通道,并且始终会创建一个新的通道 URI。它是否正确?
我的代码如下:
受保护的重写 void OnNavigateTo(NavigationEventArgs e)
{
注册PushChannel();
}
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 服务中。然后,Web 服务将通知发送到通道 uri。当我退出应用程序或页面并返回时,会找到推送通道,但会创建一个新的通道 uri,我再次将其保存到我的 Web 服务中。我的频道表实际上一直在不断增长。
那么这就是它应该与不断生成的新通道 URI 一起工作的方式吗?这对我来说有点没有意义。我不确定 toast 和磁贴通知是如何工作的,但我假设当应用程序关闭时通道 URI 需要是静态的,以便在应用程序关闭时继续接收通知,但这可能是 bindtotoast 和 bindtotile 的功能,所以我正在做的事情是正确的,因为它与原始通知有关。
你基本上做得对。
推送通知是一件有趣的事情。
您创建一个通道,将其发送到您的服务器,然后服务器可以发送,直到失败(通道 Uri 过期或出现错误)。
此时应用程序需要创建一个新的 ChannelUri,然后UPDATE服务器上为该应用程序/设备存储的值。然后服务器将能够发送通知。
一些要点
- 当为仍然有效的通道请求新通道 Uri 时,您将得到相同的通道 Uri。
- 当您请求新的频道 URI 而当前频道 URI 已过期时,您通常会返回相同的 URI,但该频道将再次上线。
- 如果不运行像您这样的代码,就无法知道应用程序内的频道是否已过期
registerPushChannel
方法。 (除非您在后端跟踪此信息并且应用程序查询后端。)
- 无法告诉应用程序通道已过期,或者告诉用户重新打开应用程序以使用推送基础设施重新建立通道连接。
尝试确保通道始终可用的标准方法是在应用程序启动时检查通道。
这就是您正在做的事情,您可能只是想确保更新服务器记录而不仅仅是添加更多记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)