- 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
2. 创建一个Mobile Service:MyTodos,并为之新建一个数据库,注意数据库服务器的区域和Mobile Service的区域最好相同,这样可以减少网络延迟和流量费用 (当然也可以使用已有的数据库实例,Mobile Service会把新建的数据表都放到MyTodos这个Schema下,所以不用担心和原有的表重名)
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表,当然也可以自己到数据库里创建。
4. 浏览到配置这个页面,注意启用“动态架构”,这样在开发阶段,我们给Mobile Service传什么样的entity,Mobile Service会自动为我们创建相应的字段,但等到发布阶段,出于安全的考虑,最好是把“动态架构”关闭。
5. 回到MyTodos的首页,下载Azure自动生成的代码
6. 打开刚下载的代码,这时候我们已经得到了一个完整的Windows Phone 8的应用,来看看Mobile Service都生成了什么代码
a) MobileServiceClient:这就是Mobile Service SDK里面用来访问Mobile Service的客户端
b) TodoItem以及相应的Insert/Update/Refresh等方法:注意这些方法都是使用.Net 4.5的异步编程,这也是Mobile Service所推荐的编程模式。
7. 运行测试一下这个小App,添加一些TodoItem,浏览之前建的数据库,可以看到,还没有写一行代码,就已经得到了一个完整的WP8 App。
添加用户验证
接下来添加用户验证,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,注意“手机客户端应用”选择“是”。
2. 将注册得到的客户端ID和客户端密钥填到Mobile Service上,并保存
3. 现在设置一下数据权限,将TodoItem表设为只有验证过的用户才能读写,并保存
4. 再运行一下App,这次应该收到一个Unauthorized异常,因为当前的用户没有登录
5. 接下来为App添加登录的代码
a) 在MainPage.xaml里为MainPage添加一个Login button
b) 注释掉OnNavigatedTo里面的代码
View Codec) 修改App.xaml.cs里面的ApplicationKey
View Coded) 将下面这段代码添加到MainPage class里
View Code运行看看效果,现在又可以刷新和添加TodoItem了
6. 如果需要得到更多的用户信息,则需要下载并安装LiveSDK( http://msdn.microsoft.com/en-us/live/ff621310 ),并为MyTodos添加引用到Microsoft.Live
a) 按下面的代码修改MainPage.Authenticate
View Code运行效果如下,可以看到登录的页面与之前稍有差别,但这次能得到更多的用户信息
添加推送通知
1. 添加代码如下
a) 在App.xaml.cs中添加如下代码
View Codeb) 在Application_Launching中调用AcquirePushChannel
View Codec) 给TodoItem class添加一个property
View Coded) 修改MainPage.xaml.cs的ButtonSave_Click,代码如下。由于我们启用的动态架构,所以Save的时候Mobile Service会为新添加的Channel属性创建一个对应的数据库字段。
View Code2. 给App开启推送
3. 回到Azure的Portal,修改Mobile Service服务端script并保存,详细参数可以参考这里:
http://msdn.microsoft.com/en-us/library/windowsazure/jj871025.aspx
代码如下:
View Code4. 把MyTodos pin到主界面上,运行app,观察效果
总结
Azure Mobile Service极大地简化了server端的代码开发,尤其是对于比较小的应用来说,更是非常方便,使App开发者可以专注于前端代码。
附:
客户端源代码在这里
![clip_image002[4] clip_image002[4]](http://images0.cnblogs.com/blog/49079/201304/02220821-352a539c507d49d49d72771c9eab94b3.jpg)
![clip_image004[4] clip_image004[4]](http://images0.cnblogs.com/blog/49079/201304/02220824-9d8de46bd40f425c9ea15402a9de6d2b.jpg)
![clip_image006[4] clip_image006[4]](http://images0.cnblogs.com/blog/49079/201304/02220824-3af028210bdb44de85bc8cd311a7c33a.jpg)
![clip_image008[4] clip_image008[4]](http://images0.cnblogs.com/blog/49079/201304/02220826-d69ca6c9d7ac4ced914995190a8e5e37.jpg)
![clip_image010[4] clip_image010[4]](http://images0.cnblogs.com/blog/49079/201304/02220828-12d9252755554844b96606c20c0f4a98.jpg)
![clip_image012[4] clip_image012[4]](http://images0.cnblogs.com/blog/49079/201304/02220831-be251bd014a94f5eaf915e27d28f60ee.jpg)
![clip_image014[4] clip_image014[4]](http://images0.cnblogs.com/blog/49079/201304/02220834-10856a685a8f4d68bfcda27931b92a77.jpg)
![clip_image016[4] clip_image016[4]](http://images0.cnblogs.com/blog/49079/201304/02220842-f366cadc99f64e628c0b79112147de49.jpg)
![clip_image017[4] clip_image017[4]](http://images0.cnblogs.com/blog/49079/201304/02220843-b0abdc1494814db6bb31b389913ba523.png)
![clip_image019[4] clip_image019[4]](http://images0.cnblogs.com/blog/49079/201304/02220844-64afc3f953ad4693af54773109652392.jpg)
![clip_image021[4] clip_image021[4]](http://images0.cnblogs.com/blog/49079/201304/02220845-874938fd647d4f3d85e8f54b3e02b5a5.jpg)
![clip_image023[4] clip_image023[4]](http://images0.cnblogs.com/blog/49079/201304/02220850-a4a2223683a6445287e5764fa2d7a0d4.jpg)
![clip_image025[4] clip_image025[4]](http://images0.cnblogs.com/blog/49079/201304/02220851-8a4fe378c1864f64b412da0e28f6502b.jpg)
![clip_image027[4] clip_image027[4]](http://images0.cnblogs.com/blog/49079/201304/02220852-470fcb05ef194c26be7a1f3563aa7213.jpg)
![clip_image029[4] clip_image029[4]](http://images0.cnblogs.com/blog/49079/201304/02220853-b6f9f8005a7941f69fd84f0c27023bbc.jpg)
![clip_image031[4] clip_image031[4]](http://images0.cnblogs.com/blog/49079/201304/02220854-1d2e54c976c44eb591725098c1d5d915.jpg)
![clip_image033[4] clip_image033[4]](http://images0.cnblogs.com/blog/49079/201304/02220855-6c0042e73e864b26ad5b4a76bad79537.jpg)
![clip_image034[4] clip_image034[4]](http://images0.cnblogs.com/blog/49079/201304/02220856-67763416943e480b89a25e2247fc1fc7.png)
![clip_image036[6] clip_image036[6]](http://images0.cnblogs.com/blog/49079/201304/02220857-d7c9d45eaaa945a9972aea32e3777fb8.jpg)
![clip_image038[4] clip_image038[4]](http://images0.cnblogs.com/blog/49079/201304/02220858-eca726bb831d4ae089c54459319eed5e.jpg)
![clip_image040[4] clip_image040[4]](http://images0.cnblogs.com/blog/49079/201304/02220902-d6a21094157b40c0a3b3ef3d0439f874.jpg)
![clip_image042[4] clip_image042[4]](http://images0.cnblogs.com/blog/49079/201304/02220903-22b0e9a1bc684cb3a29827c7e9701dc8.jpg)
![clip_image044[4] clip_image044[4]](http://images0.cnblogs.com/blog/49079/201304/02220905-41e087e1b0334a998bb097f2ebe8aeb1.jpg)
![clip_image046[4] clip_image046[4]](http://images0.cnblogs.com/blog/49079/201304/02220908-4164c09bd4a5428f97d291ea7b14ad6e.jpg)
![clip_image036[7] clip_image036[7]](http://images0.cnblogs.com/blog/49079/201304/02220909-51b00e6e981e49c98d105dda0308ff2c.jpg)
![clip_image048[4] clip_image048[4]](http://images0.cnblogs.com/blog/49079/201304/02220910-5aec4e479d264b8997d703c0101e70d3.jpg)
![clip_image050[4] clip_image050[4]](http://images0.cnblogs.com/blog/49079/201304/02220911-d9fc4d263fed4dc4954da4f79534de02.jpg)
![clip_image052[4] clip_image052[4]](http://images0.cnblogs.com/blog/49079/201304/02220915-cf938d28b70840139c4184df254c45e9.jpg)
![clip_image054[5] clip_image054[5]](http://images0.cnblogs.com/blog/49079/201304/02220916-f083f298f3874768bcac26a27f1558b9.png)
![clip_image056[4] clip_image056[4]](http://images0.cnblogs.com/blog/49079/201304/02220918-36217e0f1c8b41d6955657a0028afeed.jpg)
![clip_image058[4] clip_image058[4]](http://images0.cnblogs.com/blog/49079/201304/02220920-83f64dafdf3345a7928c6f5a4129c083.jpg)
![clip_image060[4] clip_image060[4]](http://images0.cnblogs.com/blog/49079/201304/02220923-08d821ce711d43de8f29deab4dd9c99b.jpg)
![clip_image062[4] clip_image062[4]](http://images0.cnblogs.com/blog/49079/201304/02220924-e22cfef03e6c44c18d797fa950aa0a05.jpg)
![clip_image064[4] clip_image064[4]](http://images0.cnblogs.com/blog/49079/201304/02220926-8f4df70666954388a8cb37f81dd52063.jpg)
![clip_image066[4] clip_image066[4]](http://images0.cnblogs.com/blog/49079/201304/02220926-6f647719cf1841e49d4500b80b72fc22.jpg)