5
本文作者: SAKURA | 2014-12-15 10:08 |
我是一名普通的iOS程序員,入職360以后一直在手機(jī)衛(wèi)士部門從事開發(fā)工作,最近我們上線了AppStore版防騷擾電話的功能,引起了網(wǎng)友的議論,也勾起了自己對這三年來iPhone軟件開發(fā)工作的一些感想,既然這篇文章題目叫不歸路,請?jiān)试S我倒一倒自己的苦水。
老婆當(dāng)初覺得我是一名iOS開發(fā)很高大上,那逼格啊,莫名比Android開發(fā)高幾個level,但咱偏偏是做iOS開發(fā)中最奇葩的安全那一塊的開發(fā),心中的苦逼只有戰(zhàn)友和同行知道。
隨著360衛(wèi)士新版推出騷擾號碼識別功能,廣大iPhone用戶又重拾了往日對騷擾電話攔截的心愿,雖然現(xiàn)在的實(shí)現(xiàn)方案只是“向通訊錄中添加騷擾號碼庫,能識別來電騷擾號碼、不能攔截來電”這樣一種無奈的方案,但是,對受限制較多的iOS系統(tǒng)的而言,安全類app的一點(diǎn)點(diǎn)功能提升,就意味著花費(fèi)在這個功能上大量的失敗嘗試。
試錯不是互聯(lián)網(wǎng)公司的專利,但是互聯(lián)網(wǎng)公司不試錯,就不能生存。當(dāng)初剛進(jìn)入360其實(shí)我也不懂上面這句話的意思,第一次聽team里的產(chǎn)品老大這么講,我心里還想:試個毛啊,驗(yàn)證一下而已,非得整這么洋氣的詞?后來的經(jīng)歷告訴我,試錯真不像看上去驗(yàn)證一段代碼那么輕松…
2012年初,我剛進(jìn)入團(tuán)隊(duì)3個月,運(yùn)營的同學(xué)反映每個月都能收到數(shù)千的用戶強(qiáng)烈要求增加來電歸屬地顯示、騷擾電話和垃圾短信攔截,然后技術(shù)leader就把我們拉到經(jīng)常討論到通宵,例舉數(shù)十種技術(shù)方案,也翻墻研究過很多國外iOS大神的分析,結(jié)論仍然是除了企業(yè)版用私有接口可以實(shí)現(xiàn)別無他法,那就先做企業(yè)版吧,經(jīng)過一個多月的封閉開發(fā),手機(jī)衛(wèi)士企業(yè)版正式推出了上面兩個功能,識別方法輕松有效:攔截來電/短信,把主叫號碼傳到云端與騷擾號碼庫進(jìn)行比對,最后把結(jié)果返回App端,App端予以展現(xiàn)。
圖:2012年初用戶反饋情況
iPhone用戶可以攔截騷擾電話和短信了,這解決了一小部分企業(yè)用戶的需求,也算圓了一個工程師小小的夢想。這段時間是我印象里少有的能夠讓人興奮起來的時光,因?yàn)樽鳛橐幻绦騿T,可以使用自己認(rèn)為最好的代碼完美的實(shí)現(xiàn)想要的功能,沒有什么比這個更有成就感了。事實(shí)也證明,企業(yè)用戶對這個功能的喜愛完全符合我們預(yù)期,這給了我們很大的鼓舞,但我很清楚,走到這一步,不是碼農(nóng)指間的神作,而是如履薄冰的探險。
按照蘋果的企業(yè)版證書開發(fā)許可協(xié)議,利用這樣的接口開發(fā)的應(yīng)用是不允許提供給普通用戶使用的,但是當(dāng)時面對普通用戶洶涌的而來的需求,我們確實(shí)沒有更完美的解決方案(其實(shí)直到現(xiàn)在也是),我們在企業(yè)用戶的反饋和建議中驗(yàn)證著每一個細(xì)節(jié),并穿插測試向普通用戶開放這個功能的可行性。結(jié)果,一不留神,還真就踩到地雷上了…
2013年1月25日,衛(wèi)士被正式下架AppStore,并且連累到公司的所有iOS端產(chǎn)品。
說真的,那天早上被產(chǎn)品總監(jiān)的電話叫醒,整個人都懵了,不是做夢吧?
我的iOS程序猿生涯TM剛開始1年就進(jìn)入了完全不可預(yù)期的狀態(tài)。
接下來的時間里,我轉(zhuǎn)戰(zhàn)越獄版、WindowsPhone版,甚至差一點(diǎn)去做服務(wù)端工程師,總之就是隨波逐流,但是在心底里始終有種欠債的感覺,而且下架初期用戶的不理解、競爭對手的抹黑與我們什么也做不了只能每天憧憬重新上架卻一次次失望的情緒像噩夢一樣揮之不去,最重要的是,作為直接參與這一“越軌”功能的實(shí)現(xiàn)并面對下架結(jié)果的我,和我們PM一樣僅剩下的一點(diǎn)盼頭,也就是祈禱自己的產(chǎn)品不會被用戶遺忘,那一段時間真實(shí)的感覺到了產(chǎn)品就像自己的孩子一樣。
這一等就是一年,我難得可以不用通宵,難得9點(diǎn)以前回家,難得有了更多時間陪陪老婆,在這如夢如幻、魂不守舍的一年,我還真的成了一個孩子的爸。
當(dāng)屌絲成大叔,當(dāng)大叔已成爹。2014年初,蘋果對360的開發(fā)者賬號解封,主產(chǎn)品手機(jī)衛(wèi)士的市場份額流失慘重,說真的,聽到重新組織團(tuán)隊(duì)恢復(fù)AppStore版開發(fā)的消息時,我第一反應(yīng)不是高興,而是困惑,我們能做什么?
一邊是iPhone用戶呼聲不斷的攔截騷擾的需求,一邊是蘋果對我們更加嚴(yán)格的審核(據(jù)說專門安排了兩組審核人員)和無法跨越的紅線。當(dāng)然,困惑歸困惑,產(chǎn)品該上還是要上的,不過是閹割了諸多功能之后的版本,包括攔截騷擾來電、來電歸屬地顯示、清理加速,呵呵,都砍掉了。
我們能做的除了適配iOS7扁平化,就是優(yōu)化代碼、美化界面和增加其它無關(guān)痛癢的功能,結(jié)果上線后用戶罵聲一片,我們既覺得委屈又覺得無奈,好想在更新日志說這個版本是美工開發(fā)的。
這種狀況一直持續(xù)到今年7、8月份,蘋果iOS8透露出一些新的接口,包括通知中心、輸入法等擴(kuò)展功能,作為一款安全軟件,通知中心接口的作用最大,于是我們在經(jīng)歷了兩次被拒的小插曲后趕在蘋果正式推送iOS8下載的第二天,國內(nèi)首家推出了完美適配iOS8和Arm64架構(gòu)并支持通知中心插件的版本更新,但是這仍然沒有解決用戶反饋?zhàn)疃嘈枨笞顝?qiáng)烈的騷擾電話攔截問題,直到一個偶然的機(jī)會…說起來,這個機(jī)會也跟公司的一條原則有關(guān)系,也是老周的3個凡是的一條——“凡是用戶提的問題,一定要追根述源,找到問題的原因,從用戶的角度想解決的方案?!睙o論用戶向我們建議、抱怨、還是怒目相向,團(tuán)隊(duì)里所有人都必須積極傾聽,理解用戶背后的需求,從而改善產(chǎn)品。
正因?yàn)榇耍覀冊谝淮蝺?nèi)部吐槽會議上,幸運(yùn)的借一個360論壇用戶對來電歸屬地顯示的建議聯(lián)想到了一個辦法:利用iPhone系統(tǒng)一個聯(lián)系人可以附帶若干電話號碼的機(jī)制,我們可以在用戶手機(jī)中新建一個聯(lián)系人,名稱為空,然后在下面帶上我們從云端拉取的1、2000個騷擾號碼,并給這些號碼的標(biāo)簽都命名為“騷擾號碼”,這樣在用戶接到這些號碼的來電時,因?yàn)闆]有姓名,iPhone系統(tǒng)就會顯示其標(biāo)簽名稱“騷擾號碼”,就等于是提醒了用戶!然后就開始研究吧,貌似簡單的功能,細(xì)節(jié)一大堆,尤其是要測試的工作很多:
1、把騷擾類型分別放在名字上、放在標(biāo)簽上、放在其它字段,寫入通訊錄,看通訊錄中的顯示、來電時的顯示、外撥時的顯示;
2、每個聯(lián)系人添加不同的號碼數(shù)量,對比測試:通訊錄啟動響應(yīng)速度、正常來電響應(yīng)速度、騷擾號碼來電響應(yīng)速度、正常外撥響應(yīng)速度、外撥騷擾號碼顯示速度、雙擊home顯示速度、最近聯(lián)系人打開和關(guān)閉時響應(yīng)速度;
3、號碼和標(biāo)簽的對應(yīng)關(guān)系、編碼方式,對比測試上面的各種響應(yīng)速度;
4、在不同的iPhone機(jī)型、iOS版本上測試,確定每款機(jī)型的最優(yōu)配置;
5、上面這些都搞定后,似乎不錯了,打開手機(jī)上的常用軟件,怎么推薦了這么多陌生手機(jī)號碼?尤其是一款可以推薦朋友的朋友的社交產(chǎn)品,對比一下:A產(chǎn)品只推薦朋友也就是你通訊錄中的人給你,那你發(fā)現(xiàn)推薦了一堆亂七八糟的人之后首先會想到把騷擾號碼庫刪除掉,這樣直接就可以解決問題,B產(chǎn)品是推薦朋友的朋友,你發(fā)現(xiàn)問題后刪除騷擾號碼庫根本沒用!因?yàn)槟阃ㄓ嶄浐糜阎兄灰幸粋€人他的通訊錄中有騷擾號碼庫,那騷擾號碼就依然會成為你“朋友的朋友”,如果這個騷擾號碼庫是上萬個號碼,結(jié)果簡直不敢想!于是我們尋找解決辦法:在手機(jī)號碼中嘗試增加各種無效的字符、國家碼的排列組合,在保證號碼能夠在來電時被蘋果系統(tǒng)識別出來的前提下測試能不能避開社交軟件的好友推薦,不能避免的,將我們的騷擾號碼聯(lián)系人特征發(fā)給產(chǎn)品的開發(fā)者或公司,請對方做規(guī)避處理,只有這樣,才能避免給用戶造成困惑;
6、對通訊錄備份軟件及相關(guān)的開發(fā)者也要重新走一遍第5條的流程;
7、刪除這個特殊聯(lián)系人后,通訊錄中會多出很多標(biāo)簽,永遠(yuǎn)保存在用戶手機(jī)中,iOS通訊錄不能批量清理掉這些標(biāo)簽,讓用戶一個個手工刪除又太繁瑣,能不能通過代碼批量刪除?能不能通過iTunes同步通訊錄刪除?能不能通過iCloud同步通訊錄刪除?能不能通過恢復(fù)手機(jī)設(shè)置刪除?能不能通過恢復(fù)手機(jī)所有內(nèi)容和設(shè)置刪除?能不能通過iTunes備份和恢復(fù)刪除?每一個方法都要試!
8、還有識別率問題,騷擾號碼庫的大?。ㄍㄓ嶄浿羞@個特殊聯(lián)系人的號碼數(shù)量),和騷擾識別率之間的權(quán)衡,如何才能在通訊錄不受影響的情況下,盡可能提高識別率?這里真得感謝衛(wèi)士Android版的廣大用戶這幾年來標(biāo)記產(chǎn)生的龐大的騷擾號碼庫(比某狗的多出兩個數(shù)量級好嗎!),量級夠大,才能做到按照用戶號碼歸屬地分別下發(fā)Top1000的數(shù)據(jù)就能保證不錯的識別率,后來看到有人說這是2014年最佳大數(shù)據(jù)實(shí)踐案例,其實(shí)和我們team一點(diǎn)關(guān)系沒有,都是人家安卓用戶的貢獻(xiàn);
9、最后還有個終極問題,這次除了騷擾識別的主要實(shí)現(xiàn)機(jī)制必須嚴(yán)格遵守蘋果的開發(fā)者協(xié)議外,任何解決卡慢、社交產(chǎn)品兼容等副作用的方法都必須要確保不逾越這條紅線?。ㄟ@一點(diǎn),與廣大iOS開發(fā)者共勉)
分析工作做完,經(jīng)過近兩周如履薄冰又絞盡腦汁的緊張加班,新版產(chǎn)品終于在11月23日再次以試錯的心態(tài)提交蘋果審核,結(jié)果,兩天后我們看到另一個大體思路相同的競品正式上線了!而且因?yàn)樽鞣ū容^粗暴導(dǎo)致用戶手機(jī)卡的一逼、罵聲一片,我和團(tuán)隊(duì)里的產(chǎn)品普遍都開始擔(dān)心,難道這次又要翻船?要不要低調(diào)點(diǎn)放量?甚至取消上架?繼續(xù)上吧,一來不理解的用戶會說你抄襲,二來用戶對于這種實(shí)現(xiàn)方法不知道能不能接受,不上吧,我們處心積慮考慮的那么多因素、做的那么多測試眼睜睜無用武之地。最后,產(chǎn)品總監(jiān)還是一句話拍板:刀山火海都過來了,不試個結(jié)果死不瞑目!
結(jié)果是:這一次,我們可能試對了!至少到目前為止,用戶對我們這次騷擾識別功能的反饋是正面的,雖然有一些說我們抄襲的聲音,但也很快被淹沒在大家的好評中。作為一名程序員,我想這就夠了。
當(dāng)然,我們也沒閑著,接下里隨著服務(wù)端數(shù)據(jù)算法的改進(jìn),和我們對蘋果iOS系統(tǒng)的了解深入,我們將嘗試解決騷擾號碼庫打開速度和識別率之間的矛盾,譬如先把號碼庫從1000個提高到2500個,提高騷擾號碼識別率的同時提高用戶打開這個特殊聯(lián)系人的速度,通過試錯一步步把這個功能達(dá)到我們認(rèn)可、用戶也認(rèn)可的理想狀態(tài)!
之前聽過一個說法:程序員天生就是理想主義者,代碼要寫的很整潔、執(zhí)行效率要很高、容錯要很好、適應(yīng)性要很強(qiáng),想想和自己的編程習(xí)慣還真是蠻符合的,但是自己這幾年在360的開發(fā)經(jīng)歷卻讓我完全體會不到這種理想主義帶來的任何好處,反而是處處碰壁,直到現(xiàn)在才終于明白:人世間沒有一次滿足所有用戶需求的程序,只有一步步試錯、越來越貼近用戶需求的程序!
過去3年,頭發(fā)白了一茬,在為解決iPhone騷擾電話的問題從未止步,我,一個小小碼農(nóng),已習(xí)慣了紅線內(nèi)戴著腳鐐舞蹈。
用老婆的話來說,這3年,我還是有收獲的,收獲了一個娃。
自從當(dāng)?shù)院?,心態(tài)也好了很多,每一天都苦逼并努力著,抬頭看看帝都霧霾散去的晴空,期待著iOS未來的開放。
本文作者:360手機(jī)衛(wèi)士程序員 閆占龍
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。