1、引言
IM應用的初學者們,在補全了各種基礎技術知識后(如果您仍不具備這些知識,建議馬上閱讀《新手入門一篇就夠:從零開發移動端IM》),在動手編碼實踐時,很多時候糾結的并不是功能該如何實現,而是這個功能該實現成什么樣(沒有經驗,我特瑪能找誰問問?)。
比如,最常見的糾結有以下這些:
- 1)離線聊天消息該保存多久?
- 2)好友請求應該保存多久?
- 3)短視頻消息中的視頻時長設為多大合適?
- 4)圖片、短視頻、語音這些多媒體消息中,未讀的文件數據保存多久?
- 5)群管理的邏輯該怎么弄?參考微信?還是參考QQ?(關鍵是參考資料哪里有?)
- 6)朋友圈限制最多發幾張照片合適?
- ... ...
嗯,這些問題,老板認為并不是問題,因為可以“參考微信”啊!
然而,微信又不會親口說出來它的這些規則到底是多少?難不成要一個一個去試?那太扯了!
本文將根據微信官方目前已公開的資料,將它的一些常用功能參數和邏輯規則資料進行了匯總整理,希望能助力你的IM開發!(本文已發布于:http://www.52im.net/thread-3008-1-1.html)
學習交流:
- 即時通訊/推送技術開發交流5群:215477170[推薦]
- 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM》
本文已同步發布于“即時通訊技術圈”公眾號,歡迎關注:
▲ 本文在公眾號上的鏈接是:https://mp.weixin.qq.com/s/F-pVE9vN21h0Vm8LwnYplg
2、資料來源
本文中整理的所有內容均來自微信官方知識庫,如果存在不全或不準確的情況,請在評論中回復,我會逐條核實并修訂。
* 特別申明:本文內容僅供研究和學習使用,請勿用作其它用途。如有不妥之處,請指出,我會及時處理。
3、閱讀對象
本文適合作為新老IM開發者的備查資料。本文不適合不懂技術的普通用戶閱讀,因為所有內容都盡量以技術人員的視解整理和表述。
移動端IM產品中,微信是標桿,也是事實的用戶體驗標準。所以,無論是被老板或產品經理懟,直接說“微信也這樣”,能省去很多口水仗(經驗啊)。這也是整理本文的初衷,以及價值所在。
4、相關資源
《微信本地數據庫破解版(含iOS、Android),僅供學習研究 [附件下載]》(* 推薦研究)
《仿微信的IM聊天時間顯示格式(含iOS/Android/Web實現)[圖文+源碼]》
5、微信的好友關系規則匯總
5.1 好友驗證請求有效期限
有效期限為 3 天。
* 補充規則:微信的好友驗證請求只保存在手機本地,當卸載重裝后,好友請求會消失且無法找回。
5.2 通訊錄分組/好友排序
微信通訊錄分組、好友排序,是根據微信通訊錄朋友昵稱的首字母(或首個漢字拼音首字母)由A-Z排序。
* 補充規則:如果好昵稱是特殊符號、數字或Emoji表情(比如愛心、氣球等),將會歸到#類中。
5.3 好友驗證規則
- 1)當開啟“加我為朋友時需要驗證”后,需你同意接受請求后,才能成為好友;
- 2)未開啟“加我為朋友時需要驗證”時,任何人都能添加你為好友(無需你確認)。
* 補充規則:如果不想被他人添加好友時搜索到,微信中可以設置關閉“微信號/手機號/QQ號”等搜索方式。
5.4 微信有4種添加好友方式
1)搜索加好友:
輸入對方的微信號/QQ號/手機號搜索添加即可,但不支持搜索昵稱。
* 補充規則:如果對方將關閉了“通過QQ/手機號/微信號搜索到我”,則沒有辦法通過此種方法添加好友。
2)雷達加朋友:
當被添加者物理距離很近時,一起按住手機,就可以添加對方為朋友。
3)掃二維碼加朋友:
掃描對方的二維碼名片,就可以添加對方為朋友。
4)手機聯系人:
綁定手機聯系人的微信帳號,可以查看到手機通訊錄聯系人已開通了微信的朋友,并直接添加對方為微信好友。
5.5 好友人數上限
微信最多可以添加 5000 個好友。
5.6 通訊錄黑名單功能邏輯
將對方加入黑名單后,與對方的關系邏輯如下:
- 1)在自己的會話列表不再顯示與其聊天記錄,解除黑名單后會重新出現在會話列表中;
- 2)在對方的通訊錄好友列表中仍然會顯示;
- 3)將不再接收到對方的消息;
- 4)對方無法給你發消息,會提示“對方拒絕接收您的消息”,自己可以給對方正常發送消息;
- 5)互相無法查看更新后的頭像、個性簽名;
- 6)對方將無法查看你的微信個人相冊和對照片進行評論;
- 7)互相看不到朋友圈更新,拉黑之前在朋友圈分享的照片也不在對方朋友圈展示。
5.7 當被對方刪除或“拉黑”后的聊天效果
當好友將你刪除或加入黑名單后,你給他發消息時,微信將出現以下提示。
對方將我加入黑名單后,我發消息時的微信提示:
對方把我刪除后,我發消息時的微信提示:
6、微信的群聊規則匯總
6.1 微信群的功能定位
微信群相當于QQ中的討論組,所以沒有QQ里的群號碼這種東西。
6.2 群主規則
群的創建者默認是群主。
* 補充規則:當創建者退出該群時,群成員列表中的第一位(也就是建群以來第2個加群的人)將自動成為新群主(好奇葩的規則!)。
另外:當原群創建者(即原群主)再次加群時,身份將會是普通群員。
6.3 群員邀請規則
群成員可以拉其他人加入群,群主不能取消普通群員的這個能力。
* 補充規則:群主可以設置邀請需確認,即需群主確認后才可以讓被邀請的好友加到群內。
6.4 群名稱規則
每個人(不只是群主)都可以修改群名稱。
* 補充規則:當群超過 100 人時,只有群主可以修改群名稱。
6.5 群公告規則
只有群主可編輯群公告。
* 補充規則:群公告字數限制為最大 2000 個字(即4000字節)。
6.6 群保存規則
微信群需要手動添加到通訊錄才會永久保存,否則它只會保存在本地,一旦你卸載APP后,它就會消失。除非有群內成員發送消息,你才能再次看到,除次之外,你沒有別的方法可以找回它。
6.7 群人數限制
微信群最大上限為 500 人。而且,100 人以上的微信群只有已通過實名驗證的微信用戶才能加入。
6.8 加群驗證規則
- 1)當群人數小于40人時,好友可以自由加入或被邀請加入;
- 2)當群人數超過40人時,加群邀請需要對方同意;
- 3)當群人數超過100人時,對方需要通過實名驗證才能接受邀請(微信中可以通過綁定銀行卡進行實名驗證)。
6.9 解散或退出群規則
微信沒有像QQ那樣的“一鍵解散群”功能。
可以通過中列方法實現解散群或退出群的能力:
1)如果是群主(創建者或群成員列表第一位),可以將群成員全部刪除;
2)如果是普通群員,可以退出群聊。
6.10 群二維碼的有效期限
微信群的二維碼有效期為 7 天(從二維碼生成時開始計算),失效后的2維碼掃描時將提示“該二維碼已過期”。
6.11 微信群消息屏蔽規則
微信沒有屏蔽群聊消息的功能,如果要達到這樣的效果,你只能設置不提醒新消息或退出此群。
7、微信的朋友圈規則匯總
7.1 照片數和文字數限制
- 1)朋友圈照片單次最多可添加 9 張照片,上傳照片沒有文件數量限制,也沒有存儲容量限制。
- 2)最多可輸入 1500 個漢字(即 3000 個字節)。
7.2 朋友圈新動態提醒規則
如果關閉了朋友圈更新提醒,當好友有發布新的朋友圈動態時,“發現”按鈕上將不會再出現紅點提示,否則將提示。
7.3 朋友圈查看權限規則
當你未作任何權限設置的情況下:
- 1)你的所有朋友可以,查看到你在朋友圈發表的所有動態;
- 2)陌生人可以查看你最近的10條動態。
發新朋友圈時,可以設置回避的人(即設置“誰可以/不可以看”):
- 1)公開:所有朋友可見;
- 2)私密:僅自己可見;
- 3)部分可見:可在通訊錄中選擇哪些好友可見;
- 4)不給誰看:可在通訊錄中選擇哪些好友不可見。
可以允許或禁止陌生人查看:
可以允許或禁止陌生人(可能來自掃碼但未添加好友、附近的人、搖一搖、群聊時)看到10張最近發的照片。
可以設置朋友圈查看時間范圍:
可選擇允許好友查看朋友圈最近三天、最近半年或者全部的內容。
可以關閉朋友圈功能:
之前通過朋友圈發表的照片,可在個人相冊里查看。但好友仍可以看到。
7.4 朋友圈的評論可見規則
- 1)評論時,只會通知發布者;
- 2)當評論時“@”某評論者,只會通知被回復者;
- 3)評論者只能看到朋友的所有評論(當該條朋友圈的回復者不是朋友時,是看不到他的回復的)。
7.5 朋友圈隱私規則
1)陌生人查看十張照片:
當禁止“允許陌生人查看十張照片”時,陌生人將看不到你發布的任何朋友圈動態。微信默認是允許。
2)不看他(她)的朋友圈(即屏蔽好友的朋友圈):
在您的朋友圈中不會顯示對方發送的朋友圈消息。
3)不讓他(她)看我的朋友圈(即內容不更新給好友):
對方查看您的朋友圈顯示是空白的,不會顯示您發送過的任何朋友圈消息。
8、微信的聊天消息規則
8.1 聊天記錄保存規則
- 1)微信聊天記錄保存在本地手機,一旦卸載微信,則聊天記錄永久消失;
- 2)微信不支持聊天記錄漫游功能,一旦更新手機,新手機上無法看到之前手機上的聊天記錄。
點評:這里有份完整的微信本地數據庫樣本,可以用來研究和學習:《微信本地數據庫破解版(含iOS、Android),僅供學習研究 [附件下載]》。
8.2 離線消息保存規則
- 1)微信服務器只保存 72 小時內的離線普通消息(從對方發消息時間開始算起),過期會被服務端清理;
- 2)微信服務器只保存 72 小時內的多媒體數據(圖片、短視頻、大文件),即使你的手機已收到該條消息,只要未點擊查看,即被視為未讀,服務器會在此期限后清理掉多媒體數據。
8.3 “對方正在輸入”的顯示規則
給對方發送消息后,對方在 10 秒內回復才可以看到該提示。
8.4 聊天消息撤回時限
微信的規則是可以撤回2分鐘內發送的消息。
8.5 消息已讀回執規則
微信不支持已讀回執功能。微信認為已讀或未讀狀態屬于個人隱私,不希望打破這種自由溝通的感覺。
8.6 語音消息規則
- 1)最長可錄制為 60 秒的語音消息;
- 2)語音文件格式為:AMR;
- 3)語音文件壓縮比率:60秒語音文件約為45KB。
點評:如果你的IM中,語音文件大大超過微信的這個數據量,就表達存在較大優化空間,可以從采樣率等方面進行設置。
8.7 短視頻消息規則
- 1)最長可錄制為 10 秒的語音消息;
- 2)語音文件格式為:MP4;
- 3)語音文件壓縮比率:10秒短視頻約文件紅為1.5MB至2.0MB。
點評:如果你的IM中,短視頻文件大大超過微信的這個數據量,就表達存在較大優化空間,可以從采樣率等方面進行設置。
8.8 文件消息規則
微信限制最大可以上傳的文件大小為 25 MB。
8.9 聊天消息時間顯示規則
- 1)當天的消息,以每5分鐘為一個跨度顯示時間(即格式:HH:mm);
- 2)超過1天、小于1周的消息,將顯示“星期+收發消息的時間”;
- 3)超過1周的消息,將顯示手機收發時間的日期(即格式:yyyy-MM-dd)。
點評:這里有一份仿微信的聊天界面時間顯示規則代碼,可以下載用一用:《仿微信的IM聊天時間顯示格式(含iOS/Android/Web實現)[圖文+源碼]》。
9、微信的其它規則
9.1 收藏功能規則
- * 收藏的內容:可以收藏文字、語音、圖片、視頻、地理位置等。
- * 保存的位置:收藏里面的內容是保存在服務器中的,只要你不主動刪除,會一直存在。
- * 單個文件大小限制:可以收藏的單個文件大小不能超過 25 M。
- * 存儲總容量限制:微信限制收藏數據的總容量為 2 GB,當總收藏容量超出2G后,超出容量的內容,將不能再上傳。
9.2 “附近的人”功能規則
- * 技術實現:當你查看附近的人功能時,微信將通過手機GPS獲取你的位置信息,同時會被保留一段時間。
- * 位置緩存:當你使用過“附近的人”時,服務器就會留下您的地理位置信息一段時間,周圍的人可以再次搜到您。
9.3 “搖一搖”功能規則
當距離很近的兩個同時“搖一搖”時,不一定能搖到對方。因為微信的“搖一搖”沒有距離限制,而且是由服務器隨機匹配。
10、電腦版微信的特殊規則
10.1 可以發送的消息類型
微信電腦端,可以發送文字、默認表情、符號表情、動畫表情(兔斯基表情)、截圖、圖片消息,并能同步手機上已收藏的表情并發送。
10.2 可能接收的消息類型
可以接收文字、默認表情、emoji表情、動畫表情、圖片、文件、語音、視頻、公眾號消息、名片類型消息、小視頻、地理位置消息、轉賬消息、合并轉發的聊天記錄消息。
10.3 可以接收但不能查看的的消息類型
紅包消息、AA收款消息(收到此類消息會提示請在手機上查看)。
10.4 發送文件的大小限制
微信電腦端,上傳文件大小最大為 100 MB,一次最多可以選擇10個文件同時發送。
* 補充規則:如果發送的是視頻,則文件大小不能超過 25 MB。
附錄:微信團隊分享技術資料匯總
《微信朋友圈千億訪問量背后的技術挑戰和實踐總結》
《微信團隊分享:微信移動端的全文檢索多音字問題解決方案》
《微信團隊分享:iOS版微信的高性能通用key-value組件技術實踐》
《微信團隊分享:iOS版微信是如何防止特殊字符導致的炸群、APP崩潰的?》
《微信團隊原創分享:iOS版微信的內存監控系統技術實踐》
《iOS后臺喚醒實戰:微信收款到賬語音提醒技術總結》
《騰訊技術分享:社交網絡圖片的帶寬壓縮技術演進之路》
《微信團隊分享:視頻圖像的超分辨率技術原理和應用場景》
《微信團隊分享:微信每日億次實時音視頻聊天背后的技術解密》
《微信團隊分享:微信Android版小視頻編碼填過的那些坑》
《微信手機端的本地數據全文檢索優化之路》
《企業微信客戶端中組織架構數據的同步更新方案優化實戰》
《微信團隊披露:微信界面卡死超級bug“15。。。。”的來龍去脈》
《月活8.89億的超級IM微信是如何進行Android端兼容測試的》
《一篇文章get微信開源移動端數據庫組件WCDB的一切!》
《微信客戶端團隊負責人技術訪談:如何著手客戶端性能監控和優化》
《微信后臺基于時間序的海量數據冷熱分級架構設計實踐》
《微信團隊原創分享:Android版微信的臃腫之困與模塊化實踐之路》
《微信后臺團隊:微信后臺異步消息隊列的優化升級實踐分享》
《微信團隊原創分享:微信客戶端SQLite數據庫損壞修復實踐》
《騰訊原創分享(一):如何大幅提升移動網絡下手機QQ的圖片傳輸速度和成功率》
《騰訊原創分享(二):如何大幅壓縮移動網絡下APP的流量消耗(下篇)》
《騰訊原創分享(三):如何大幅壓縮移動網絡下APP的流量消耗(上篇)》
《微信Mars:微信內部正在使用的網絡層封裝庫,即將開源》
《如約而至:微信自用的移動端IM網絡層跨平臺組件庫Mars已正式開源》
《開源libco庫:單機千萬連接、支撐微信8億用戶的后臺框架基石 [源碼下載]》
《微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解》
《微信團隊原創分享:Android版微信后臺保活實戰分享(進程保活篇)》
《微信團隊原創分享:Android版微信后臺保活實戰分享(網絡保活篇)》
《Android版微信從300KB到30MB的技術演進(PPT講稿) [附件下載]》
《微信團隊原創分享:Android版微信從300KB到30MB的技術演進》
《微信技術總監談架構:微信之道——大道至簡(演講全文)》
《微信技術總監談架構:微信之道——大道至簡(PPT講稿) [附件下載]》
《如何解讀《微信技術總監談架構:微信之道——大道至簡》》
《微信海量用戶背后的后臺系統存儲架構(視頻+PPT) [附件下載]》
《微信異步化改造實踐:8億月活、單機千萬連接背后的后臺解決方案》
《微信朋友圈海量技術之道PPT [附件下載]》
《微信對網絡影響的技術試驗及分析(論文全文)》
《一份微信后臺技術架構的總結性筆記》
《架構之道:3個程序員成就微信朋友圈日均10億發布量[有視頻]》
《快速裂變:見證微信強大后臺架構從0到1的演進歷程(一)》
《快速裂變:見證微信強大后臺架構從0到1的演進歷程(二)》
《微信團隊原創分享:Android內存泄漏監控和優化技巧總結》
《全面總結iOS版微信升級iOS9遇到的各種“坑”》
《微信團隊原創資源混淆工具:讓你的APK立減1M》
《微信團隊原創Android資源混淆工具:AndResGuard [有源碼]》
《Android版微信安裝包“減肥”實戰記錄》
《iOS版微信安裝包“減肥”實戰記錄》
《移動端IM實踐:iOS版微信界面卡頓監測方案》
《微信“紅包照片”背后的技術難題》
《移動端IM實踐:iOS版微信小視頻功能技術方案實錄》
《移動端IM實踐:Android版微信如何大幅提升交互性能(一)》
《移動端IM實踐:Android版微信如何大幅提升交互性能(二)》
《移動端IM實踐:實現Android版微信的智能心跳機制》
《移動端IM實踐:谷歌消息推送服務(GCM)研究(來自微信)》
《移動端IM實踐:iOS版微信的多設備字體適配方案探討》
《騰訊信鴿技術分享:百億級實時消息推送的實戰經驗》
《IPv6技術詳解:基本概念、應用現狀、技術實踐(上篇)》
《IPv6技術詳解:基本概念、應用現狀、技術實踐(下篇)》
《微信多媒體團隊訪談:音視頻開發的學習、微信的音視頻技術和挑戰等》
《騰訊技術分享:微信小程序音視頻技術背后的故事》
《微信多媒體團隊梁俊斌訪談:聊一聊我所了解的音視頻技術》
《騰訊技術分享:微信小程序音視頻與WebRTC互通的技術思路和實踐》
《手把手教你讀取Android版微信和手Q的聊天記錄(僅作技術研究學習)》
《微信技術分享:微信的海量IM聊天消息序列號生成實踐(算法原理篇)》
《微信技術分享:微信的海量IM聊天消息序列號生成實踐(容災方案篇)》
《微信團隊分享:Kotlin漸被認可,Android版微信的技術嘗鮮之旅》
《社交軟件紅包技術解密(二):解密微信搖一搖紅包從0到1的技術演進》
《社交軟件紅包技術解密(三):微信搖一搖紅包雨背后的技術細節》
《社交軟件紅包技術解密(四):微信紅包系統是如何應對高并發的》
《社交軟件紅包技術解密(五):微信紅包系統是如何實現高可用性的》
《社交軟件紅包技術解密(六):微信紅包系統的存儲層架構演進實踐》
《QQ設計團隊分享:新版 QQ 8.0 語音消息改版背后的功能設計思路》
《微信團隊分享:極致優化,iOS版微信編譯速度3倍提升的實踐總結》
《IM“掃一掃”功能很好做?看看微信“掃一掃識物”的完整技術實現》
《微信團隊分享:微信支付代碼重構帶來的移動端軟件架構上的思考》
《IM開發寶典:史上最全,微信各種功能參數和邏輯規則資料匯總》
>> 更多同類文章 ……
(本文同步發布于:http://www.52im.net/thread-3008-1-1.html)