SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Eric ShangKuan (上官林傑)
Technical Evangelist
Microsoft
Agenda
•   Windows Azure Mobile Service 平台介紹
•   各平台 App 開發實作
•   深入剖析 WAMS
現在就開始
http://aka.ms/AzureMSDNTW
Mobile Services
   快速建立 app 的「後端」
   資料儲存、身份驗證以及推送通知
   REST API
   目前官方提供 Windows 8, Windows Phone
    8 以及 iOS SDK
<//>   自訂 Script(s)
為什麼要使用 Mobile Services?
•   不必撰寫維護雲端程式
      專心在 app 端開發
      RESTful API 不限定單一 app 平台使用


•   提供 app 開發的基礎建設
      彈性擴充
      資料儲存、身份驗證、推播通知
      官方釋出主流平台 SDK
開發一個 App…
•   開發 Web 程式處理 app 的
    request
•   實作資料存取的方式
開發一個 App…
•   開發 Web 程式處理身份驗
    證的問題
•   存取資料時的身份驗證
開發一個 App…
不使用 WAMS                             使用 WAMS
• 開發伺服器應用程式                          • 在 Windows Azure 後台建立一個新的
• (server-side) 定義並實作 REST API,          WAMS 服務
    並且使用 JSON 資料格式                   •   下載欲開發平台 SDK
•   (server-side) 實作 sql/nosql 處理不   •   (client-side) 使用 SDK 直接處理資料儲
    同的資料儲存需求                             存、身份驗證、推播通知等功能
•   (server-side) 實作各身份驗證機制
•   (client-side) app 開發,並且直接介
    接 REST API
自己寫 Server-side 及 Client-side
Server-side 處理 POST                                     Client-side 寫介接程式碼
// POST api/todo                                        public static async void CreateTodo(Todo todo)
public HttpResponseMessage PostTodo(Todo todo)          {
{                                                         string serviceUrl = "http://example.com/path/to/todo";
  if (ModelState.IsValid)
  {                                                       using (HttpClient client = new HttpClient())
    db.Todos.Add(todo);                                   {
    db.SaveChanges();                                       DataContractJsonSerializer serializer = new
                                                        DataContractJsonSerializer(typeof(Todo));
    HttpResponseMessage response =
Request.CreateResponse(HttpStatusCode.Created, todo);      using (MemoryStream stream = new MemoryStream())
    response.Headers.Location =                            {
      new Uri(Url.Link("DefaultApi", new { id =              serializer.WriteObject(stream, todo);
todo.TodoId }));                                             stream.Seek(0, SeekOrigin.Begin);
    return response;
  }                                                          var json = new StreamReader(stream).ReadToEnd();
  else
  {                                                           var response = await client.PostAsync(serviceUrl as string,
    return                                              new StringContent(json, Encoding.UTF8, "application/json"));
Request.CreateResponse(HttpStatusCode.BadRequest);            response.EnsureSuccessStatusCode();
  }                                                         }
}                                                         }
                                                        }
使用 Windows Azure Mobile Services
在管理後台設定        Client-side 使用 SDK 寫
               public static MobileServiceClient service = new MobileServiceClient(
                   "https://你的WAMS.azure-mobile.net/",
                   "這裡放上你的 Key"
               );

               private IMobileServiceTable<Todo> table =
               service.GetTable<Todo>();

               private async void InsertTodoItem(Todo todo)
               {
                 await table.InsertAsync(todo);
               }
診斷、記錄和擴充
診斷                 擴充 - 運算
API 呼叫             向外擴充執行個體計數
CPU 時間             向上擴充 VM 大小
資料輸出

記錄                 擴充 - 儲存體
                   將行動服務租用戶向外擴充到
console.error(…)   專用的 SQL DB
console.log(…)
                   向上擴充 SQL 資料庫
預覽時期的免費額度

10個行動服務                         1GB SQL
                                 資料庫




                                          從 WA 免費試用
在共用執行個體上
   執行



           預覽期間無 SLA。只能使用小型執行個體。在預覽期間,可以 33% 的折扣從
           標準隨用隨付費率升級到保留執行個體。
服務價格

共用執行個體        保留執行個體        預覽階段
(多租用戶環境)      (私人 VM)       無 SLA

只提供小型執行個體,    只提供小型執行個體,
可以購買多個執行個體    可以購買多個執行個體    公開上市
                            99.9%
公開預覽上市時免費     預覽收費將會使用與網站
              相同的減價費率
最多 10 個應用程式
              最多 10 個應用程式
MobileService SDK for Windows 市集應用程式
使用 C#                                       使用 JavaScript
• 專案中加入 Windows         Azure Mobile        • 專案中加入 Windows       Azure Mobile
    Services Managed Client 的參考               Services JavaScript Client 的參考
•   Microsoft.WindowsAzure.MobileSer        • 引入
    vices 的 namespace                         /MobileServicesJavaScriptClient/Mob
• API 參考文件:                                   ileServices.js 檔案
    http://msdn.microsoft.com/en-           • API 參考文件:
    us/library/windowsazure/jj589724.aspx     http://msdn.microsoft.com/en-
                                              us/library/windowsazure/jj554207.aspx
存取資料
使用 C#                                                      使用 JavaScript
// 建立連接 Mobile Service 物件                                  // 建立 MobileService 的 client 物件
public MobileServiceClient MobileService = new             var client = new
MobileServiceClient(                                       Microsoft.WindowsAzure.MobileServices.MobileServiceClient(
    "https://你的服務名稱.azure-mobile.net/",                        "https://你的服務名稱.azure-mobile.net/",
    "你服務的存取金鑰"                                                 "你服務的存取金鑰"
);                                                         );

// 取得資料儲存的 table,並且指名是 TodoItem 的資料結果                      // 取得儲存資料的 table
private IMobileServiceTable<TodoItem> todoTable =          var todoTable = client.getTable('TodoItem');
MobileService.GetTable<TodoItem>();
                                                           // 呼叫 insert 方法將 JavaScript 物件儲存到 table 中,
// 插入資料,並且符合 .net 4.5 的非同步程式撰寫模式                           // 會根據物件的欄位來存放資料。並且符合 Windows Store App
await todoTable.InsertAsync(todoItem);                     // 中的非同步呼叫程式撰寫模式 可結合後續操作
                                                           todoTable.insert(todoItem).done(function (item) {
// 讀取資料,並且附上過濾條件                                               // 完成呼叫後做的事
items = todoTable                                          });
          .Where(todoItem => todoItem.Complete == false)
          .ToCollectionView();                             // 讀取資料並且附上 query 的條件
                                                           todoTable.where({ complete: false })
                                                                    .read()
                                                                    .done(function (results) {
                                                                        // 完成呼叫後做的事
                                                                    });
身份驗證服務
•   簡單完成 Microsoft Account, Facebook, Google 以及 twitter 的
    身份驗證機制
•   提供 Callback URL 完成 OAuth 2.0 的驗證流程
       不必自行處理 Web Server
•   僅可取得各服務的 User Id (類似流水號),需要取得更詳細的內
    容或權限還是要自行實作各服務的 API
       可用來配合資料儲存作區別
身份驗證
  使用 C#                                                        使用 JavaScript
    MobileServiceUser user;                                      var userId = null;
    private async void Auth()                                    var login = function () {
    {                                                              return new WinJS.Promise(function (complete) {
      while (user == null)                                           // 呼叫 login 開始登入及授權流程
      {                                                              client.login('facebook').done(function (results) {
        try                                                            userId = results.userId;
        {                                                              // 登入且授權完成
          user = await MobileService.LoginAsync(                     }, function (errors) {
            MobileServiceAuthenticationProvider.Facebook);             // 登入但不授權
          // 登入或授權成功                                                 });
        }                                                          });
        catch (InvalidOperationException)                        };
        {
          // 登入或授權失敗                                             var auth = function () {
        }                                                          login().then(function () {
      }                                                              if (userId === null) {
    }                                                                  // 登入或授權失敗
                                                                       auth(); // 再試一次
                                                                     }
                                                                   });
                                                                 };

                                                                 auth();



Ref: http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-users-dotnet/
推播通知服務架構
使用 WAMS 來送推播通知
推播通知 (push notification)
使用 C#                                                           使用 JavaScript
CurrentChannel = await                                          var channel;
PushNotificationChannelManager.CreatePushNotificationChannelF   var channelOperation = Windows.Networking.PushNotifications
orApplicationAsync();                                             .PushNotificationChannelManager
                                                                  .createPushNotificationChannelForApplicationAsync()
                                                                    .then(function (newChannel) {
                                                                      channel = newChannel;
                                                                   // channel.uri 即可送給 mobile service 作為送推播通知的路徑
                                                                    }, function (error) { console.log(error.message); });




Ref: http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-push-
dotnet/
在 Windows Phone 8 App 上新增資
料與 Windows Store App 使用 C#
完全相同
REST API
REST API
•   在官方尚未釋出該平台或語言的 SDK 時,可直接以呼叫
    REST APIs 的形式來使用 WAMS 的服務
         任何應用程式 ( web、desktop、…) 都可以運用
•   提供彈性可自行撰寫資料匯入、匯出或是管理界面
•   參考官方文件以瞭解目前的支援:
    http://msdn.microsoft.com/library/windowsazure/jj710108.aspx
REST API 使用範例 – 新增資料
POST /tables/TodoItem HTTP/1.1
Host: example.azure-mobile.net
Accept: application/json
Content-Type: application/json
Content-Length: 16
X-ZUMO-APPLICATION: THE_APPLICATION_KEY

{"text":"hello"}


200 OK
Content-Type: application/json
Content-Length: 23

{"id":1,"text":"hello"}
Android 寫入資料範例
URL url = new URL("https://你服務的名稱.azure-mobile.net/tables/表格名稱");
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
urlConn.setRequestMethod("POST");
urlConn.addRequestProperty("Content-Type", "application/json");
urlConn.addRequestProperty("ACCEPT", "application/json");
// 在 Request Header 填入服務金鑰
urlConn.addRequestProperty("X-ZUMO-APPLICATION", "你的服務金鑰");


DataOutputStream wr = new DataOutputStream(urlConn.getOutputStream());
// 寫入 JSON 格式的資料
wr.writeBytes("{"text":"Hello"}");
wr.flush();
wr.close();
Server Script
使用 Scripts 管理資料
•   JavaScript-based (ECMAScript5)
•   客製資料在 insert, update,
    delete, read 時的程序
•   在管理後台上直接修改
•   Windows Azure 提供模組及物
    件來完成複雜的操作
Server Script 使用情境
• 在 CRUD 時要修改欄位,或是其它的特殊處理
• 完成 CRUD 操作後,修改回應的內容
• 自訂 SQL 查詢語法 (透過 mssql.* 模組)
• 發送推播通知 (透過 push.wns.* 模組)
• …
現在就開始
http://aka.ms/AzureMSDNTW
https://www.windowsazure.com/en-us/develop/mobile/
http://msdn.microsoft.com/en-
us/library/windowsazure/jj554228.aspx


http://github.com/WindowsAzure-TrainingKit
http://github.com/WindowsAzure/azure-mobile-services


http://social.msdn.microsoft.com/Forums/zh-
tw/category/windowsazuretw
透過 Windows Azure Mobile Services 開發各平台 Apps

Contenu connexe

Tendances

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniterChun-Kai Wang
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文banq jdon
 
Asp.net開發要注意的是?
Asp.net開發要注意的是?Asp.net開發要注意的是?
Asp.net開發要注意的是?Rainmaker Ho
 
Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝Justin Lin
 
Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤Justin Lin
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践yiming he
 
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Justin Lin
 
X Fire开发指南
X Fire开发指南X Fire开发指南
X Fire开发指南yiditushe
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Justin Lin
 
Prototype开发手册
Prototype开发手册Prototype开发手册
Prototype开发手册yiditushe
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Justin Lin
 

Tendances (20)

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
第11章
第11章 第11章
第11章
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 
I os 16
I os 16I os 16
I os 16
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
10
1010
10
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文
 
Asp.net開發要注意的是?
Asp.net開發要注意的是?Asp.net開發要注意的是?
Asp.net開發要注意的是?
 
10
1010
10
 
Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝Spring 2.0 技術手冊第九章 - API 封裝
Spring 2.0 技術手冊第九章 - API 封裝
 
Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践
 
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
Spring 2.0 技術手冊第八章 - View 層方案、Web 框架整合
 
J Query Learn
J Query LearnJ Query Learn
J Query Learn
 
X Fire开发指南
X Fire开发指南X Fire开发指南
X Fire开发指南
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
 
Prototype开发手册
Prototype开发手册Prototype开发手册
Prototype开发手册
 
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
 

Similaire à 透過 Windows Azure Mobile Services 開發各平台 Apps

利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geekJohnson Gau
 
Azure mobileservice
Azure mobileservice Azure mobileservice
Azure mobileservice twMVC
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4Cat Chen
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
2023-netconf-deploy-azure-function-with-KEDA-on-aks
2023-netconf-deploy-azure-function-with-KEDA-on-aks2023-netconf-deploy-azure-function-with-KEDA-on-aks
2023-netconf-deploy-azure-function-with-KEDA-on-aksRoberson Liou
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍ling yu
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践taobao.com
 
[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hack[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hackpnig0s pnig0s
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记yiditushe
 

Similaire à 透過 Windows Azure Mobile Services 開發各平台 Apps (20)

利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 
Azure mobileservice
Azure mobileservice Azure mobileservice
Azure mobileservice
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
2023-netconf-deploy-azure-function-with-KEDA-on-aks
2023-netconf-deploy-azure-function-with-KEDA-on-aks2023-netconf-deploy-azure-function-with-KEDA-on-aks
2023-netconf-deploy-azure-function-with-KEDA-on-aks
 
YUIconf2010介绍
YUIconf2010介绍YUIconf2010介绍
YUIconf2010介绍
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
I os 07
I os 07I os 07
I os 07
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践
 
[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hack[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hack
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
twMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure FunctionstwMVC#23 | 快速上手 Azure Functions
twMVC#23 | 快速上手 Azure Functions
 
敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3
 
RESTful
RESTfulRESTful
RESTful
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
Vue.js
Vue.jsVue.js
Vue.js
 

Plus de Eric ShangKuan

運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式
運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式
運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式Eric ShangKuan
 
Introducing .NET Core Open Source
Introducing .NET Core Open SourceIntroducing .NET Core Open Source
Introducing .NET Core Open SourceEric ShangKuan
 
Azure machine learning overview
Azure machine learning overviewAzure machine learning overview
Azure machine learning overviewEric ShangKuan
 
Internet Explorer 10: 重新想像網站設計
Internet Explorer 10: 重新想像網站設計Internet Explorer 10: 重新想像網站設計
Internet Explorer 10: 重新想像網站設計Eric ShangKuan
 
Metro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' ViewMetro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' ViewEric ShangKuan
 
Building Python Applications on Windows Azure
Building Python Applications on Windows AzureBuilding Python Applications on Windows Azure
Building Python Applications on Windows AzureEric ShangKuan
 
Tuning Web Performance
Tuning Web PerformanceTuning Web Performance
Tuning Web PerformanceEric ShangKuan
 
Practical Google App Engine Applications In Py
Practical Google App Engine Applications In PyPractical Google App Engine Applications In Py
Practical Google App Engine Applications In PyEric ShangKuan
 
An Introduction to GAEO web framework
An Introduction to GAEO web frameworkAn Introduction to GAEO web framework
An Introduction to GAEO web frameworkEric ShangKuan
 
The Google App Engine Oil Framework
The Google App Engine Oil FrameworkThe Google App Engine Oil Framework
The Google App Engine Oil FrameworkEric ShangKuan
 

Plus de Eric ShangKuan (16)

運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式
運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式
運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式
 
Introducing .NET Core Open Source
Introducing .NET Core Open SourceIntroducing .NET Core Open Source
Introducing .NET Core Open Source
 
In
InIn
In
 
Azure machine learning overview
Azure machine learning overviewAzure machine learning overview
Azure machine learning overview
 
Internet Explorer 10: 重新想像網站設計
Internet Explorer 10: 重新想像網站設計Internet Explorer 10: 重新想像網站設計
Internet Explorer 10: 重新想像網站設計
 
Metro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' ViewMetro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' View
 
Building Python Applications on Windows Azure
Building Python Applications on Windows AzureBuilding Python Applications on Windows Azure
Building Python Applications on Windows Azure
 
Microsoft and jQuery
Microsoft and jQueryMicrosoft and jQuery
Microsoft and jQuery
 
Tuning Web Performance
Tuning Web PerformanceTuning Web Performance
Tuning Web Performance
 
Intro To Google Maps
Intro To Google MapsIntro To Google Maps
Intro To Google Maps
 
Practical Google App Engine Applications In Py
Practical Google App Engine Applications In PyPractical Google App Engine Applications In Py
Practical Google App Engine Applications In Py
 
An Introduction to GAEO web framework
An Introduction to GAEO web frameworkAn Introduction to GAEO web framework
An Introduction to GAEO web framework
 
Intro. to JavaScript
Intro. to JavaScriptIntro. to JavaScript
Intro. to JavaScript
 
Intro. to CSS
Intro. to CSSIntro. to CSS
Intro. to CSS
 
jQuery Tutorial
jQuery TutorialjQuery Tutorial
jQuery Tutorial
 
The Google App Engine Oil Framework
The Google App Engine Oil FrameworkThe Google App Engine Oil Framework
The Google App Engine Oil Framework
 

透過 Windows Azure Mobile Services 開發各平台 Apps

  • 2. Agenda • Windows Azure Mobile Service 平台介紹 • 各平台 App 開發實作 • 深入剖析 WAMS
  • 4. Mobile Services  快速建立 app 的「後端」  資料儲存、身份驗證以及推送通知  REST API  目前官方提供 Windows 8, Windows Phone 8 以及 iOS SDK
  • 5. <//> 自訂 Script(s)
  • 6. 為什麼要使用 Mobile Services? • 不必撰寫維護雲端程式 專心在 app 端開發 RESTful API 不限定單一 app 平台使用 • 提供 app 開發的基礎建設 彈性擴充 資料儲存、身份驗證、推播通知 官方釋出主流平台 SDK
  • 7. 開發一個 App… • 開發 Web 程式處理 app 的 request • 實作資料存取的方式
  • 8. 開發一個 App… • 開發 Web 程式處理身份驗 證的問題 • 存取資料時的身份驗證
  • 9. 開發一個 App… 不使用 WAMS 使用 WAMS • 開發伺服器應用程式 • 在 Windows Azure 後台建立一個新的 • (server-side) 定義並實作 REST API, WAMS 服務 並且使用 JSON 資料格式 • 下載欲開發平台 SDK • (server-side) 實作 sql/nosql 處理不 • (client-side) 使用 SDK 直接處理資料儲 同的資料儲存需求 存、身份驗證、推播通知等功能 • (server-side) 實作各身份驗證機制 • (client-side) app 開發,並且直接介 接 REST API
  • 10. 自己寫 Server-side 及 Client-side Server-side 處理 POST Client-side 寫介接程式碼 // POST api/todo public static async void CreateTodo(Todo todo) public HttpResponseMessage PostTodo(Todo todo) { { string serviceUrl = "http://example.com/path/to/todo"; if (ModelState.IsValid) { using (HttpClient client = new HttpClient()) db.Todos.Add(todo); { db.SaveChanges(); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Todo)); HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, todo); using (MemoryStream stream = new MemoryStream()) response.Headers.Location = { new Uri(Url.Link("DefaultApi", new { id = serializer.WriteObject(stream, todo); todo.TodoId })); stream.Seek(0, SeekOrigin.Begin); return response; } var json = new StreamReader(stream).ReadToEnd(); else { var response = await client.PostAsync(serviceUrl as string, return new StringContent(json, Encoding.UTF8, "application/json")); Request.CreateResponse(HttpStatusCode.BadRequest); response.EnsureSuccessStatusCode(); } } } } }
  • 11. 使用 Windows Azure Mobile Services 在管理後台設定 Client-side 使用 SDK 寫 public static MobileServiceClient service = new MobileServiceClient( "https://你的WAMS.azure-mobile.net/", "這裡放上你的 Key" ); private IMobileServiceTable<Todo> table = service.GetTable<Todo>(); private async void InsertTodoItem(Todo todo) { await table.InsertAsync(todo); }
  • 12. 診斷、記錄和擴充 診斷 擴充 - 運算 API 呼叫 向外擴充執行個體計數 CPU 時間 向上擴充 VM 大小 資料輸出 記錄 擴充 - 儲存體 將行動服務租用戶向外擴充到 console.error(…) 專用的 SQL DB console.log(…) 向上擴充 SQL 資料庫
  • 13. 預覽時期的免費額度 10個行動服務 1GB SQL 資料庫 從 WA 免費試用 在共用執行個體上 執行 預覽期間無 SLA。只能使用小型執行個體。在預覽期間,可以 33% 的折扣從 標準隨用隨付費率升級到保留執行個體。
  • 14. 服務價格 共用執行個體 保留執行個體 預覽階段 (多租用戶環境) (私人 VM) 無 SLA 只提供小型執行個體, 只提供小型執行個體, 可以購買多個執行個體 可以購買多個執行個體 公開上市 99.9% 公開預覽上市時免費 預覽收費將會使用與網站 相同的減價費率 最多 10 個應用程式 最多 10 個應用程式
  • 15.
  • 16. MobileService SDK for Windows 市集應用程式 使用 C# 使用 JavaScript • 專案中加入 Windows Azure Mobile • 專案中加入 Windows Azure Mobile Services Managed Client 的參考 Services JavaScript Client 的參考 • Microsoft.WindowsAzure.MobileSer • 引入 vices 的 namespace /MobileServicesJavaScriptClient/Mob • API 參考文件: ileServices.js 檔案 http://msdn.microsoft.com/en- • API 參考文件: us/library/windowsazure/jj589724.aspx http://msdn.microsoft.com/en- us/library/windowsazure/jj554207.aspx
  • 17. 存取資料 使用 C# 使用 JavaScript // 建立連接 Mobile Service 物件 // 建立 MobileService 的 client 物件 public MobileServiceClient MobileService = new var client = new MobileServiceClient( Microsoft.WindowsAzure.MobileServices.MobileServiceClient( "https://你的服務名稱.azure-mobile.net/", "https://你的服務名稱.azure-mobile.net/", "你服務的存取金鑰" "你服務的存取金鑰" ); ); // 取得資料儲存的 table,並且指名是 TodoItem 的資料結果 // 取得儲存資料的 table private IMobileServiceTable<TodoItem> todoTable = var todoTable = client.getTable('TodoItem'); MobileService.GetTable<TodoItem>(); // 呼叫 insert 方法將 JavaScript 物件儲存到 table 中, // 插入資料,並且符合 .net 4.5 的非同步程式撰寫模式 // 會根據物件的欄位來存放資料。並且符合 Windows Store App await todoTable.InsertAsync(todoItem); // 中的非同步呼叫程式撰寫模式 可結合後續操作 todoTable.insert(todoItem).done(function (item) { // 讀取資料,並且附上過濾條件 // 完成呼叫後做的事 items = todoTable }); .Where(todoItem => todoItem.Complete == false) .ToCollectionView(); // 讀取資料並且附上 query 的條件 todoTable.where({ complete: false }) .read() .done(function (results) { // 完成呼叫後做的事 });
  • 18. 身份驗證服務 • 簡單完成 Microsoft Account, Facebook, Google 以及 twitter 的 身份驗證機制 • 提供 Callback URL 完成 OAuth 2.0 的驗證流程 不必自行處理 Web Server • 僅可取得各服務的 User Id (類似流水號),需要取得更詳細的內 容或權限還是要自行實作各服務的 API 可用來配合資料儲存作區別
  • 19. 身份驗證 使用 C# 使用 JavaScript MobileServiceUser user; var userId = null; private async void Auth() var login = function () { { return new WinJS.Promise(function (complete) { while (user == null) // 呼叫 login 開始登入及授權流程 { client.login('facebook').done(function (results) { try userId = results.userId; { // 登入且授權完成 user = await MobileService.LoginAsync( }, function (errors) { MobileServiceAuthenticationProvider.Facebook); // 登入但不授權 // 登入或授權成功 }); } }); catch (InvalidOperationException) }; { // 登入或授權失敗 var auth = function () { } login().then(function () { } if (userId === null) { } // 登入或授權失敗 auth(); // 再試一次 } }); }; auth(); Ref: http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-users-dotnet/
  • 22. 推播通知 (push notification) 使用 C# 使用 JavaScript CurrentChannel = await var channel; PushNotificationChannelManager.CreatePushNotificationChannelF var channelOperation = Windows.Networking.PushNotifications orApplicationAsync(); .PushNotificationChannelManager .createPushNotificationChannelForApplicationAsync() .then(function (newChannel) { channel = newChannel; // channel.uri 即可送給 mobile service 作為送推播通知的路徑 }, function (error) { console.log(error.message); }); Ref: http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-push- dotnet/
  • 23.
  • 24. 在 Windows Phone 8 App 上新增資 料與 Windows Store App 使用 C# 完全相同
  • 25.
  • 27. REST API • 在官方尚未釋出該平台或語言的 SDK 時,可直接以呼叫 REST APIs 的形式來使用 WAMS 的服務 任何應用程式 ( web、desktop、…) 都可以運用 • 提供彈性可自行撰寫資料匯入、匯出或是管理界面 • 參考官方文件以瞭解目前的支援: http://msdn.microsoft.com/library/windowsazure/jj710108.aspx
  • 28. REST API 使用範例 – 新增資料 POST /tables/TodoItem HTTP/1.1 Host: example.azure-mobile.net Accept: application/json Content-Type: application/json Content-Length: 16 X-ZUMO-APPLICATION: THE_APPLICATION_KEY {"text":"hello"} 200 OK Content-Type: application/json Content-Length: 23 {"id":1,"text":"hello"}
  • 29.
  • 30. Android 寫入資料範例 URL url = new URL("https://你服務的名稱.azure-mobile.net/tables/表格名稱"); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.setDoInput(true); urlConn.setDoOutput(true); urlConn.setRequestMethod("POST"); urlConn.addRequestProperty("Content-Type", "application/json"); urlConn.addRequestProperty("ACCEPT", "application/json"); // 在 Request Header 填入服務金鑰 urlConn.addRequestProperty("X-ZUMO-APPLICATION", "你的服務金鑰"); DataOutputStream wr = new DataOutputStream(urlConn.getOutputStream()); // 寫入 JSON 格式的資料 wr.writeBytes("{"text":"Hello"}"); wr.flush(); wr.close();
  • 32. 使用 Scripts 管理資料 • JavaScript-based (ECMAScript5) • 客製資料在 insert, update, delete, read 時的程序 • 在管理後台上直接修改 • Windows Azure 提供模組及物 件來完成複雜的操作
  • 33. Server Script 使用情境 • 在 CRUD 時要修改欄位,或是其它的特殊處理 • 完成 CRUD 操作後,修改回應的內容 • 自訂 SQL 查詢語法 (透過 mssql.* 模組) • 發送推播通知 (透過 push.wns.* 模組) • …
  • 34.