设为首页 收藏本站
查看: 1680|回复: 0

[经验分享] 使用Windows Azure Mobile Service开发Windows Phone 8 App

[复制链接]

尚未签到

发表于 2015-5-23 10:54:35 | 显示全部楼层 |阅读模式
  - How to make a Windows Phone 8 app with Windows Azure Mobile Service
  Windows Azure Mobile Service推出已经有一段时间了,这可能是这段时间以来Windows Azure上最受关注的一个Feature,试用了一下Mobile Service,觉得还不错,分享下试用的过程,供大家参考。

新建一个Mobile Service
  1. 登陆到Windows Azure Portal,创建一个Mobile Service
DSC0000.jpg
  2. 创建一个Mobile Service:MyTodos,并为之新建一个数据库,注意数据库服务器的区域和Mobile Service的区域最好相同,这样可以减少网络延迟和流量费用 (当然也可以使用已有的数据库实例,Mobile Service会把新建的数据表都放到MyTodos这个Schema下,所以不用担心和原有的表重名)
DSC0001.jpg
DSC0002.jpg
  3. 等待几分钟后,Mobile Service创建完成后,点击MyTodos进行配置:
  a) 平台这里可以看到,Mobile Service支持Windows/ WP8/Android/iOS/Html5的应用,这里我们选择Windows Phone8,注意需要安装两个SDK – Windows Phone 8 SDK和Mobile Service SDK;
  b) 单击“创建TodoItem表”在刚才的数据库中创建一个TodoItem表,当然也可以自己到数据库里创建。
DSC0003.jpg
DSC0004.jpg
  4. 浏览到配置这个页面,注意启用“动态架构”,这样在开发阶段,我们给Mobile Service传什么样的entity,Mobile Service会自动为我们创建相应的字段,但等到发布阶段,出于安全的考虑,最好是把“动态架构”关闭。
DSC0005.jpg
  5. 回到MyTodos的首页,下载Azure自动生成的代码
DSC0006.jpg
  6. 打开刚下载的代码,这时候我们已经得到了一个完整的Windows Phone 8的应用,来看看Mobile Service都生成了什么代码
  a) MobileServiceClient:这就是Mobile Service SDK里面用来访问Mobile Service的客户端
DSC0007.jpg
  b) TodoItem以及相应的Insert/Update/Refresh等方法:注意这些方法都是使用.Net 4.5的异步编程,这也是Mobile Service所推荐的编程模式。
DSC0008.png
  7. 运行测试一下这个小App,添加一些TodoItem,浏览之前建的数据库,可以看到,还没有写一行代码,就已经得到了一个完整的WP8 App。
DSC0009.jpg
DSC00010.jpg
DSC00011.jpg

添加用户验证
  接下来添加用户验证,Mobile Service支持MicrosoftAccount(也就是LiveID)/Google/Facebook/Twritter四种用户验证方式,本文只使用了MicrosoftAccount。
  1. 要使用MicrosofAccount,首先要到Live Connect Developer Center(http://go.microsoft.com/fwlink/p/?linkid=262039&clcid=0x409 )注册一下我们的App,注意“手机客户端应用”选择“是”。
DSC00012.jpg
DSC00013.jpg
  2. 将注册得到的客户端ID和客户端密钥填到Mobile Service上,并保存
DSC00014.jpg
  3. 现在设置一下数据权限,将TodoItem表设为只有验证过的用户才能读写,并保存
DSC00015.jpg
DSC00016.jpg
  4. 再运行一下App,这次应该收到一个Unauthorized异常,因为当前的用户没有登录
DSC00017.png
  5. 接下来为App添加登录的代码
  a) 在MainPage.xaml里为MainPage添加一个Login button
  b) 注释掉OnNavigatedTo里面的代码


DSC00018.gif DSC00019.gif View Code


protected override void OnNavigatedTo(NavigationEventArgs e)
{
//RefreshTodoItems();

}
  
  c) 修改App.xaml.cs里面的ApplicationKey


View Code


public static MobileServiceClient MobileService = new MobileServiceClient(
"https://mytodos.azure-mobile.net/",
"用注册app时得到的客户端密钥"
);
  
  d) 将下面这段代码添加到MainPage class里


View Code


private MobileServiceUser user;
private async System.Threading.Tasks.Task Authenticate()
{
if (user == null)
{
string message = "You must log in. Login Required";
try
{
user = await App.MobileService.LoginAsync    (MobileServiceAuthenticationProvider.MicrosoftAccount);
message = string.Format("You are now logged in - {0}", user.UserId);
}
catch (InvalidOperationException ex)
{
message = ex.Message;
}
MessageBox.Show(message);
}
}
private async void BtnLogin_Click(object sender, RoutedEventArgs e)
{
await Authenticate();
if (null != this.user)
{
RefreshTodoItems();
}
}
  
  运行看看效果,现在又可以刷新和添加TodoItem了
DSC00020.jpg DSC00021.jpg DSC00022.jpg
DSC00023.jpg DSC00024.jpg
  6. 如果需要得到更多的用户信息,则需要下载并安装LiveSDK( http://msdn.microsoft.com/en-us/live/ff621310 ),并为MyTodos添加引用到Microsoft.Live
DSC00025.jpg
  a) 按下面的代码修改MainPage.Authenticate


View Code


private async System.Threading.Tasks.Task Authenticate()
{
if (user == null)
{
string message = "You must log in. Login Required";
try
{
string clientId = "用注册app时得到的客户端ID";
LiveAuthClient liveIdClient = new LiveAuthClient(clientId);
LiveLoginResult result = await liveIdClient.LoginAsync(new[] { "wl.basic", "wl.photos" });
if (result.Status == LiveConnectSessionStatus.Connected)
{
LiveConnectClient client = new LiveConnectClient(result.Session);
var me = await client.GetAsync("me");
user = await App.MobileService.LoginAsync(result.Session.AuthenticationToken); //(MobileServiceAuthenticationProvider.MicrosoftAccount);
this.TitleTextBlock.Text = this.TitleTextBlock.Text +
" - welcome, "
+ me.Result["first_name"].ToString() + "." + me.Result["last_name"].ToString();
message = string.Format("You are now logged in - {0}", user.UserId);
}
else
{
message = string.Format("Connect to microsoft account failed. Status: {0}", result.Status);
}
}
catch (LiveAuthException authEx)
{
message = string.Format("{0}:{1}", authEx.GetType().Name, HttpUtility.UrlDecode(authEx.Message));
}
catch (LiveConnectException connEx)
{
message = string.Format("{0}:{1}", connEx.GetType().Name, HttpUtility.UrlDecode(connEx.Message));
}
catch (InvalidOperationException ex)
{
message = ex.Message;
}
MessageBox.Show(message);
}
}
  
  运行效果如下,可以看到登录的页面与之前稍有差别,但这次能得到更多的用户信息
DSC00026.jpg DSC00027.jpg DSC00028.jpg
DSC00029.jpg

添加推送通知
  1. 添加代码如下
  a) 在App.xaml.cs中添加如下代码


View Code


public static HttpNotificationChannel CurrentChannel { get; private set; }
private static readonly string ChannelName = "MyTodosPushChannel";
private void AcquirePushChannel()
{
CurrentChannel = HttpNotificationChannel.Find(ChannelName);
if (CurrentChannel == null)
{
CurrentChannel = new HttpNotificationChannel(ChannelName);
CurrentChannel.Open();
CurrentChannel.BindToShellTile();
CurrentChannel.BindToShellToast();
}
CurrentChannel.ShellToastNotificationReceived += CurrentChannel_ShellToastNotificationReceived;
}
void CurrentChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)
{
string msg = "";
foreach (var kv in e.Collection)
{
msg = msg + "\r\n" + kv.Key.ToString() + ": " + kv.Value;
}
Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show(msg); });
}
  
  b) 在Application_Launching中调用AcquirePushChannel


View Code


private void Application_Launching(object sender, LaunchingEventArgs e)
{
AcquirePushChannel();
}
  
  c) 给TodoItem class添加一个property


View Code


[DataMember(Name = "channel")]
public string Channel { get; set; }
  
  d) 修改MainPage.xaml.cs的ButtonSave_Click,代码如下。由于我们启用的动态架构,所以Save的时候Mobile Service会为新添加的Channel属性创建一个对应的数据库字段。


View Code


private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
var todoItem = new TodoItem
{
Text = TodoInput.Text,
Channel = App.CurrentChannel.ChannelUri.ToString()
};
InsertTodoItem(todoItem);
}
  
  2. 给App开启推送
DSC00030.png
  3. 回到Azure的Portal,修改Mobile Service服务端script并保存,详细参数可以参考这里:
  http://msdn.microsoft.com/en-us/library/windowsazure/jj871025.aspx
DSC00031.jpg
  代码如下:


View Code


function insert(item, user, request) {
request.execute({
success: function () {
request.respond();
// send flip tile

push.mpns.sendFlipTile(item.channel, {
title: item.text
}, {
success: function (pushResponse) {
console.log("Sent flip tile push:", pushResponse);
}
});
// send toast

push.mpns.sendToast(item.channel, {
text1: 'MyTodos',
text2: item.text
}, {
success: function(pushResponse){
console.log("Sent toast push:", pushResponse);
}
});
}
});
}
  
  4. 把MyTodos pin到主界面上,运行app,观察效果
DSC00032.jpg DSC00033.jpg DSC00034.jpg
DSC00035.jpg DSC00036.jpg
  

总结
  Azure Mobile Service极大地简化了server端的代码开发,尤其是对于比较小的应用来说,更是非常方便,使App开发者可以专注于前端代码。
  

附:
  客户端源代码在这里
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69777-1-1.html 上篇帖子: Windows Azure Cloud Service (8) Role及其生命周期模型 下篇帖子: Windows Azure Storage (8) Windows Azure 上的托管服务CDN (上)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表