佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1288|回复: 6

如果我要寫一個text/messaging的 app

[复制链接]
发表于 3-5-2016 12:50 PM | 显示全部楼层 |阅读模式
hi,
我最近剛開始學寫ANDROID APP ,
看了一遍UDACITY的教學, 終於能寫一些東西出來。

然後 , 我想在我的APP裡面加入一些功能, 比如說text/messaging的功能(類似WHATSAPP/WECHAT)。
可是我暫時沒看到類似的教學。

想問一下
  • 方法是將對話都存進MYSQL, 然後再讀取出來?
  • 有沒有什麼open source 的library可以用?
  • 有一些類似的教學嗎?



不知道有做過類似的APP的大大,能給我一些方向嗎 ?
回复

使用道具 举报


ADVERTISEMENT

发表于 3-5-2016 02:43 PM | 显示全部楼层
哈哈, 看來不管到了什麽時代, messaging 的軟體還是很夯啊。

我是沒有寫android apps 的經驗啦, 但是在8~9年前, 那時MSN Messager(Line/WeChat 的老前輩)
還沒沒落時, 用 Web 寫聊天室其實還蠻熱的, 稍微對Coding有些興趣的人, 都會去嘗試一下。

具體技術的實現, 大致上就你第一點的那樣。
我打了一句話, 軟體就把我的話輸入進資料庫, 另一方在讀取出來。

這看似沒什麽問題, 但其實在現實世界并不可行,原因有兩個
  • 對方要怎樣知道他有訊息?
  • 所有的對話記錄都會被看光光。

關於問題一, 你試想看看, 今天如果我把訊息送出去, 對方要怎樣知道他有未讀訊息?
一般我們的做法就是設定一個timer, 然後固定每隔幾秒就讀資料庫一下, 然後這種做法也有很多現實上的問題存在, 例如最壞情況我寄出的訊息他要隔5秒才收到。
或者是, 你在答一句的時候, 下一秒你的畫面就會POP出2~3句話, 然後最下面才show你的東西。
然後更嚴重的是, 當你的聊天系統上綫時, 你會發現你的DB的loading很大, 因爲一對使用者在對話的過程中, 在1分鐘内可能會有10~20次的DB request. 然後使用者一定不會簡簡單單跟一個人對話, 他會開兩個以上的聊天室跟不同人對話。

也就是説, 你的一個使用者可能最嚴重會吃掉你5~10%的DB connection handle 都不爲過。

關於問題二,

假設你的使用者有一對情侶, 他們之間的甜言蜜語都記錄在DB裏面, 一天你的DB被黑客闖入, 所有的對話記錄都被竊走。
那你八成會死的很難看, 隱私權在國外是被重視的, 如果你有去看WeChat那些T & C, 裏面就有清楚注明對話内容會被保留做研究用途之類的。
至於用作什麽研究。。。
資料探勘 -> 廣告推銷
人工智慧 -> 機器人聊天等

就因爲在技術上的難題
Web Messager一直風靡不起來的主因。
其實比較正確的做法, 則是采取P2P的方式
就是一對使用者, 他們之間的對話衹有他們兩位看得到。

具體的做法大致上每個apps要分兩個部分, 一個是listen, 一個是push,

具體怎樣做。。。

很抱歉我不會 XD。

這篇大概是給你對messaging 的軟體有個 breif 的瞭解。

Apps上面的可用的工具很明顯比Web 的技術多了很多。你可以慢慢研究。

祝學習愉快。


回复

使用道具 举报

 楼主| 发表于 3-5-2016 04:24 PM | 显示全部楼层
我也是這樣想,全部存進資料庫,感覺不是很聰明,


1.對方要怎樣知道他有訊息?
我想這個可以用Websocket來做, 他能夠一直listen這些event, 比如有什麼新的message他就能push一個state過去。

2.所有的對話記錄都會被看光光。

剛你說P2P, 讓我想起了webrtc 應該蠻適合做CHATROOM的 . 不過,用Webrtc ,他的資料不會存起來也是一個問題,也許都存在手機 LOCAL端的sqlite DB就好.

感謝你
回复

使用道具 举报

发表于 3-5-2016 09:00 PM | 显示全部楼层
雷洛 发表于 3-5-2016 04:24 PM
我也是這樣想,全部存進資料庫,感覺不是很聰明,


1.對方要怎樣知道他有訊息?
我想這個可以用Websocket來做, 他能夠一直listen這些event, 比如有什麼新的message他就能push一個state過去。

2.所有的對話 ...

对P2P没有研究

不过用websocket之后就不需要有资料库了, 但是前提是双方都listen着channel
某些情况下...资料库还是扮演着重要角色,
1. 比如对方不在线上时, 另一方要send offline messages...
2. 一些messenger喜欢显示最后几句对话...

小弟前些时候也玩了一下websocket, idea也是messaging apps, 整个过程没有牵涉到资料库

大概就是:
1. 首先server有一个通用的online-status channel, 每个人online都会自动subscribe这个channel, 之后每个人上线下线都会broadcast给全部人

2. 再来就是每个用户上线之后都会subscribe自己的channel, 比如channel-user-[id]
如果user-01想要跟user-02对话, 就把message push到对方的channel, channel-user-02
user-02就会收到类似 { from: 01, message: 'xxxx' } 的message, 前端就自己handle显示方式

3. 小弟也做了group chat的feature, 具体情况忘记了, 应该只是keep着user id在application level,当有message时会broadcast到group里面的每个user, 所以users会收到类似{ type: 'group', group: [group-id], from: [user-id], message: 'xxxx' }


为什么会弄以上的东西, 纯粹是因为当时想学websocket & playframework, messaging只是闹着玩的, 实际情况应该考虑带更多东西

评分

参与人数 2积分 +5 人气 +15 收起 理由
雷洛 + 10 谢谢分享
musicalangel + 5 + 5 谢谢分享

查看全部评分

回复

使用道具 举报

发表于 4-5-2016 10:08 AM | 显示全部楼层

评分

参与人数 1人气 +5 收起 理由
雷洛 + 5 谢谢分享

查看全部评分

回复

使用道具 举报

发表于 7-5-2016 01:08 PM | 显示全部楼层
本帖最后由 kingdom_manga 于 7-5-2016 01:10 PM 编辑

我想另外个方式是使用 Google cloud messaging https://developers.google.com/cloud-messaging/ 告诉手机有信息,前者是那手机和App的notification要开着和好像要有自己的server。 我忘了在那读过,有文章说到因为手机的电池有限,用websocket / timing 来运作的话会快速用完手机电池。
回复

使用道具 举报

Follow Us
发表于 6-6-2016 01:45 PM | 显示全部楼层
Android 里面本身就有一个东东来收push message了。。但是前提是user 电话里面需要有play store。
如果没有的话。。你的app就是废了的。

而且那个东东是real time的~ 你一送。它就能马上收到。但是如果哪个app已经被android给terminate在backend跑得话,就有机会可能收不到message。但是如果user在开回那个app就可以收到之前的message了。

那个东东叫GCM
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 14-6-2024 03:22 PM , Processed in 0.063069 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表