向 Windows 应用添加推送通知

06/25/2019

本文内容

概述

本教程介绍如何向 Windows 快速入门项目添加推送通知,以便每次插入一条记录时,向设备发送一条推送通知。

如果不使用下载的快速入门服务器项目,则需要推送通知扩展包。 有关详细信息,请参阅使用用于 Azure 移动应用的 .NET 后端服务器 SDK。

配置通知中心

Azure 应用服务的移动应用功能使用 Azure 通知中心发送推送内容,因此用户需为移动应用配置通知中心。

在 Azure 门户中,转到“应用服务” ,并选择应用后端。 在“设置” 下,选择“推送” 。

若要将通知中心资源添加到应用中,请选择“连接” 。 可以创建一个中心,也可以连接到一个现有的中心。

现在已将通知中心连接到移动应用后端项目。 稍后需对此通知中心进行配置,以便连接到将内容推送到设备的平台通知系统 (PNS)。

为推送通知注册应用程序

需要将应用提交到 Microsoft Store,然后将服务器项目配置为与 Windows 推送通知服务 (WNS) 集成,以便发送推送。

在 Visual Studio 解决方案资源管理器中,右键单击 UWP 应用项目,单击“应用商店” > “将应用与应用商店关联...” 。

在向导中,单击“下一步” ,使用 Microsoft 帐户登录,在“保留新应用名称” 中键入应用的名称,并单击“保留” 。

成功创建应用注册后,选择新应用名称,再依次单击“下一步” 和“关联” 。 这会将所需的 Microsoft Store 注册信息添加到应用程序清单中。

导航到应用程序注册门户,并使用 Microsoft 帐户登录。 单击上一步中关联的 Windows 应用商店应用。

在注册页中,记下“应用程序机密” 和“包 SID” 下的值,后面将使用这些值配置移动应用后端。

重要

客户端密钥和程序包 SID 是重要的安全凭据。 请勿将这些值告知任何人或随应用程序分发它们。 将“应用程序 ID” 与机密配合使用来配置 Microsoft 帐户身份验证。

App Center 还提供了有关为推送通知配置 UWP 应用的说明。

配置后端以发送推送通知

在 Azure 门户中,选择“浏览全部” > “应用程序服务” 。 然后选择“移动应用”后端。 在“设置”下 ,选择“应用服务推送” 。 然后选择通知中心名称。

转到“Windows (WNS)” 。 输入安全密钥(客户端密码)和从 Live 服务站点获取的包 SID。 接下来,选择“保存” 。

后端现已配置为使用 WNS 发送推送通知。

更新服务器以发送推送通知

使用下面与后端项目类型 —.NET 后端或 Node.js 后端匹配的过程。

.NET 后端项目

在 Visual Studio 中,右键单击服务器项目并单击“管理 NuGet 包” ,搜索 Microsoft.Azure.NotificationHubs,并单击“安装” 。 这会安装通知中心客户端库。

展开“控制器” ,打开 TodoItemController.cs,并添加以下 using 语句:

using System.Collections.Generic;

using Microsoft.Azure.NotificationHubs;

using Microsoft.Azure.Mobile.Server.Config;

在 PostTodoItem 方法中,在调用 InsertAsync 后添加如下代码:

// Get the settings for the server project.

HttpConfiguration config = this.Configuration;

MobileAppSettingsDictionary settings =

this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings();

// Get the Notification Hubs credentials for the Mobile App.

string notificationHubName = settings.NotificationHubName;

string notificationHubConnection = settings

.Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString;

// Create the notification hub client.

NotificationHubClient hub = NotificationHubClient

.CreateClientFromConnectionString(notificationHubConnection, notificationHubName);

// Define a WNS payload

var windowsToastPayload = @""

+ item.Text + @"";

try

{

// Send the push notification.

var result = await hub.SendWindowsNativeNotificationAsync(windowsToastPayload);

// Write the success result to the logs.

config.Services.GetTraceWriter().Info(result.State.ToString());

}

catch (System.Exception ex)

{

// Write the failure result to the logs.

config.Services.GetTraceWriter()

.Error(ex.Message, null, "Push.SendAsync Error");

}

此代码指示通知中心在插入新项后,发送一条推送通知。

重新发布服务器项目。

Node.js 后端项目

设置后端项目。

将 todoitem.js 文件中的现有代码替换为以下内容:

var azureMobileApps = require('azure-mobile-apps'),

promises = require('azure-mobile-apps/src/utilities/promises'),

logger = require('azure-mobile-apps/src/logger');

var table = azureMobileApps.table();

table.insert(function (context) {

// For more information about the Notification Hubs JavaScript SDK,

// see https://aka.ms/nodejshubs

logger.info('Running TodoItem.insert');

// Define the WNS payload that contains the new item Text.

var payload = ""

+ context.item.text + "";

// Execute the insert. The insert returns the results as a Promise,

// Do the push as a post-execute action within the promise flow.

return context.execute()

.then(function (results) {

// Only do the push if configured

if (context.push) {

// Send a WNS native toast notification.

context.push.wns.sendToast(null, payload, function (error) {

if (error) {

logger.error('Error while sending push notification: ', error);

} else {

logger.info('Push notification sent successfully!');

}

});

}

// Don't forget to return the results from the context.execute()

return results;

})

.catch(function (error) {

logger.error('Error while running context.execute: ', error);

});

});

module.exports = table;

插入新的待办事项时,会发送一条包含 item.text 的 WNS toast 通知。

编辑本地计算机上的文件时,请重新发布服务器项目。

向应用添加推送通知

下一步,应用必须在启动时注册推送通知。 已启用身份验证时,请确保用户先登录,再尝试注册推送通知。

打开 App.xaml.cs 项目文件并添加以下 using 语句:

using System.Threading.Tasks;

using Windows.Networking.PushNotifications;

在同一文件中,将以下 InitNotificationsAsync 方法定义添加到 App 类中:

private async Task InitNotificationsAsync()

{

// Get a channel URI from WNS.

var channel = await PushNotificationChannelManager

.CreatePushNotificationChannelForApplicationAsync();

// Register the channel URI with Notification Hubs.

await App.MobileService.GetPush().RegisterAsync(channel.Uri);

}

此代码从 WNS 检索应用的 ChannelURI,然后将该 ChannelURI 注册到应用服务移动应用。

在 App.xaml.cs 中 OnLaunched 事件处理程序的顶部,为方法定义添加 async 修饰符,并添加对新 InitNotificationsAsync 方法的以下调用,如以下示例所示:

protected async override void OnLaunched(LaunchActivatedEventArgs e)

{

await InitNotificationsAsync();

// ...

}

这保证每次启动应用程序时都注册短期的 ChannelURI。

重新生成 UWP 应用项目。 应用现在已能够接收 toast 通知。

在应用中测试推送通知

右键单击 Windows 应用商店项目,单击“设为启动项目” ,并按 F5 键运行 Windows 应用商店应用。

该应用启动后,已注册该设备以接收推送通知。

停止 Windows 应用商店应用并对 Windows Phone 应用商店应用重复上一步操作。

此时,这两个设备会注册以接收推送通知。

重新运行 Windows 应用商店应用,在“插入 TodoItem” 中键入文本,并单击“保存” 。

请注意,完成插入后,Windows Store 和 Windows Phone 应用会从 WNS 收到一条推送通知。 即使在此应用未运行时,也在 Windows Phone 上显示此通知。

后续步骤

了解有关推送通知的详细信息:

如何使用 Azure 移动应用的托管客户端 使用模板可以灵活地发送跨平台推送和本地化推送。 了解如何注册模板。

诊断推送通知问题 有多种原因可能导致通知被丢弃或最终未到达设备。 本主题演示如何分析和确定推送通知失败的根本原因。

请考虑继续学习以下教程之一:

向应用添加身份验证 了解如何使用标识提供者对应用用户进行身份验证。

为应用启用脱机同步 了解如何使用移动应用后端向应用添加脱机支持。 借助脱机同步,最终用户即使在没有网络连接时也能够与移动应用进行交互(查看、添加或修改数据)。

微软软件推送服务器,向 UWP 应用添加推送通知 - Azure Mobile Apps | Microsoft Docs相关推荐

  1. 微软云服务器流量,使用 Visual Studio Mobile Center 进行真实用户度量 - Azure 流量管理器 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 如何使用 Visual ...

  2. linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs

    在 Linux 上配置软件 RAID 02/02/2017 本文内容 一种比较常见的情况是,在 Azure 中的 Linux 虚拟机上使用软件 RAID 将多个附加的数据磁盘显示为单个 RAID 设备 ...

  3. 配置消息推送服务器,自动化部署和消息推送

    一.前言 1.思考:如何取得平衡? 代码写的太简单,可复用性较低,易读易懂: 代码写的太抽象,有一定的复用性,维护成本较高,需要专人维护,否则可能引起牵一发而动全身的问题. 如何避免过度抽象,过度简单 ...

  4. 基于mqtt协议的消息推送服务器,基于 MQTT 协议的推送服务

    一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级& ...

  5. 消息推送服务器令牌,小程序-消息推送配置Token令牌错误校验失败如何解决

    网上借个图 按微信要求:确认此次GET请求来自微信服务器,则原样返回echostr参数内容 都按要求来了,但怎么都不行,总是提示:Token校验失败,请检查确认 /** * 检验签名 */ publi ...

  6. 苹果微信推送服务器错误,接入WxPusher微信推送服务出现错误:Content type application/x...

    背景 使用WxPusher微信推送服务 ,可以及时的将服务的一些运行异常信息,发送到自己的微信上,方便了解服务的运行状态(PS:这个服务是免费的). 你可以在这里看到WxPusher微信推送服务的接入 ...

  7. 友盟消息推送服务器demo,友盟消息推送总结

    分享的文章连接 1  http://blog.csdn.net/shenjie12345678/article/details/41120637 2:http://dev.umeng.com/push ...

  8. wsus服务器推送指定的补丁,WSUS SelfUpdate 不发送自动更新 - Windows Server | Microsoft Docs...

    WSUS SelfUpdate 服务不发送自动更新 10/20/2020 本文内容 本文提供了一种解决方案,可解决在使用 Microsoft Windows Server Update Service ...

  9. 微软服务器安装显卡驱动,适用于 Windows 的 Azure N 系列 NVIDIA GPU 驱动程序安装 - Azure Virtual Machines | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 在运行 Windows ...

最新文章

  1. Android开发必看知识,不看后悔
  2. html和xhtml和html5一些区别和笔记
  3. LPS25HB 气压计 资料整理
  4. 发现数据对象 -- 数据库开发的关键
  5. CentOS 5.3 安装nginx+mysql+php
  6. eclipse在server中tomcat server找不到的问题
  7. Vue+axios统一接口管理
  8. java string 练习_JAVA基础练习之String
  9. linux下mkdir头文件_Linux中mkdir函数与Windows中_mkdir函数的区别
  10. Markdown Cookbook by Eric
  11. Java关键字与保留字
  12. SODB、RBSP和EBSP
  13. 感知特性评价指标SSIM
  14. C语言知识点完美总结
  15. office2019安装D盘_office2016or2019安装在D盘的方法-可收藏备用
  16. vim编辑器 解决vim编辑异常
  17. opnet统计量介绍
  18. Cool Edit之扫频波的生成
  19. 使用webpack搭建react项目
  20. PPPoE拨号过程解析

热门文章

  1. WebBrowser(超文本浏览框)控件默认使用IE9,IE10的方法
  2. ISIS—BGP—VRRP 城域网典型架构图 拓扑实验
  3. Objective-C中对Url的参数进行编码
  4. post和get提交中文数据的转码问题
  5. mysql 时间差函数 timestampdiff datediff 简介
  6. 区块链 选择交易所 五个注意点
  7. python3 判断字符串是否包含指定字符
  8. linux gcc编译参数顺序问题
  9. UNREFERENCED_PARAMETER的作用 (unreferenced formal parameter 警告)
  10. 在VS2010平台上创建并使用dll