通过推送通知向导生成的代码

通过在 Visual Studio 中使用向导,你可以从使用 Azure 移动服务创建的某种移动服务生成推送通知。Visual Studio 向导生成代码,以帮助你开始操作。本主题说明向导如何修改你的项目、生成的代码有何作用、如何使用此代码,以及为了发挥推送通知的最大作用,你接下来可以如何操作。请参阅 Windows 推送通知服务 (WNS) 概述

向导如何修改你的项目

推送通知向导通过以下几种方式修改你的项目:

  • 向移动服务托管的客户端添加引用 (MobileServicesManagedClient.dll)。不适用于 JavaScript 项目。
  • 在服务的子文件夹中添加一个文件,将该文件命名为 push.register.cs、push.register.vb、push.register.cpp 或 push.register.js。
  • 在移动服务的数据库服务器上创建一个通道表。该表中包含向应用实例发送推送通知所需的信息。
  • 创建四个功能的脚本:删除、插入、读取和更新。
  • 创建带有自定义 API 的脚本 notifyallusers.js,它将向所有客户端发送推送通知。
  • 向你的 App.xaml.cs、App.xaml.vb 或 App.xaml.cpp 文件添加声明,或向 JavaScript 项目的新文件 service.js 添加声明。 该声明声明一个 MobileServiceClient 对象,此对象中包含连接到移动服务所需的信息。你可以通过使用名称 App.MyServiceNameClient 从应用中的任何页面访问此 MobileServiceClient 对象,它的名称为 MyServiceNameClient。

services.js 文件包含以下代码:



var <mobile-service-name>Client = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient(
                "https://<mobile-service-name>.azure-mobile.net/",
                "<your client secret>");

推送通知注册

在 push.register.* 中,UploadChannel 方法注册设备以接收推送通知。Windows 应用商店跟踪你的应用的已安装实例,然后提供推送通知通道。 请参阅 PushNotificationChannelManager

对于 JavaScript 后端和 .NET 后端,客户端代码是类似的。默认情况下,当你为 JavaScript 后端服务添加推送通知时,对 notifyAllUsers 自定义 API 的示例调用将插入到 UploadChannel 方法中。



Imports Microsoft.WindowsAzure.MobileServices
Imports Newtonsoft.Json.Linq

Friend Class mymobileservice1234Push
    Public Shared Async Sub UploadChannel()
        Dim channel = Await Windows.Networking.PushNotifications.PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync()

        Try
            Await App.mymobileservice1234Client.GetPush().RegisterNativeAsync(channel.Uri)
            Await App.mymobileservice1234Client.GetPush().RegisterNativeAsync(channel.Uri, New String() {"tag1", "tag2"})
            Await App.mymobileservice1234Client.InvokeApiAsync("notifyAllUsers")
        Catch exception As Exception
            HandleRegisterException(exception)
        End Try
    End Sub

    Private Shared Sub HandleRegisterException(exception As Exception)

    End Sub
End Class

推送通知标记提供了一种将通知限制到客户端子集中的方法。你可以使用 registerNative 方法(或 RegisterNativeAsync)方法为所有推送通知注册而不指定标记,或者可以通过提供第二个参数,即一个标记数组来向标记注册。如果你向一个或多个标记注册,则只接收匹配这些标记的通知。

服务器端脚本(仅 JavaScript 后端)

对于使用 JavaScript 后端的移动服务,服务器端脚本在发生删除、插入、读取或更新操作时运行。服务器端脚本并不实现这些操作,但是当从客户端调用 Windows Mobile REST API,从而触发这些事件时,这些脚本便会运行。然后这些脚本自身通过调用 request.execute 或 request.respond 向调用上下文发出响应,从而向这些操作传递控制。请参阅 Azure 移动服务 REST API 参考

服务器端脚本中有多种函数可用。请参阅 Azure 移动服务中的注册表操作。有关所有可用函数的参考,请参阅移动服务服务器脚本参考

还将在 Notifyallusers.js 中创建以下自定义 API 代码:



exports.post = function(request, response) {
    response.send(statusCodes.OK,{ message : 'Hello World!' })
    
    // The following call is for illustration purpose only
    // The call and function body should be moved to a script in your app
    // where you want to send a notification
    sendNotifications(request);
};

// The following code should be moved to appropriate script in your app where notification is sent
function sendNotifications(request) {
    var payload = '<?xml version="1.0" encoding="utf-8"?><toast><visual><binding template="ToastText01">' +
        '<text id="1">Sample Toast</text></binding></visual></toast>';
    var push = request.service.push; 
    push.wns.send(null,
        payload,
        'wns/toast', {
            success: function (pushResponse) {
                console.log("Sent push:", pushResponse);
            }
        });
}

sendNotifications 函数发送 toast 通知形式的单一通知。你也可以使用其他类型的推送通知。

提示  有关在编辑脚本时如何获取帮助的信息,请参阅为服务器端 JavaScript 启用 IntelliSense

推送通知类型

Windows 还支持推送通知以外的通知。有关通知的一般信息,请参阅传递计划的通知、定期通知和推送通知

Toast 通知易于使用,你可以在为你生成的通道表的 Insert.js 代码中查看示例。如果你计划使用磁贴通知或锁屏提醒通知,那么你必须为磁贴或锁屏提醒创建 XML 模板,并且必须在模板中指定打包信息的编码。请参阅使用磁贴、锁屏提醒和 toast 通知

由于 Windows 响应推送通知,因此在应用未运行时,Windows 也可以处理大部分此类通知。例如,即便本地邮件应用不处于运行状态,当收到新邮件时,推送通知也可以提醒客户。Windows 对 toast 通知的处理方式是显示信息,例如显示短信的第一行内容。Windows 对磁贴通知或锁屏提醒通知的处理方式是更新应用的动态磁贴,使其反映新邮件的数量。通过这种方式,你可以提示应用的用户到应用中查看新信息。应用在运行时可以接收原始通知,你可以使用原始通知向你的应用发送数据。如果应用未运行,你可以设置一个后台任务,用于监视推送通知。

由于推送通知可能会耗尽用户的资源,并且在过度使用的情况下会打扰用户,因此在使用推送通知时,应该遵循 Windows 应用商店应用的指南。请参阅推送通知指南和清单

如果你使用推送通知更新动态磁贴,那么你还应该遵循磁贴和锁屏提醒指南和清单中的指南。

后续步骤

使用 WNS

在以下情况下,你可以直接调用 WNS:移动服务缺乏足够的灵活性,你想要在 C# 或 Visual Basic 中编写服务器代码,或者你已经有云服务,你希望从云服务发送推送通知。通过直接调用 WNS,你可以从自己的云服务发送推送通知,例如使用通过数据库或其他 Web 服务监视数据的辅助角色。你的云服务必须通过 WNS 验证,才能向你的应用发送推送通知。请参阅如何执行 Windows 推送通知服务 (JavaScript)(C#/C++/VB) 的验证

你还可以通过在移动服务中运行计划的任务来发送推送通知。请参阅在移动服务中计划定期作业

警告  运行推送通知向导后,请勿再次运行该向导以为其他移动服务添加注册代码。如果在每个项目中多次运行该向导,则生成针对 CreatePushNotificationChannelForApplicationAsync 方法的重叠调用,从而导致运行时异常。如果你想为多个移动服务注册推送通知,请再次运行该向导,然后重写该注册代码以确保针对 CreatePushNotificationChannelForApplicationAsync 的调用不会同时进行。例如,你可以通过将 push.register.* 中向导生成的代码(包括针对 CreatePushNotificationChannelForApplicationAsync 的调用)移至 OnLaunched 事件之外以实现此目的,但此操作的细节取决于应用的架构。

相关主题

WNS 概述
原始通知概述
连接到 Windows Azure 移动服务 (JavaScript)
连接到 Windows Azure 移动服务 (C#/C++/VB)
快速入门:为移动服务添加推送通知 (JavaScript)

 

 

显示:
© 2015 Microsoft