Google 雲端通訊(GCM),英文名稱為 Google Gloud Messaging,至於 GCM 的用途,主要就是「開發人員可透過此服務將自己伺服器中的資料傳送給 Android 應用程式使用」,較為細節的說明則可以參考以下 Google 中文官網說明

https://support.google.com/googleplay/android-developer/answer/2663268?hl=zh-Hant

這個功能,筆者認為在實務上可以用於很多方面,雖然官方說並不保證設備端一定可以收到訊息,但是看在「免費」的份上,應該也沒什麼好挑剔的了吧…既然想用,勢必就得瞭解 GCM 的來龍去脈,沒想到栽進去之後,才發現不但 XE5 目前尚不直接支援,就連 Google 大師也找不到任何有關 XE5 與 GCM 的 solution,找得到的訊息就是也有人在問,但是沒有一個直接的解答... like this

https://forums.embarcadero.com/thread.jspa?threadID=93361

http://stackoverflow.com/questions/18891486/broadcast-receivers-in-delphi-xe5-android

在參加完上一次 Gordon 大師的研討會之後,Gordon 大師不是說透過 JxxxClass = interface(JObjectClass)、Jxxx = interface(JObject),再用 TJxxx = class(TJavaGenericImport<JxxxClass, Jxxx>)  就可以把 XE5 尚未支援的 Java class import 進來使用嗎?這部分並沒有說錯,但是讓我們來看一下 GCM Client Receive a message 在 Google 官網部分的說明,指出是要「繼承」一個 xxxBroadcastReceiver(官網舉例是用WakefulBroadcastReceiver),而主要繼承的標的物就是 onReceive 這個事件,但是偏偏目前 XE5 沒有辦法實做繼承 java class 的部分,畢竟是不同的兩個 Instance,so...

這也是為什麼 blog 好一陣子沒有更新的原因,因為時間、白頭髮都花下去了,但是各種嘗試都沒結果...一直到了前幾天。

讓我們回過頭來去思考這件事,其實 Gordon 在研討會上銜接 Barcode 的例子已經說明了一切,如果要接類似 java class 的 event,目前唯一的方法就是寫一個繼承下來的 java class,然後編譯成 classes.dex,並且把這個新的 java class import 進來給 XE5 用,這樣就接得到 java class 的 event 了。說起來好像不是粉難,做起來呢?

筆者只能說 GCM 這塊,是這個系列到目前為止最硬的部分,可能有違「輕鬆」兩字,所以才會特別撰寫「前言」,把一些前因後果交代一下。話說 Gordon 大師當時在研討會,可能礙於時間關係,雖然有講解原理,但是這部分在實做的時候,大多只是蜻蜓點水交代一下,然後就實機展示啦,這...叫我們這些小蘿蔔頭怎麼依樣畫葫蘆啊,只好回頭再求教 Google 大師,其實 Gordon 大師說明的部分,同樣是之前文章中有提到的人 Brian Long(簡稱 blong 好了) 有在他的 blog 中撰寫到,只是刊出的時間比 Gordon 大師的研討會晚了那麼幾天。讓我們看一下是哪篇文章呢?

http://blog.blong.com/2013/11/delphi-and-android-services-part-2.html

沒錯,就是這篇,也是目前 blong blog 上最後一篇文章,刊出的時間為 2013/11/25。文章中主要提到的部分是舉例說明 Receiver 與 Service 如何撰寫,雖然 blong 老大並沒有直接舉例 GCM,但如同之前提到的,其實 GCM 在 Client 端就是需要一個 Receiver 來接收來自 Google 主機端傳送的訊息,所以只要看得懂 blong 的 blog,你就可以照著做把 GCM 的部分給實做出來,說難不難,說簡單也還真的講不出口。

如果覺得看 blong 的文章與範例太艱澀的話,那麼就讓小弟代勞吧...在接下來的文章中,一一說明從設備端註冊、傳送訊息的主機端撰寫,到最後如何讓設備端接收到訊息...

 

to be continued...

 

arrow
arrow

    縹緲 發表在 痞客邦 留言(1) 人氣()