• 3

想用swift寫一個簡單的程式,但在最重要的點就GG了

各位好,

我是一個大學正在寫專題的學生,

我們專題要做一個可以從 web 端發送訊息到安卓及 ios 的訊息推送系統,

大致上就是只用者可以從 web 端將訊息進行排程,然後在指定時間推播到 app 裡,

因為我有一台 MacBook,所以我就很理所當然地被分派了 ios 端,

剛開始只單純做介面時很簡單又滿有趣的,上網就有很多熱心的人分享資料可以學習,滿開心的

不過做到一個部分我就卡了兩個禮拜,那就是將訊息從 web 端發送至 app 裡,

我在爬文後知道這方面是關於 APNs 上 Push notification 的實作,然後本地推送也不難,我還能理解,

可是從 web 端要發送到 app 裡我實在不清楚如何著手,

我買了兩本 swift 的工具書啃了一星期,但我實在過於駑鈍,看得霧煞煞

最後的成品還得要從負責做資料庫的同學那邊讀取資料庫,引入 app 中的 Cell ,

我光是老師現在要求的:”在電腦上輸入一串文字,然後在 app 中顯示出來。“ 都無法達成,

請問我該如何著手,或者是關鍵字該如何搜尋才能找到我需要的資料呢。



搜尋這方面的資料時,容易看到 PHP、JAVA 之類的字眼,代表我要實作這項程式還需要其他語言來相輔相成嗎?


*這是我買的兩本書
想用swift寫一個簡單的程式,但在最重要的點就GG了

2015-04-19 22:34 發佈
文章關鍵字 Swift 程式
Hi,首先APN的用途,因為iOS不予許真多工,App無法一直開始,而且大量的App如果一直再連線狀態時,會消耗大量的網路資源/電力,所以利用了APN來做。

何謂APN:
今天假設FB/Line有人傳訊息給你,要如何收到消息?
1:等下次開App才知道
2:定期更新?
...

使用APN
iOS Device隨時隨地都會與Apple Push Server連線,然後這個App有開啟APN的話,Device會與Apple Push Service交談,
產生一組Push Token(此token只能對這隻App傳Push,每個App/Device都不同,還要配對正確的憑證才行),你Server端就收這個User的token,之後有消息要告訴他,就將此token和訊息丟給Apple Push Server,然後Device就會收到了(因為Device一直與Apple Push Server連線)


-----從 web 端要發送到 app 裡我實在不清楚如何著手。
看用途 APN? 走Http ?


-----最後的成品還得要從負責做資料庫的同學那邊讀取資料庫,引入 app 中的 Cell
Cell ? UITableViewCell吧,
App開啟的話,用個http GET/POST去自己的Server抓就好,APN只適合在通知/傳很小的訊息,也沒辦法放太大的資料推播。


-----搜尋這方面的資料時,容易看到 PHP、JAVA 之類的字眼,代表我要實作這項程式還需要其他語言來相輔相成嗎?
APN需要Server端去配合,將push request(收的device token,message)丟給apple push server。

Apple APN文件
黑色鮪魚 wrote:
各位好,我是一個大...(恕刪)

peterlee0127 wrote:
Hi,首先APN的...(恕刪)


首先感謝您這麼快就回復了一篇

-----從 web 端要發送到 app 裡我實在不清楚如何著手。
看用途 APN? 走Http ?

這邊老師是讓另一個同學設計一個資料庫,用來存取使用者在 WEB 端的資料以及想傳送的信息,
他好像是用一個叫 phpMyAdmin 的東西做的,到時他那邊的資料庫裡會負責處理使用者傳的訊息,
比方說A傳了一封信息,並且排程(固定每週一12:00傳同一封訊息這樣),然後一切資料的傳遞好像都由他負責
而我只要負責將那些資料載進 app 裡就好。(之後還須做一個登入系統去連接到他的網頁資料庫)

而我現在好奇的是,如果我單純想從網路(從我這台電腦)丟一個信息到我的 app 裡的方法(比方我在一個自製的網頁打一串字,app立刻收到)。走 http 的意思是指我直接用網頁開嗎?(抱歉,我的程度...)


-----最後的成品還得要從負責做資料庫的同學那邊讀取資料庫,引入 app 中的 Cell
Cell ? UITableViewCell吧

恩謝謝妳的回答,我會去研究看看!
還有我一直以為那一條一條的叫 Cell ,真是抱歉

-----搜尋這方面的資料時,容易看到 PHP、JAVA 之類的字眼,代表我要實作這項程式還需要其他語言來相輔相成嗎?
APN需要Server端去配合,將push request(收的device token,message)丟給apple push server。

好的,我現在立刻去了解這方面的資訊。


真的非常感謝你撥冗回覆喔!
感覺樓主你連最基本的server/client架構都不太清楚...

用Java, PHP等去寫的是server端的程式.

phpMyAdmin是資料庫「管理」程式, 跟server差了十萬八千里.

先不要管App怎麼寫, 最基本的線上聊天室「在A電腦打字, B電腦能看得到」.
這一點怎麼去實作? 不用想什麼App, 在電腦上寫不寫得出這樣的程式/網頁呢?
如果做得出來才有下一步, 不然就沒指望.

能用browser打開看到的, 能用自己寫的電腦程式看到, 就能自己寫App打開看到.

去google「聊天室」要怎麼寫吧...
與失敗為伍者,天天靠盃都是別人的錯。 與成功為伍者,天天跟失敗切磋直到不再出錯。

bluesystem wrote:
感覺樓主你連最基本...(恕刪)


真是汗顏啊,感謝你的指教,的確我幾乎什麼都不懂就想寫相關 App 是挺糟糕的

我們小組都是首次接觸這方面的作業,所以前備知識不足(很不足),我們會試圖彌補的,

也很感謝你們不吝提供相關資訊給我們了解以及學習,

我會去 Google 你提供的資訊的,

感謝您的回答!
黑色鮪魚 wrote:
各位好,我是一個大...(恕刪)


Server/Client要你馬上理解可能有點困難

這是我做的簡單Socket Programming的Java+GUI, 也就是bluesystem大大上面寫的聊天室

以下是Server:
http://paste.ofcode.org/t3ND95xc2BJWiARefMAQnf

以下是Client:
http://paste.ofcode.org/yBCNZicKB2vqNsxfRSTNQc

裝Eclipse把代碼丟進去之後跑跑看

把Server放到一台電腦上面跑, Client也可以放在同一個地方跑, 這樣的話Client發送的信息, sendToAll就會把這個信息發給所有人

接下來你要做的事情就是要用iOS做Socket Programming把地址:端口寫到跟Server一樣的地址跟一樣打開的端口

就可以做信息傳送了

-------------------------------------------------------------------------------------------------

覺得太複雜, 可以用另一種方式, 就是利用網上的庫(library), 基本上都已經幫你寫好了

可以試試看Tornado跟Websocket, Tornado是FriendFeed(後來被Facebook)買下, 開發的Asynchronous IO的Server, Websocket是一個TCP協議, 同時輸入又輸出.

Python + Tornado and Websocket 跟 iOS Websocket 做聯繫

Python + Tornado + Websocket:

http://www.tornadoweb.org/en/branch2.1/websocket.html

iOS Websocket

http://www.elabs.se/blog/66-using-websockets-in-native-ios-and-android-apps

BlackMatrixZero wrote:
Server/Client...(恕刪)


感謝您在這種時間回覆我,還做了成範例讓我觀摩,

我現在先用手機簡單回覆,等我到學校立刻製作看看!

黑色鮪魚 wrote:
首先感謝您這麼快就...(恕刪)


第一段關於資料庫其實我看不太懂

有個資料庫, 然後使用者在手機/電腦端上面在某個網上按按鈕, 要發送Y信息, 然後排程每天早上10點發送這個信息

這個排程跟信息是存在資料庫的吧?


那接下來發送信息這段應該是要在伺服器端(也就是phpMyAdmin裝的地方)來處理才對

你可以把那個Java Server端的Code改成 他每半個小時去查一下資料庫, 然後如果資料庫的時間吻合現在的時間, 然後就發送信息

只需要在手機上處理接收就好

=======================================================================================================

只不過呢, 手機上接收, 如果用Socket Programming的話, 有可能會出現一個問題: APP必須是打開的才接收的到


所以有另一個比較簡單的方法, 就是利用PushBullet的API做接收的話可以省去你去設計手機端

手機端只要裝個Pushbullet, 然後接下來信息就靠他接收 (App Store應該有)


你的伺服器端會是這樣:

有一個背景程序, 他會每半個小時查一下資料庫, 如果時間吻合就利用Pushbullet的RestAPI發送信息, 這樣最簡單, 手機端就不需要做其他事情了

我對iOS設計0經驗, 所以你如果用Socket有可能會出現一個問題就是App是沒打開, 那這樣信息還能接收嗎?


所以:

客戶端(排程跟信息)==>資料庫<===有一個背景程序讀取時間跟信息, 吻合就發送給特定的Pushbullet帳號
加油
我最近也從node.js跳來iOS開發 整個痛苦...
問題一堆的storyboard 完全莫名其妙Orz

Ouken wrote:
加油我最近也從node...(恕刪)


恩謝謝鼓勵,的確還滿難懂的,

不過應該單純只是我太遜了

論壇上有很多無私分享方法、教學的網友真的很令人感動
  • 3
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?