Windows Phone 8 推送通知推送通道始终创建新通道 uri

2023-11-29

我想检查我的推送通知实现是否正确。

每次我打开我的应用程序(事实上,我只在特定页面上注册推送通道,因此每次我从该页面来回切换时)都会创建一个新的推送通道 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服务器上为该应用程序/设备存储的值。然后服务器将能够发送通知。

一些要点

  1. 当为仍然有效的通道请求新通道 Uri 时,您将得到相同的通道 Uri。
  2. 当您请求新的频道 URI 而当前频道 URI 已过期时,您通常会返回相同的 URI,但该频道将再次上线。
  3. 如果不运行像您这样的代码,就无法知道应用程序内的频道是否已过期registerPushChannel方法。 (除非您在后端跟踪此信息并且应用程序查询后端。)
  4. 无法告诉应用程序通道已过期,或者告诉用户重新打开应用程序以使用推送基础设施重新建立通道连接。

尝试确保通道始终可用的标准方法是在应用程序启动时检查通道。
这就是您正在做的事情,您可能只是想确保更新服务器记录而不仅仅是添加更多记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows Phone 8 推送通知推送通道始终创建新通道 uri 的相关文章

  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 在Application_AquireRequestState事件中用POST数据重写Url

    我有一个在其中注册路线的代码Application AcquireRequestState应用程序的事件 注册路由后 我会在 Http 运行时缓存中设置一个标志 这样我就不会再次执行路由注册代码 在此事件中注册路线有特定原因Applicat
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • C#中Enum中定义的value__是什么

    What value 可能在这里 value MSN ICQ YahooChat GoogleTalk 我运行的代码很简单 namespace EnumReflection enum Messengers MSN ICQ YahooChat
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro

随机推荐

  • 应该避免使用 DataFrame 函数 groupBy 吗?

    This link and others告诉我火花groupByKey如果有大量键 则不要使用 因为 Spark 会打乱所有键 这同样适用于groupBy功能也一样 或者这是不同的东西 我问这个是因为我想做这个问题尝试这样做 但我有大量的钥
  • Win7和Win XP关机前运行程序

    我知道有关于此的线程 我找到了这个 如何安排任务在关闭窗口时运行但这对我来说失败了 我在 LabView 中编写了一个小程序并用它制作了一个 exe 当我在正常的 Windows 操作中双击 exe 时 它 运行完美 只需几秒钟即可完成 然
  • #include 文件指令不起作用

    所以我需要照顾这个新网站 http www kineformeconcept com mtl index shtml 自从客户端移动到托管位置后 菜单就不再显示 我从未使用过 include file whatever html 指令 我现
  • 在 C# 中使用 RotateFlip 旋转图像

    我有这段代码用于在 C Windows 窗体应用程序中的 if 循环中旋转图像 但窗体在窗体输出中不显示任何内容 有人可以帮忙吗 this splitContainer1 Panel2 Controls Add PictureBox1 Pi
  • 在Python中分割列表

    我正在用 Python 编写一个解析器 我已将输入字符串转换为标记列表 例如 2 x 3 1 4 3 x 2 我希望能够将列表拆分为多个列表 例如str split 功能 但似乎没有办法做到my list split 有任何想法吗 Than
  • ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象

    基本上 我有一个表 其中包含一家公司的一些属性 这是 主 表 它们的 ID 用于许多其他表 我基本上是通过这个方法找到他们的ID private Company currentcompany Company cuco db Companie
  • Magento Catalog_category_flat_store_1 不存在

    我有一个运行 Magento CE 1 7 的现有商店 突然从今天早上开始 没有任何代码更新 我收到以下错误 a 5 i 0 s 111 SQLSTATE 42S02 未找到基表或视图 1146 表 XXXXXX catalog categ
  • 如何应用TextBox控件模板?

    我正在尝试简化一些代码并提高可维护性 我最初正在寻找一种使文本框向左对齐的方法 它可以收缩和扩展到最大值 而无需在达到最大值后在网格单元内居中 所以我开始编写一些这样的代码
  • preload.php 文件在哪里?它是如何生成的?

    对于 Symfony 5 1 和 PHP 7 4 我想添加preload php在opcache中 Symfony 文档 在容器编译期间 例如 运行cache clear命令时 Symfony 在 config 目录中生成一个名为 prel
  • 如何将表列(通过 SQL 查询返回)作为 CheckedListBox 中的项目列出?

    如果我有下表 canAssign 1 有没有办法添加列标题文本 例如 canAssign等 到CheckedListBox作为用户可以检查的标签 我找到的所有答案都列出了value作为标签 像这样 1 而不是这个 canAssign 仅作为
  • 如何将 MKV 字节读取为视频?

    我正在接收 MKV 视频片段 以字节为单位 我需要获取它的第一帧以供以后处理 而不将视频保存在磁盘中 对于类似的图像问题 我使用 OpenCV 或 PIL 一切正常 但是 我无法对视频数据执行相同的操作 有什么技巧可以帮助我将视频从字节读取
  • Python 的 subprocess shell=True 属性在 Java 中的等价物是什么?

    我已经使用Python很长时间了 python 的系统和子进程方法可以采用 shell True 属性来生成设置环境变量的中间进程 在命令运行之前 我一直在使用 Java 来回使用 Runtime exec 来执行 shell 命令 Run
  • MSAL UserAgentApplication:本地存储不工作

    UserAgentApplication localCache localStorage 不起作用 重现步骤 var client new Msal UserAgentApplication config aadClientId confi
  • 在 Swift 中使用 Regex 进行简单搜索时,如何避免由于搜索字符串中的特殊字符而导致的错误?

    我正在使用正则表达式在文本视图中搜索单词 我实现了一个文本字段和两个开关作为选项 全字和匹配大小写 当您在搜索字段中输入普通单词时 一切正常 但当我输入 或 等特殊字符时 我会收到错误 我得到的错误是这样的 Error Domain NSC
  • 游戏中心邀请立即失败

    我们在发送邀请时遇到问题GKGameCenterViewController 视图控制器打开得很好 但是当我们尝试向某人发送邀请时 它立即失败 两个帐户都启用了游戏中心邀请并通过GKGameViewController工作正常 这是我们用来
  • 使用 VBA 将 JSON 解析为 Excel

    我在 VBA 中解析 JSON 数据时遇到一些问题 我已经尝试了网上的所有示例 但仍然无法解决问题 我设法做的是使用另一个从另一个网站提取数据的 VBA 代码将 JSON 数据以原始格式提取到 Excel 中 我粘贴了下面有效的代码 它不是
  • 如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗?

    我在一些自动化测试中使用 git 作为一种在 Linux 和 Windows 上使用相同语法的 diff 命令的简单方法 它工作正常 但由于我正在比较的文件位于共享驱动器上 我一直在偶然发现文件模式的差异被 不必要地 报告为更改 我环顾四周
  • WPF 选取框文本动画

    我可以滚动文本TranslateTransform但是当动画接近完成时我希望它再次开始 像蛇一样 这就是我所拥有的
  • 如何在SSIS中创建异步脚本组件?

    我可能是瞎子 但我不知道如何创建脚本组件 我不是问为什么要进行异步 如何使用它等等 我只是想知道如何将其添加到我的包中 或者如何将现有组件转换为异步组件 我正在使用 VS2008 和 MSSQL 2008 R2 我发现如何 进入脚本转换编辑
  • Windows Phone 8 推送通知推送通道始终创建新通道 uri

    我想检查我的推送通知实现是否正确 每次我打开我的应用程序 事实上 我只在特定页面上注册推送通道 因此每次我从该页面来回切换时 都会创建一个新的推送通道 URI 我将其存储在我的移动服务数据库中以发送将通知推送至 这对我来说似乎不正确 因为每