微信Mars使用說(shuō)明

Mars組件結(jié)構(gòu)
Mars組件結(jié)構(gòu)

github源碼地址為https://github.com/Tencent/mars#mars_cn

使用前準(zhǔn)備

將源碼下載到本地健盒,編譯位于源碼文件夾下的/mars/libraries/build_apple.py

python build_apple.py

編譯成功得到

把 mars.framework 作為依賴加入到項(xiàng)目中锄禽,把和 mars.framework 同目錄的后綴名為 rewriteme 的文件名刪掉".rewriteme"和頭文件一起加入到項(xiàng)目中,另外工程還需要導(dǎo)入的文件有:

在Mars源碼文件夾下iOSDemo工程里還有需要導(dǎo)入的文件蝶溶,包括:

使用

xlog組件

xlog組件為日志記錄組件臼勉,使用時(shí)需要在main函數(shù)里初始化:

NSString* logPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/log"];

// set do not backup for logpath
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
setxattr([logPath UTF8String], attrName, &attrValue, sizeof(attrValue), 0, 0);

// init xlog
#if DEBUG
xlogger_SetLevel(kLevelDebug);
appender_set_console_log(true);
#else
xlogger_SetLevel(kLevelInfo);
appender_set_console_log(false);
#endif
appender_open(kAppednerAsync, [logPath UTF8String], "Test");

在 applicationWillTerminate 函數(shù)中反初始化:

appender_close();

需要注意:

  • 保存 log 的目錄請(qǐng)使用單獨(dú)的目錄剪况,不要存放任何其他文件防止被 xlog 自動(dòng)清理功能誤刪烘苹。
  • 請(qǐng)把 log 目錄設(shè)上不備份的標(biāo)識(shí)就乓。
  • debug 版本下建議把控制臺(tái)日志打開(kāi)泉懦,日志級(jí)別設(shè)為 Debug, release 版本建議把控制臺(tái)日志關(guān)閉稿黍,日志級(jí)別使用 Info.

stn組件

在 didFinishLaunchingWithOptions 函數(shù)中或者使用網(wǎng)絡(luò)之前進(jìn)行初始化:

[NetworkService sharedInstance].delegate = [[NetworkEvent alloc] init];
[[NetworkService sharedInstance] setCallBack];
[[NetworkService sharedInstance] createMars];
[[NetworkService sharedInstance] setClientVersion:200];
[[NetworkService sharedInstance] setLongLinkAddress:@"www.marsopen.cn" port:8081];
[[NetworkService sharedInstance] setShortLinkPort:8080];
[[NetworkService sharedInstance] reportEvent_OnForeground:YES];
[[NetworkService sharedInstance] makesureLongLinkConnect];
    
[[NetworkStatus sharedInstance] Start:[NetworkService sharedInstance]];

在程序退出時(shí)或需要釋放 stn 時(shí)調(diào)用:

[[NetworkService sharedInstance] destroyMars];

當(dāng)發(fā)生前后臺(tái)切換時(shí)調(diào)用:

[[NetworkService sharedInstance] reportEvent_OnForeground:NO];
[[NetworkService sharedInstance] reportEvent_OnForeground:YES];

程序進(jìn)入后臺(tái)時(shí)選擇NO,程序?qū)⒁氐角芭_(tái)時(shí)選擇YES崩哩。

消息發(fā)送

發(fā)送消息需要具體controller遵循代理UINotifyDelegate:

-(NSData*)requestSendData

該函數(shù)為將要發(fā)送的數(shù)據(jù)打包巡球,demo中使用的數(shù)據(jù)格式為ProtocolBuffer,我們可以使用json數(shù)據(jù)格式邓嘹。

-(int)onPostDecode:(NSData*)responseData

該函數(shù)為發(fā)送消息后接收到的服務(wù)器返回的消息數(shù)據(jù)解包酣栈。

-(int)onTaskEnd:(uint32_t)tid errType:(uint32_t)errtype errCode:(uint32_t)errcode

該函數(shù)為請(qǐng)求任務(wù)結(jié)束的回調(diào),用于捕捉處理錯(cuò)誤信息汹押。

消息接收

接收消息需要具體controller遵循代理PushNotifyDelegate:

-(void)notifyPushMessage:(NSData*)pushData withCmdId:(int)cmdId

該函數(shù)為接收消息回調(diào)矿筝,解包數(shù)據(jù)后更新UI。

與服務(wù)端配合

首先來(lái)看官方的兩個(gè)問(wèn)題和答案:

如果我已經(jīng)有現(xiàn)有服務(wù)器端了棚贾,客戶端想使用 Mars窖维,需要服務(wù)器做什么工作?

如果你已經(jīng)深入了解了 Mars妙痹,感覺(jué)自己適合使用 Mars的铸史,需要先理解長(zhǎng)短連協(xié)議和加解包的區(qū)別。不論之前使用的哪種方式怯伊,長(zhǎng)短連的協(xié)議是必須有的琳轿,你需要參照自定義擴(kuò)展把長(zhǎng)短連協(xié)議和服務(wù)器端對(duì)齊, 至于加解包邏輯是在 Req2Buf 和 Buf2Resp 回調(diào)中做的耿芹,給上實(shí)現(xiàn)就可以了崭篡。關(guān)于長(zhǎng)短連協(xié)議的理解和 req2Buf buf2Resp 的理解可以看一個(gè)例子:就像你用 HTTP 發(fā)一個(gè) json 數(shù)據(jù) HTTP 就類似 Mars 的長(zhǎng)短連協(xié)議, json 的組裝和解析就是 req2Buf 和 buf2Resp 來(lái)做的

如果我已經(jīng)有現(xiàn)有服務(wù)器端了吧秕,客戶端想使用 Mars琉闪,客戶端需要注意什么?

longlink_packer.cc中的自定義需要注意寇甸。心跳包的cmdid一定要和服務(wù)器的對(duì)應(yīng)上塘偎,否則可能發(fā)生心跳包超時(shí)導(dǎo)致長(zhǎng)連斷開(kāi)。longlink_complexconnect_need_verify的含義是如果設(shè)為 true 經(jīng)過(guò)心跳包驗(yàn)證的連接才認(rèn)為是成功的連接拿霉。如果你的長(zhǎng)連接建立連接后第一個(gè)包必須是驗(yàn)證包吟秩,該函數(shù)的返回值一定要設(shè)為false。 長(zhǎng)連的鑒權(quán)是會(huì)回調(diào)GetLonglinkIdentifyCheckBuffer這個(gè)函數(shù)绽淘,實(shí)現(xiàn)即可涵防,記得處理回包:OnLonglinkIdentifyResponse,需要區(qū)分開(kāi)長(zhǎng)連接的鑒權(quán)和用戶的登陸。長(zhǎng)連的鑒權(quán)只是用來(lái)表示這個(gè)長(zhǎng)連接是某個(gè)人的,不要用來(lái)做登陸功能壮池。 強(qiáng)調(diào):需要注意偏瓤,mars長(zhǎng)連的請(qǐng)求包和回包的對(duì)應(yīng)關(guān)系的條件是seq一樣,所以服務(wù)器對(duì)請(qǐng)求的回應(yīng)要保證seq一樣椰憋,或者可以自己在longlink_taskmanger.cc里修改(不推薦)厅克。

因此與服務(wù)端配合需要對(duì)齊長(zhǎng)短連協(xié)議以及數(shù)據(jù)的加解包格式,后者在UINotifyDelegate橙依、PushNotifyDelegate的回調(diào)中實(shí)現(xiàn)证舟,而長(zhǎng)短連協(xié)議的自定義在以下幾個(gè)函數(shù)中實(shí)現(xiàn):

void longlink_pack(uint32_t _cmdid, uint32_t _seq, const void* _raw, size_t _raw_len, AutoBuffer& _packed);
int  longlink_unpack(const AutoBuffer& _packed, uint32_t& _cmdid, uint32_t& _seq, size_t& _package_len, AutoBuffer& _body);
void shortlink_pack(const std::string& _url, const std::map<std::string, std::string>& _headers, const AutoBuffer& _body, AutoBuffer& _out_buff);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市窗骑,隨后出現(xiàn)的幾起案子女责,更是在濱河造成了極大的恐慌,老刑警劉巖创译,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抵知,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡软族,警方通過(guò)查閱死者的電腦和手機(jī)刷喜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)立砸,“玉大人吱肌,你說(shuō)我怎么就攤上這事⊙銮荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵纺蛆,是天一觀的道長(zhǎng)吐葵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桥氏,這世上最難降的妖魔是什么温峭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮字支,結(jié)果婚禮上凤藏,老公的妹妹穿的比我還像新娘。我一直安慰自己堕伪,他們只是感情好揖庄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著欠雌,像睡著了一般蹄梢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上富俄,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天禁炒,我揣著相機(jī)與錄音而咆,去河邊找鬼。 笑死幕袱,一個(gè)胖子當(dāng)著我的面吹牛暴备,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播们豌,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涯捻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了玛痊?” 一聲冷哼從身側(cè)響起汰瘫,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擂煞,沒(méi)想到半個(gè)月后混弥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡对省,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年蝗拿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒿涎。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哀托,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劳秋,到底是詐尸還是另有隱情仓手,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布玻淑,位于F島的核電站嗽冒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏补履。R本人自食惡果不足惜添坊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箫锤。 院中可真熱鬧贬蛙,春花似錦、人聲如沸谚攒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)五鲫。三九已至溺职,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浪耘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工乱灵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人七冲。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓痛倚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親澜躺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝉稳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,501評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)掘鄙,斷路器耘戚,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,284評(píng)論 0 6
  • 首發(fā)地址:微信 Mars Android Sample 源碼分析 注:為了避免看得懵逼(當(dāng)然可能是我寫(xiě)得不好~)操漠,...
    cfanr閱讀 7,122評(píng)論 3 23
  • 段落標(biāo)題既是整篇文章的骨架浊伙,又是每個(gè)層次撞秋、段落的提領(lǐng)。大家都有一種體會(huì)嚣鄙,就是相同的內(nèi)容吻贿、材料,好的標(biāo)題能給文章增色...
    huoxing02閱讀 1,315評(píng)論 0 1