销售电话: 1-800-867-1380

迁移移动服务以使用通知中心

更新时间: 2015年2月

Microsoft Azure 移动服务应用程序使用一系列 Node.js 模块向各种平台发送推送通知:

  • APN(适用于 iOS)

  • WNS(适用于 Windows 应用商店)

  • Dpush(适用于 Android)

  • MPNS(适用于 Windows Phone)

可通过推送对象访问这些模块,移动服务将使用门户中配置的凭据实例化这些模块。

在升级到采用通知中心技术的推送通知后,你的移动服务将具有以下主要差异:

  1. 推送对象是 Microsoft Azure SDK for Node.js 中的 NotificationHubService 的实例。此实例配置为连接已针对移动服务配置的、包含所有所需推送凭据(仍通过门户配置)的中心。

    note备注
    唯一的差别在于,回调参数更改为遵循分隔的成功和错误回调的移动服务约定。

  2. 尽管发送推送通知的方法非常类似于前面提到的节点,但 modulespreviNotificationHubs 不允许你发送到特定于平台的句柄(例如,ChannelURIs、设备令牌或 registrationid),而是要求你指定注册设备时获取的目标标记。有关标记的详细信息,请参阅此文章

下表提供了一组类比信息,可帮助你将使用 MS 推送的且不包含通知中心的设计,转换为使用通知中心的设计。最重要的是不需要“通道”表。

 

没有通知中心的 MS 有通知中心的 MS 说明

在“通道”表中插入

从客户端 SDK 注册

MS 将设备注册到中心,并自动将客户端的安装 ID 添加到标记中

推送到通道

将推送到 installation_id 标记

查询以获取目标通道(例如,查找对杨基棒球队最新信息感兴趣的人的所有 CannelURIs)

采用以下两种方法之一在设备注册中添加/删除标记:

  1. 如果它依赖于客户端,则再次调用 Register(请注意,这会覆盖所有标记)

  1. 如果它必须出现在脚本中,使用推送对象来获取注册(使用 installation_id 标记)添加/删除标记,然后更新

请注意,当查询非常动态时,可能更好的做法是仍查询数据库并检索一组安装 ID

对于推送到一组通道的循环

推送到标记

管理来自通知系统的反馈以删除过期的通道

由通知中心自动处理

请注意,当使用带通知中心的 MS 时,你无法从应用程序的任何其他部分读取 Apple 反馈通道,因为这可能会导致违反 Apple 的推送通知指导原则。

在使用通知中心,将自动从 Apple 中检索过期的令牌,相应的注册将会过期。这意味着,如果你的应用程序在检索过期通道时正在执行其他某项操作,则它将无法继续。

通常,反馈通道用于删除或标记已放弃应用程序的用户。解决此问题的方法之一是,确保在用户表中写入上次登录用户值,并使用计划程序作业来定期删除或标记非活动用户。

对于所有新服务(或添加推送通知的服务),我们强烈建议你利用通知中心推送通知。如果你已在生产环境中部署移动服务,则可以使用以下选项。

你可以继续使用当前的移动服务推送基础架构,如果你需要使用高级功能(如广播、高级定位或基于设备的个性化),则你仍可以如此主题中所述直接使用通知中心。此方法的优点是你的应用程序不会发生更改或破坏兼容性。缺点包括需要维护两个不同的推送引擎,并且在发送到 Apple 设备时,你无法同时使用移动服务原始推送和通知中心(将不会正确处理反馈通道)。

如果可以强制用户更新你的应用程序以继续接收推送通知,则使用彻底脱离可以很方便地开始利用通知中心集成所能提供的全部功能。

若要执行彻底脱离迁移,你必须执行以下操作:

  1. 停止推入到旧客户端;例如,注释掉对推入脚本的对象的所有调用。

  2. 在移动服务上启用带有通知中心的增强推送(这会更改推送对象的行为)。

  3. 发布注册推送通知的新客户端版本,而不是在表中插入 ChannelURI/设备令牌/注册 ID。

  4. 更新移动服务脚本以再次推送。

这种方法的优点是可以使用简单的迁移策略和单个功能丰富的推送基础结构。缺点是客户端应用程序需要更新以继续接收推送通知。

如果必须继续向旧客户端发送推送通知,同时想要迁移到基于通知中心的推送基础结构,则你可以生成一个解决方案,以便为旧客户端使用旧推送基础架构,为新客户端使用通知中心。

Important重要提示
混合策略不适用于 Apple 客户端。当你的移动服务开始使用通知中心时,通知中心将收集反馈通道,并且无法正确地在移动服务中维护包含设备令牌的表。Android 和 Windows 应用商店/Phone 客户端不存在此问题。

若要使用混合策略,请执行以下操作:

  1. 将服务更新为自动检测是否存在通知中心,并使用正确的模块来利用传统的推送基础结构(请参阅下一部分)。

  2. 迁移服务以使用通知中心。

  3. 发布新客户端,以便

    1. 继续更新“通道”表,该表包含一个布尔值标志,表示它们已在通知中心注册,或者

    2. 注册到通知中心。

  4. 在推送时,

    1. 检查“通道”表以查看客户端是否已注册到通知中心。

    2. 使用传统推送基础结构 - 如果标志为 false;如果标志为 true,则使用新的推送对象推送到 installation_id 标记。有关代码示例,请参阅下一部分。

    3. 你可以开始使用通知中心的高级功能,但这些功能只能作用到新客户端。

你可以根据存储 ChannelURIs 和 GCM 注册 ID 的方式来设想混合策略的差异。

这种方法的优点是没有必需的客户端更新,并且你还可以为新客户端使用通知中心推送功能。当然,缺点是涉及到更多的迁移工作,并且这种方法对 Apple 客户端根本不起作用。

主要思路是手动创建传统节点模块的新实例。

如上一部分中所述,你将无法在使用通知中心的移动服务中使用 APNS 模块,因为这些模块在访问反馈通道时会争用资源,并且有可能导致违反 Apple 的推送通知指导原则。

由于推送凭据存储在通知中心中,你必须重新输入这些凭据作为应用程序配置。为此,请在门户中转到“配置”选项卡,并分别插入 PackageSID 和客户端机密作为属性 WNS_CLIENT_ID 和 WNS_CLIENT_SECRET。

以后,每当你在脚本中使用 push.wns 时,都必须添加以下函数,并将 push.wns.send* 调用替换为以下内容:

var legacyWns = require('wns');
wns.send*();

请注意,节点模块的回调结构不同于原始移动服务模块的回调结构。例如:

 

旧调用 使用节点模块
push.wns.sendToastText01(uri, {
        text1: "Sample toast"
    }, {
success: function (response) {
// success code
},
error: function(error) {
// error handling
}
});
legacyWns.sendToastText01(uri, {
        text1: "Sample toast"
    }, function (error, response) {
if (!error) {
// success code
} else {
// error handling
}
});

与 WNS 类似,你必须按前面所述,在应用程序设置中输入 GCM ApiKey。可以将它命名为 GCM_APIKEY。代码显示如下:

 

旧调用 使用节点模块
push.gcm.send(regId, "Hello!", {
success: function (response) {
// success code
},
error: function(error) {
// error handling
}
});
var legacyGcm = require('dpush');
legacyGcm.send(process.env.GCM_APIKEY, regId, "Hello!", function (error, response) {
if (!error) {
// success code
} else {
// error handling
}
});

MPNS 更易于使用,因为移动服务不支持经过身份验证的推送。在使用 MPNS 时,你可以执行以下替代:

 

旧调用 使用节点模块
push.mpns.sendFlipTile(uri, { 
title: item.text
    }, {
success: function (response) {
// success code
},
error: function(error) {
// error handling
}
});
var legacyMpns = require('mpns');
legacyMpns.sendFlipTile(uri, { 
title: item.text
    }, function (error, response) {
if (!error) {
// success code
} else {
// error handling
}
});

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft