CIO
|
PCDIY!
|
旗標圖書
|
旗景數位影像
|
讀者服務
首 頁
即時新聞
業界動態
最新活動
企業採購
精選文章
線上教學
品牌活動
程式碼下載
雲端運算智庫
最近新增的
精選文章
AP內建AI引擎 Mist Cloud平台分析能力強 Juniper Mist AI領先全球 改善WiFi穩定、效能首選
解決IT供應鏈攻擊
內部威脅的七個警訊
遠百以專案辦公室推動數位體驗
多廠牌與多重電信業者網路架構的挑戰與機會
德明科大啟用電貿暨AI實習基地 ViewSonic ViewBoard 智慧互動電子白板 扮要角
淺談計算誤差
秀傳醫療體系統 以Lenovo HyperConverged HX 超融合架構扎穩智慧醫療發展基礎
模組化設計 偵測率達99.99% 全面防杜惡意郵件入侵 首選Cellopoint Email UTM
滿足網路管理與檔案安全傳輸需求,Ipswitch的MOVEit及WhatsUp Gold一次完整提供
來自學界的資料分析利器 - Weka 與 R
北醫建置肺癌資料庫,透過深度標註訓練AI,協助醫師早期發現癌症
北榮AI門診上路!人工智慧判讀腦瘤,有效縮短醫師確診時間
台灣智慧機器人玩具聯盟攜手英閱音躍研創 推廣T. Robot程式教育,協助國中小學扎根培養運算思維
一場與時間賽跑的戰役 ,人工智慧加速心血管疾病診斷
最多人點閱的
精選文章
免費IT建置--Linux系統操作與管理
初探Hadoop開放原始碼平台環境
免費IT建置--網頁伺服器的完美組合LAMP(下)
免費IT建置--檔案共享與檔案伺服器
Linux下的防火牆(基礎篇)
Linux下的防火牆(進階篇)
N.Y.BAGELS CAFE善用SAP Business One
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 影片播放器範例
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 線上查詢匯率
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 擲骰子遊戲
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 音樂播放器範例
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 來電黑名單
免費IT建置--網頁伺服器的完美組合LAMP(上)
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 繪圖板範例
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ Matrix應用範例
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
Windows 程式開發-雲端與移動式手機整合(下)
文‧圖/何孟翰
2013/4/10 下午 05:23:02
Mobile Service與GCM
在Android的架構下,Activity必須要是處在Active才能有作用,而如果想要接收一些非同步的訊息,特別是在應用程式沒有執行時,此時就需要其它的元件配合。例如SMS簡訊的接收,或者像是skype, facebook的訊息,甚至是現在的line,whatsapp等等,由於它們的用途都是在程式不在執行時能夠接收並顯示訊息,所以必須要使用Activity之外的元件。
在Android主要的元件中有一個Broadcast Receiver,就是可以處理這種簡訊類的應用,它可以類似常註程式,當有訊息以Intent的形式廣播時,就可以啟動並且執行對應的程式片斷。此時再搭配Android的訊息告知,就可以順利的將這類訊息的告知顯示在畫面上。
除了Android端的處理之外,Google在伺服器端也運用了優勢,在Android2.2/2.3時推出了C2DM,也就是Cloud to Device Message,使用雲端的裝置,將訊息從伺服器推送至客戶端。同時這個解決方案正如同一般的簡訊般靈活,是可以作到任何端點的推播。而也由於這類的應用日益普及,Google在去年將C2DM進化成GCM,讓訊息推播的內容變成4K的大小之外 ,並且也增加了一些使用JSON的格式支援。除此之外,Google更推出了Google Cloud Messaging for Android Library的函式庫,讓使用者在開發Android的這類推播時,能夠更便利的達成。因此Windows Azure mobile service也同樣的使用這個技術。因此如果你要使用GCM的推播,請先使用Android的SDK Manager,下載Google Cloud Message for Android Library的函式庫如圖9。
▲ 圖9 下載Google Cloud Messaging for Android Library
因此如果你是在自己的專案中要使用GCM的支援,請先下載這個套件,並且在etras下的google的gcm目錄中找到gcm.jar,將它複製進libs目錄中,則可以在Android的應用程式中實作GCM相關的功能。
GCM的設定與Windows Mobile Service
GCM的元件由幾個部份所組成,除了在Android的客戶端實作之外,其實還是需要一個中央的應用程式伺服器,來負責和GCM的伺服器溝通。你可以將GCM想像成是郵局的郵差,它們知道如何遞送貨物到正確的地址,但是要送給誰,要送什麼內容,都不是 郵差來決定,而是必須要讓這個應用程式來決定。因此,這個任務如果是自己規畫是必須要讓自己實作,而如果是使用了Azure Mobile Service,則這個任務就可以交給Azure雲端的機器。
因此首先為了要讓 Azure和GCM溝通,必須先登入code.google.com/apis/console,新增一個專案。首先這個專案會有一個ID,必須作為到時候客戶端能夠和GCM建立協定的依據,因此建立專案後,可以在Overview中看到這個專案的Project Number如圖10。
▲ 圖10 在Google API console中建立專案並取得Project Number
而建立好專案之後,請你切換到Services的標籤,找到Google Cloud Messaging for Android的標籤,在確認過版權和 說明之後,將開關打開成ON如圖11。
▲ 圖 11 開啟GCM for Android
再來在API Access的畫面,請按下Create new Server Key…的標籤建立一個伺服器的驗証碼 ,將API Key複製下來,並且回到Azure的管理畫面,在該應用服務中Push標籤,可以看到google cloud messaging setting 的標籤,在API Key中請填入剛才取得的值如圖12。
▲ 圖12 取得API Key並填入Azure的畫面<
Android端實作的注意事項
當你在Azure的平台上輸入了API Key,也就代表著你的這個azure專案和 Google Cloud已經有了一個正式的認証,但是這個訊息能夠送到哪裡,哪些應用程式能夠接收到這一類的訊息,是另外的一件事情。因此,你必須先指定這個接收推送程式的客戶端,也就是在圖10中的SENDER_ID。
取得之後,可以將它送進com.google.android.gcm.GCMRegister的這個類別中。這個類別如果你有自己手寫過Android的C2DM或GCM就可以理解,它會起動一個 GCM註冊的intent,並且啟動這個intent的service,之後傳回的訊息就可以經由broadcast reciver接收並且傳回這個裝置的註冊碼。
這個註冊碼和一般的機碼類似,它是由你的Google帳號登入後和裝置運算後產生出的一長串碼。因此在產生機碼前,第一個請你先確認你的裝置是使用Google的API而非Android的API如圖13。
▲ 圖13確認產生的是Google API而非Android的API
同時,如果是Google的API,則你在設定的帳號登入畫面,看到的會有Google的帳號登入形式如圖14。此時你必須要使用一組合法的Google/Gmail的帳號密碼登入。你並不需要使用之前登入伸請GCM的gmail帳號作登入,此處的帳號其實就像是未來使用你的服務的使用者一樣,是任意的,直接在Google PLAY上下載的這些帳號密碼。
▲ 圖 14 Google API的登入畫面
而取得了裝置的機碼之後,在傳送新增的這些ToDoItem時,這個裝置的機碼就會變成channel的形式儲存在雲端,因此如果你在Azure平台要傳送訊息時,Azure就會幫你對這個機碼作訊息傳送的動作。
因此,你可以看到在Azure這一端其實幫你處理了裝置的機碼,和 伺服器的API Key,因此它提供的一個很基本的機制,就是 對在伺服器端提供了腳本,讓你在碰到某個情況,例如雲端的資料表格被新增,刪除或者有任何的異動時,進行這些push的訊息告知。
因此,在接收端你可以實作一個GCMBaseIntentService的子類別,在建構子時呼叫GCMBaseIntentService的建構子,並將SENDER_ID傳入,而在onRegistered時設定這個裝置的機碼。最後在onMessage(),也就是訊息已經傳遞到時,將Notification的builder,產生一個訊息的告知,並且產生在畫面上。
Azure mobile service的其它功能
既然Azure mobile service是一個專門為了mobile開發的雲端平台,所以其實很多實作的細節都以移動式設備為考量,例如在輸入資料時,你可以在伺服器端作一些資料驗証的動作,這樣在伺服器端腳本的設定可以減少很多客戶端使用Objective C/C#/Java所作驗証的時間。同時也由於mobile機架的資料存取記憶體有限,網路頻寬有限,在雲端可以作到輕易的資料分頁和分節,所以只要搭配前端的一份簡單的前一頁和上一頁,就可以從伺服器中將不同區塊的資料分段的顯示出來,一方面讓下載的時間不致過長,一方面讓顯示的速度更快。
結語
隨著iOS和 Android勢力的均衡,再加上其它新的OS的興起如Windows Phone和其它Linux based的作業系統,你可以發現專注於某一個平台的意思就是勢必要放下另外其它平台的商機。而雖然有一些利用HTML達成跨平台的solution,但是這樣又會造成效能或者功能上的妥協。
因此,如果要兼顧到效能和功能,原生的應用程式開發顯然有其必要性,而這時像Windows Azure for mobile service的重要性就更加顯露了。藉著上一回和這一回,你可以發現其實Mobile Service是將許多在裝置端需要實作的內容,例如驗証,授權和存取的機制都放置在伺服器上,這樣除了可以減少在不同的平台依照同樣功能實作同樣的內容之外,還可以藉著統一一個實作的方式,而達成便於管理的效果。至於Windwos Azure平台中mobile service與其它的功能,例如如何在伺服器端定時作一些工作項目,例如定時去遠端執行一些資料的存取或計算,或者是對於多媒體影音的一些處理這些更特化的功能,我們將在後面的文章中再和大家介紹。
回首頁...
關於RUN!PC
|
廣告刊登
|
聯絡我們
|
讀者服務
|
雜誌訂閱
|
出刊&補寄時間
-- Copyright© FLAG INFORMATION CO., LTD. 旗訊科技(股)公司. All rights reserved. 本站圖文著作權所有 未經授權 不得任意轉載使用 --
-- 請使用1024*768螢幕解析度,IE 7.0或firefox 3.0以上瀏覽器,以達到最佳閱讀效果--