查看完整版本: 如何使用推播系統推播訊息到手機?
頁: [1] 2

a7813195 發表於 2017-5-4 12:20 PM

如何使用推播系統推播訊息到手機?

因此問題牽涉甚廣 不了解該PO到哪個版
所以我PO在這 如若有錯煩請告知

問題是這樣的,
我想要做一個推播系統到手機 而推播的訊息是依照我目前電腦上某軟體的數據自動推播訊息到手機
(例如 我目前電腦軟體上出現錯誤 伺服器自動發送訊息到手機提醒)
據我所知有GCM FCM...之類的推播server 那麼有哪個可以完成我這個動作呢?
(有看過某些推播訊息是在推播server人工打字後按下發送後才會推播到手機)

再問個問題,
有考慮過要用原生APP、web APP、混合式APP
因為我目前的東西,是希望能夠在不同系統上執行,
而結果不需要多快速瀏覽,基本上只要提醒手機就可以了
那麼我是否是使用混合式APP就好 那麼混合式APP是使用HTML去寫呢還是?(因為查詢資料實力太差 所以網路上有資源也不太會運用 找書又不知道搜尋什麼關鍵字)
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

chevylin0802 發表於 2017-5-4 05:41 PM

本帖最後由 chevylin0802 於 2017-5-5 11:11 AM 編輯

其實推播系統只是即時通信的一種變型方式
不一定只能選擇GCM, FCM或其它的系統架構來做
比如LINE也有開放如何製作LINE客戶端的方式來作為商業用戶的蓷播平台
比較麻煩的反而是你如何將電腦軟體上的資料自動的往推播系統丟出
至於接收端的部份
其實還比較好處理
網路上有很多的範例
並不是那麼難找
而且也有中文的網站有提供你一步一步怎麼做的指導
只是如果你採用的是GCM或FCM的話
那還需要到google去申請加密密鑰

我是不太去重視這種推播技術的
畢竟它也只不過是把XMPP加到系統裏面
只不過就是多了可以雙向傳遞文字訊息的功能
要比起真正完整的即時通訊技術裏包括圖型語音以及影像雙向溝通的特性
要來得粗淺很多
而即時通信系統卻是可以自主自行架設在自己的公司或家裏面
完全不需要依靠甚至於被谷歌綁死
也不會有資料被竊取的風險以及顧慮


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

a7813195 發表於 2017-5-5 08:07 PM

是呀
我並不想要仰賴GCM之類的系統架構
說白些 不就是把訊息傳送到用戶端 就如同是簡訊那樣
只是現在網路發達 大部分都有行動網路
所以也解決了免花費的問題
既然只是傳送到用戶端
為何我不能寫個程式利用物聯網去抓取目前數值
一更新上傳到各個手機呢?
只是想歸想 我知識尚淺 很多部分也力不從心
利用GCM或是FCM可能可以輕鬆做到推播機制
但是如果要我要的結果 可能結果不得而知

好像有畢業的學長姐做過
但是他們似乎是使用HTML 就如同大大說的好像跟XMPP有關係?
只是畢業了我也沒辦法去問 因為推播機制這個問題是目前最主要的問題點...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chevylin0802 發表於 2017-5-6 01:24 PM

本帖最後由 chevylin0802 於 2017-5-6 01:28 PM 編輯

這是一個有點麻煩的問題
首先是你要如何自動截取到電腦軟體上的資料
這個部份是需要寫程式的
因為你可以在電腦架一個網頁伺服器
這並不難做
只是花一點時間就可以完成架設
HTML語法本身並不難
一般來講你可以使用WebSocket技術來主動傳送資料給客戶端
也就是瀏覽器
WebSocket可以靠Javascript來寫(通常會使用Node.js現成的websocket程式庫)
這也沒有問題
難的是你在伺服器端要如何寫WebSocket的程式
比較簡單的作法來講通常是寫一段Socket.IO的WebSocket程式
只是看你自己了解多少
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

a7813195 發表於 2017-5-7 02:01 AM

chevylin0802 發表於 2017-5-6 01:24 PM static/image/common/back.gif
這是一個有點麻煩的問題
首先是你要如何自動截取到電腦軟體上的資料
這個部份是需要寫程式的


抱歉大大 我知識尚淺
不知大大是否有更明確的指示
寫程式算式死的 但邏輯觀念可能會影響到整個做法與演進
擷取資料可以使用c++或C#做出exe去自動抓取與傳送
但是推播這部分真的沒什麼想法...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

chevylin0802 發表於 2017-5-7 11:11 AM

本帖最後由 chevylin0802 於 2017-5-7 02:07 PM 編輯

a7813195 發表於 2017-5-7 02:01 AM static/image/common/back.gif
抱歉大大 我知識尚淺
不知大大是否有更明確的指示
寫程式算式死的 但邏輯觀念可能會影響到整個做法與演進 ...
這就是我在講的比較麻煩的部份的原因
因為微軟的Windows系統太封閉了
你還真的只能用C++或C#去搞
那種東西我還真的沒去碰過
畢竟做伺服器的人大多採用的都是Linux的平台
尤其還是做嵌入式系統的廠商
從來不會把需要授權金的微軟系統考慮進去
Linux系統可以寫的程式也很多樣化
從C++, PHP, Python, Java, Javascripts(Node.js), 到Ruby on Rail ......等
各式各樣的程式語言都可以用
但就是不會去用到C#
所以我也沒辦法幫你

至於類似推播技術的系統
主要還是IRC或者IM
所謂的IRC/IM系統指的就是像即時通信軟體這類的
當然如果還加上影音功能的話也可以稱它為VoIP
比如已經有10幾年歷史的SIP通信標準
以及也有10年歷史的Jabber(一種開源軟體系統)
Jabber所使用的通信標準也就是XMPP

FCM或GCM都需要在Google註冊取得金鑰
而它很麻煩的地方就是你只能拿它當實驗用途
它實在很難作為商業或公益用途的應用
畢竟它同時可以發佈的客戶端不超過1000個
然而商業用途或公益用途就可想而知
必需要靠自己架站來完成而不是透過Google的雲端平台或Firefox的雲端平台

當然如果只是學校專案並沒有考慮到靠它來作為商業運轉的用途或公益團體平台的話
確實可以直接採取FCM/GCM這個方式去做
但它就完全沒有後續研究的意義可言
如果是專科學校的話就無所謂
如果是大學甚至研究所的專題的話
恐怕要考慮深遠一點

WebSocket技術說穿了就是使用一種Javascripts的語法綁在HTML上
而這種Javascripts的程式卻是透過打通一個兩端都事先約定好的通信埠來作為通道互傳信息
像HTTP通信協議用的是80, HTTPS則是443一樣
WebSocket可以讓你採用一個固定的通道, 比如8000
接下來就可以讓兩個客戶端或者客戶端與伺服器端相互傳遞資料內容
所謂的GCM/FCM推播系統也是一樣的做法
只是在WebSocket所使用的通道裏傳遞的是XMPP規範的文件
而不同的地方是
WebSocket的部份是你需要靠自己架設的網頁伺服器寫程式去完成的
而它完全不需要再去透過Google或FireFox的伺服器進行
這相對在後續研發的延展性來說
就會比FCM/GCM要來得大一些
而且WebRTC技術也是延伸自WebSocket
WebRTC也就是網頁版的即時通訊技術
包括文字以及影音都可以傳遞

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

a7813195 發表於 2017-5-8 12:11 PM

chevylin0802 發表於 2017-5-7 11:11 AM static/image/common/back.gif
這就是我在講的比較麻煩的部份的原因
因為微軟的Windows系統太封閉了
你還真的只能用C++或C#去搞


之前在上java課程的時候
有接觸到使用socket去做檔案護傳的部分
我在想 之後會不會面臨到
server端發送訊息到client端 但是client端沒有在線上
導致無法一送一收
我目前為了這個專題
我有找了幾本書
1.當猛虎遇上Android
2.android APP開發活用範例速查辭典
3.arduino物聯網專案實作
4.JavaScript+jQuery Mobile+Node.js跨平台網頁設計範例教本
5.Visual Studio 跨平台APP實戰特訓班
6.跨平台Android.iPhone 程式開發
7.android從入門到雲端
8.Cordova/PhoneGap的123個問題

大大說的我盡可能去消化思考
列出上面這些書是希望大大能夠給我一些意見
我可能那些書可以參考之類的
當初不知道我會用到什麼 連app的類型都還沒考慮好
現在是決定要用混合式APP 所以我借了蠻多跨平台的書
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chevylin0802 發表於 2017-5-8 01:20 PM

本帖最後由 chevylin0802 於 2017-5-8 01:23 PM 編輯

a7813195 發表於 2017-5-8 12:11 PM static/image/common/back.gif
之前在上java課程的時候
有接觸到使用socket去做檔案護傳的部分
我在想 之後會不會面臨到

連線中斷是會發生的
不過JAVA的Socket IO本身就會產生出Exception
只是看你如何去完善Exception裏的程式而已
通常一般的範例都是死的
只會給你print out 錯誤訊息
並不會告訴你如何處理
但事實上如果有Exception發生的話
就直接把socket給close
再重新靠listen來等待新的連線就可以
只是你需要把server端的程式寫成multi thread的方式就可以不必擔心跳出來的問題
至於client端的部份
在Exception發生之後
只需要檢查網路是否通暢
等待網路通暢的時候再重新發出connect連線請求
重新連線
就可以繼續等待新的訊息發出
只是如果你想要做得更好
就必需要考慮你傳輸資料的時候
還需要將日期時間格式一起傳遞過去
讓它變成具有日期時間的訊息
比如採用json格式發送
每一個欄位各自有它固定的意義
當一筆資料讀取出來的時候
透過你自己寫的Java Socket Server的程式
把它編輯成一串json的文句再傳送出去
如果有多個裝置同時連線的話
你也可以讓所有裝置都讀取到同一串文句


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

a7813195 發表於 2017-5-12 11:53 AM

我又想到一個問題了
說是推播 不如簡單說只是發送訊息到手機(這裡只講述推播到手機部分 網頁部分不討論)
網路上有許多推播server
我在想現在網路發達 我們使用line應該也只是發送訊息到line server之後server在發送訊息到client端
那麼 我是否能夠簡易的製作個server呢?
(只是我不知道如何去做個簡易的server)
只要有個簡易的server發送到用戶端 不也就是推播了

chevylin0802 發表於 2017-5-12 12:52 PM

本帖最後由 chevylin0802 於 2017-5-13 12:01 PM 編輯

a7813195 發表於 2017-5-12 11:53 AM static/image/common/back.gif
我又想到一個問題了
說是推播 不如簡單說只是發送訊息到手機(這裡只講述推播到手機部分 網頁部分不討論)
網 ...
的確如此
只是server並不難做
難的是你如何讓兩端有協議的格式
光光協議就夠你傷腦筋了
你要自己思考這個部份
不一定非得靠HTTP
任何一個TCP的port只要指定清楚都可以用
不過一般都建議你別跟現成已定義的通信協議衝突
所以一般都建議你採用1000以上的port

通信協議是一個必要的基礎
比如Client端總是要先發送一段資料給伺服器端
像是WEB最常用的應該就是使用帳號密碼
當然你可以不必那樣子使用
你可以給它一段通行密碼作為存取的驗證以及保持住連線
為了防止你的客戶端的網路連線突然間的中斷
最好有一個登入機制
比如每五分鐘由客戶端向伺服器端登入一次
註冊成功的時候伺服器端都會發送出登入成功的訊息給客戶端
註冊失敗的話也一樣會發送登入失敗的訊息給客戶端
大部份都會類似於HTTP協議的方式, 回傳的訊息標頭如果是200就代表OK的意思
登入成功之後伺服器就可以隨時將訊息傳給客戶端

像一堆會寫JAVA的人總以為掛個程式庫就好
HTTP/HTTPS都可以從Apache取得相關的web api
但是如果是自己寫呢?
恐怕1000個會寫Java的人會有999個不知所措
因為即使會使用tcp socket的人也不知道通信協議要怎麼做

所以我建議你要先從ISO/OSI Model 網路通信協議的7層layer的標準開始了解起
不過也不需要過於深入
基本上有兩個部份是需要仔細去了解的(只針對程式設計師而言)
一個是關於會議層的部份
它主要的部份在於Server與Client之間的溝通對話的時序
另一個則是關於應用層的部份
這個部份就是關於剃除掉會議層的部份之外的封包資料格式

比如Instant Messager(IM)即時通信來講
它的基本動作就分成了登入以及資料傳遞這兩個部份
(除此之外其他還包括群組建立或群組加入, 建立好友名單或申請加入好友等.....)

登入的協議如下
1. Client向Server發出登入請求
2. Server回應Client端需要進行帳號及密碼驗證
3. Client傳送帳號及密碼給Server端進行驗證
4. Server端傳送給Client端登入成功或失敗的訊息以及有效期限(一般有效期限設定為300秒, 即5分鐘)
5. 如果登入成功, Client端則需要在登入期限後重新登入
6. 如果登入失敗, 視Client端的程式再次發送登入請求(一般設定成三次不成功便停止發送登入請求)
當Client端登入成功之後, Server端就可以即時發送訊息給Client端
如果Client端想要登出的話, 只需要發送登出請求, Server端即可回覆允許登出的訊息則完成登出程序

Client端訊息發送
1. Client向Server傳送訊息
2. Server端回傳OK訊息或失敗訊息

Server端傳送訊息給客戶端
1. Server向Client端傳送訊息
2. Client端回傳OK訊息或格式錯誤或無法解析等錯誤訊息

基本上你要做的大概就是類似這種即時訊息的通信方式
剩下就是你自己如何定義清楚每一個封包的傳送格式以及如何在程式當中進行封包解析

至於物聯網的概念
你也可以把所有的終端裝置都當成是客戶端的方式來進行
不過如果是使用Arduino的話恐怕要小心記憶體不足的問題

另外關於帳密傳送的部份
通常都會直接在程式裏面針對密碼的部份進行加密再來傳送
以確保密碼不被監聽外洩
不過不見得需要考慮這個環節
反而是如果是物聯網裝置端的部份
要如何自動擁有專屬不會重覆的識別碼則是需要去考慮的問題
反而你的Server程式需要寫成多執行緒的方式

其實物聯網的裝置端最首要的問題就是在於如何與外界通訊
常用的方式不外乎就是直接用一條USB線接到電腦上
但事實上這與實務上的情況完全不同
因為物聯網沒有辦法讓你透過數十米甚至數百米長的距離的USB線來傳送
如果你想要採用Ethernet介面的話
那麼物聯網裝置的成本就會變得很高
所以在商業應用上
物聯網裝置通常會採用的是藍芽或者是Zigbee或者是Wifi來傳送
但是無線傳輸也常常會遇到干擾的問題
不管如何
你可能都會發現到物聯網裝置仍然需要有轉接的路由裝置
而這些轉接的路由裝置則透過Ethernet或Wifi再跟電腦連線
也因為是如此
我的建議
會把物聯網終端裝置或者物聯網路由裝置也視為Client端來跟電腦的Server連線
只是這些Client端會標註成特定的Client
就類似於Facebook的粉絲頁的作用一樣
也類似於LINE裏的企業組織用戶一樣
物聯網裝置的Client端的程式就可以針對個別裝置的狀況來寫一段自動發送數據的程式
而不需要每一次動不動就去修改Server
當然你的Server也要為了這些用戶端建立一套資料庫來儲存帳密以及裝置識別碼等資料
起碼這樣子才算是完成最初步的東西

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

a7813195 發表於 2017-5-15 09:59 PM

由於目前時間緊迫
但推播機制必須得做出來
我有想過自己製作server的方式 但是知識尙淺
這短時間應該是無法做出來

目前是考慮先用GCM做出來
但是網路上的教學大多我都照著步驟試過
不是卡這個就是卡那個 我真的快被搞瘋了ˊˋ
http://請把我拿掉rays-technique-tips.blogspot.tw/2015/06/google-cloud-message.html?view=sidebar
目前是照著這個做
但是android實作部分遇到許多問題
不了解他要表達意思ˊˋ

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chevylin0802 發表於 2017-5-16 10:15 AM

本帖最後由 chevylin0802 於 2017-5-16 10:17 AM 編輯

a7813195 發表於 2017-5-15 09:59 PM static/image/common/back.gif
由於目前時間緊迫
但推播機制必須得做出來
我有想過自己製作server的方式 但是知識尙淺

它講的是從google的範例再去進行修改的
但是文章寫得很凌亂
要看懂的人真的要有比較多的經驗的人才看得懂
所以你拿這個文章的內容想要去做出來
還真的是很難為你了
遠遠不及你直接去google把範例下載下來之後
再去比對應該修改的部份

...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

a7813195 發表於 2017-5-16 04:57 PM

chevylin0802 發表於 2017-5-16 10:15 AM static/image/common/back.gif
它講的是從google的範例再去進行修改的
但是文章寫得很凌亂
要看懂的人真的要有比較多的經驗的人才看得懂


http://oldgrayduck.blogspot.tw/2015/10/android-studiogcm-client.html
大大您好 不好意思又麻煩您
我照著他的步驟去執行去做
最後跑出:
Error running app: This version of Android Studio is incompatible with the Gradle Plugin used. Try disabling Instant Run (or updating either the IDE or the Gradle plugin to the latest version

我不太知道該怎麼處理ˊˋ
拜託大大堤點一下...
不知道她內容是否有空缺的部分...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

a7813195 發表於 2017-5-16 05:43 PM

本帖最後由 a7813195 於 2017-5-16 06:22 PM 編輯

剛剛是用好範例 但是我用時候內部設定都好說
想請問大大給個方向
他說我們要更改public static final String API_KEY = "這個部分";那麼我們同一程式 不同推播(舉例來說 同樣軟體 但是可以不同server推播訊息)原先就是要解決不同醫院部分就要有一堆軟體推播訊息 如果這不解決就會導致原先一堆APP的問題FCM是否是一定要到他們網頁去做訊息發送?
我是否有辦法不經過他們網頁直接傳送訊息呢:)?


*更


我是有想過我是否能夠創建一個檔案(用C++或C#寫都可)
之後直接發送訊息到手機 這樣之後我做什麼數據可以用判斷方式
再自行發送出去




...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

chevylin0802 發表於 2017-5-16 06:43 PM

本帖最後由 chevylin0802 於 2017-5-16 06:45 PM 編輯

a7813195 發表於 2017-5-16 04:57 PM
http://oldgrayduck.blogspot.tw/2015/10/android-studiogcm-client.html
大大您好 不好意思又麻煩您
我 ...

你的Android開發環境的問題
你只能夠先移除安裝之後
再重新下載最新版友本重新安裝
新版本的開發環境
最好先爬文看一下別人的安裝心得
這個部份我幫不到你...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>
頁: [1] 2