以下文章由微软高级内容发布主管Katrina Lyon-Smith撰写并贡献给博客。
在云中漫游数据
你想要创建一个能在云中储存数据的app吗?
你想让任何一个运行你app的设备获取这些数据吗?
你想更新你app在设备上的磁贴内容吗?
那么这篇文章你一定要看...
假设你想创建一个便签,那么你可以在Windows8电脑桌面上创建一个便签。然后这个便条会被发送到Windows 8手机和Windows Surface的磁贴里,这样你就不会忘了他了, Windows Azure移动服务与Windows应用商店和Windows 8手机应用协同,可以帮助您轻松地做到这些。
在开始之前,您应该知道以下几点。
账户
首先你需要三个账户。我相信你大概已经知道是哪三个账户了,如果你还没有注册,那么直接注册就可以了。
您可以通过这篇教程来了解如何创建一个Azure mobile 服务并部署一个获取远程数据的应用。
构建Windows Azure移动服务应用程序
第1步:创建您的移动服务应用程序
您可以通过阅读这篇教程来创建Azure移动服务和可以访问该服务的应用程序。它会一步步的为您介绍如通过使用Windows应用商店应用或Windows 8手机应用实现这些。它会为您创建一个清单应用。然后您可以通过修改这个应用,来修改你Azure移动服务需要储存在SQL Azure 的内容。两篇教程互相参考,可以使您快速了解如何使用Azure移动服务。
第2步:验证用户
来通过这篇教程了解如何使用Azure移动服务对用户进行身份验证。它支持使用以下身份进行验证:
为了使您用户的每次登陆更加轻松,您可以通过阅读这篇教程来认证那些已经在设备上登陆过的用户。
注意:在配置Windows 8手机应用程序并获取其客户端ID时,必须确认您正在配置移动应用程序。移动应用使用不同的OAuth 2.0身份验证流程。详情请看这里
第3步:只有我可以看到我的数据
现在您验证了用户,您需要确保每个用户只能访问自己的数据。我不希望再没有狗的情况下清单上让我去喂狗(笑),此教程将向您展示如何使用服务器端脚本来执行此操作。
第4步:更新您的应用程序的动态磁贴
如果您添加了一个待完成项目,那么您一定想把它发送到所有设备的动态磁贴上。
为此您可以使用Azure移动服务的推送通知。首先您必须找到正在运行你应用的设备的uri频道。然后在服务器添加用户提醒规则脚本。通过服务器端的设置,任何访问SQL Azure数据的应用程序都会获取到这些内容。
您可以通过以下这两篇教程来实现这一操作:
现在,您的应用会将通知推送到频道表中的所有频道。但是在实际应用中,您也许只想通知到一些特定的用户。
所以来让我们进行下一步:
第5步:更新特定用户的动态磁贴
Windows Store应用程序和Windows 8 Phone应用程序有不同的推送通知。您可以决定哪一个最适合您的应用程序。要将通知发送到与特定用户关联的通道,需要从Windows Azure管理门户中更新服务器端脚本。
1.更新服务器端脚本以插入通道表
您首先需要更新服务器端脚本,确保使每一个uri频道只关联一个用户。
该脚本将一个用户ID添加到频道表。它检查是否有一个现有的渠道为uri。如果有,则检查用户标识是否是当前用户标识。如果不是,则用当前用户ID更新该URI的频道记录。
如果没有现有频道,则为该uri和用户ID添加一条记录。
function insert(item, user, request) {
item.userId = user.userId;
var channelTable = tables.getTable('Channel');
channelTable
.where({ uri: item.uri})
.read({ success: insertChannelorUpdate});
function insertChannelorUpdate(existingChannels) {
if (existingChannels.length > 0) {
if (existingChannels[0].userId == user.userId)
{request.respond(200, existingChannels[0]);}
else
{ var channelItem = { id: existingChannels[0].id,
uri: existingChannels[0].uri,
userId: user.userId };
channelTable.update(channelItem);
}
}
else { request.execute(); }
}
}
接下来升级服务器端脚本,为了能够顺利的推送通知,我们需要把数据插入你的表中。 2.更新服务器端脚本以插入到您的数据表中 当您的数据表添加记录时,此脚本仅向连接到该用户的通道发送推送通知。例如,您添加一个项目“拿起牛奶”,文本“拿起牛奶”被推送到任何设备登录到您的应用程序的动态磁贴。 下面这个脚本展示了如何同时向Windows 8 phone 和Windows 商店应用同时推送。
function insert(item, user, request) {
item.userId = user.userId;
request.execute({
success: function() {
request.respond();
sendNotifications(); }
});
function sendNotifications() {
var channelTable = tables.getTable('Channel');
channelTable.where({userId: user.userId}).read({
success: function(channels) {
channels.forEach(function(channel) {
push.wns.sendTileSquareText02(channel.uri, {
text2: item.text },
{
success: function(pushResponse) {
console.log("Sent push windows store:", pushResponse);
}
});
push.mpns.sendFlipTile(channel.uri, {
title: item.text
},{
success: function(pushResponse) {
console.log("Sent push windows 8 phone:", pushResponse); }
});
}
);
}
});
}
}
现在您就可以从云端漫游数据到你的app了,你同样也可以增加更多的功能来提醒你的用户们。