基于ios的鬧鈴社交軟件的設(shè)計與開發(fā)【網(wǎng)絡(luò)工程畢設(shè)論文】_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  安徽工業(yè)大學</b></p><p>  畢業(yè)設(shè)計(論文)說明書</p><p><b>  安徽工業(yè)大學</b></p><p>  畢業(yè)設(shè)計(論文)任務書</p><p>  畢業(yè)設(shè)計(論文)的主要內(nèi)容及要求:</p><p>  對社交AP

2、P進行需求的分析</p><p>  熟練掌握一門編程語言</p><p>  設(shè)計主要實現(xiàn)以下功能</p><p>  1.用戶定制鬧鈴,其他用戶通過網(wǎng)絡(luò)電話的方式叫醒該用戶;</p><p>  2.用戶可以發(fā)送圖文動態(tài)到社區(qū),其他用戶可以查看其動態(tài),并點贊、評論;</p><p>  3.界面美觀大方,簡單易操作

3、。</p><p>  四、完成與設(shè)計有關(guān)的外文文獻翻譯,譯文約3000字。</p><p>  五、完成畢業(yè)設(shè)計說明書(畢業(yè)論文)一份。</p><p>  指導教師簽字: </p><p><b>  摘要</b></p><p>  在當代移動互聯(lián)的大環(huán)境下,

4、手機已經(jīng)成為人們生活中不可或缺的一部分。在人與人之間的交流過程中,社交app憑借著方便快捷,不受地域、空間、時間限制等優(yōu)點更是在當前的社會下大行其道。無疑在這樣的環(huán)境下,社交APP有著無比廣闊的前景。</p><p>  本文研究的是一款基于iOS平臺的應用軟件,采用Objective-C為設(shè)計語言,通過iPhone為硬件,實現(xiàn)網(wǎng)絡(luò)電話,溝通互動交流,用戶留言等功能。該應用基于iOS 9進行適配,主要利用coco

5、a框架,在iPhone上實現(xiàn)了結(jié)合動畫等基本功能的社交應用。網(wǎng)絡(luò)電話主要通過Voice over IP服務來實現(xiàn),而Voice over IP服務是通過一個開放源代碼的協(xié)議棧PJSIP來完成的。APP中使用了大量的自定義控件來滿足產(chǎn)品功能以及視覺效果上的需求,同時使用UITableView控件充分展示了后臺提供的數(shù)據(jù),實現(xiàn)了用戶的登錄與注冊,定制鬧鈴,發(fā)表動態(tài)以及用戶之間通話等功能。</p><p>  本軟件作

6、為一個社交、工具類軟件,缺少了一個十分重要的功能:即時通訊。下一步的計劃是添加即時通訊功能,方便用戶之間的交流,同時也是增加用戶量的一種方式。另外,再添加視頻、音頻的錄制和播放,以多媒體的方式來吸引用戶,增加用戶粘性。</p><p>  關(guān)鍵詞:iPhone;社交APP;iOS;MVC;鬧鈴;Objective-C</p><p><b>  Abstract</b>

7、;</p><p>  In the contemporary environment of mobile Internet, mobile phones have become an indispensable part of people's lives. In the process of communication between people, the social APP with conve

8、nient, without geographical, space, time limit, etc. it is more popular in the current society. Certainly in this environment, social APP has a very broad prospects.</p><p>  This paper is based on a platfor

9、m iOS applications using Objective-C language for the design, through the iPhone hardware, network telephone communication interaction, user comments and other features. This application is based iOS 9 to be adapted, the

10、 main use of cocoa framework, the iPhone realized the combination of animation and other basic functions of social applications. Internet telephony mainly through Voice over IP service and Voice over IP service is throug

11、h an open source stack PJSIP</p><p>  As a social, tools software, the APP missing a very important function:IM. Next plan is to add the IM function to facilitate communication between users, but also a way

12、to increase the amount of users. In addition, add video, audio recording and playback function, to attract users and increase user stickiness.</p><p>  【Key words】 iPhone;Social APP;iOS;MVC;Alarm;Objective-C

13、</p><p><b>  目錄</b></p><p><b>  1. 緒論1</b></p><p>  1.1 研究背景1</p><p>  1.2 研究的目的和意義1</p><p>  1.3國內(nèi)外研究現(xiàn)狀2</p><p> 

14、 1.4 本系統(tǒng)主要內(nèi)容以及結(jié)構(gòu)2</p><p>  2. 開發(fā)環(huán)境及關(guān)鍵技術(shù)4</p><p>  2.1 Mac OS X 開發(fā)平臺4</p><p>  2.2 Objective-C4</p><p>  2.3 iOS系統(tǒng)的優(yōu)勢5</p><p>  2.3.1 iOS系統(tǒng)5</p>

15、<p>  2.3.2 軟件與硬件整合度高5</p><p>  2.3.3 安全性強5</p><p>  2.4 X-code5</p><p>  2.5 PJSIP6</p><p>  3. 需求分析與概要設(shè)計7</p><p>  3.1 需求分析7</p><

16、p>  3.1.1 技術(shù)可行性分析7</p><p>  3.1.2 經(jīng)濟可行性分析7</p><p>  3.2 概要設(shè)計7</p><p>  4. 社交app詳細設(shè)計10</p><p>  4.1 工具類設(shè)計10</p><p>  4.2 網(wǎng)絡(luò)請求11</p><p>

17、;  4.3 PJSIP設(shè)計12</p><p>  4.4 模塊功能設(shè)計16</p><p>  4.4.1 登錄注冊模塊16</p><p>  4.4.2 鬧鈴模塊16</p><p>  4.4.3 隨機呼叫模塊18</p><p>  4.4.4 動態(tài)模塊19</p><p&g

18、t;  4.4.5 個人中心模塊設(shè)計22</p><p><b>  5.總結(jié)24</b></p><p>  5.1 論文總結(jié)24</p><p><b>  5.2 展望24</b></p><p><b>  參考文獻25</b></p><

19、p><b>  致 謝26</b></p><p><b>  1. 緒論</b></p><p><b>  1.1 研究背景</b></p><p>  如今移動開發(fā)產(chǎn)業(yè)最主流的開發(fā)平臺就是iOS(iPhoneOS)和Android。Android是基于Linux的開放源代碼的操作系統(tǒng),

20、其最大的優(yōu)點就是開放、自由。因此,Android在移動開發(fā)領(lǐng)域始終保持占有一半以上的市場份額。而iOS的優(yōu)點也相當明顯:流暢的操作體驗,優(yōu)美的UI界面,應用程序通過AppStore嚴格把控,只有通過官方檢測的APP才能被用戶安裝到手機上,這也保證了iOS最重要的優(yōu)點,安全性高。這是其他移動端操作系統(tǒng)無法媲美的。</p><p>  現(xiàn)如今,人們的生活節(jié)奏越來越快,手機已經(jīng)成為了人們首選的娛樂和交流的方式。在這樣的

21、背景下,社交APP無疑有著非常巨大的發(fā)展前景。在緊張的生活工作節(jié)奏中,人們很難有大量集中的時間和朋友或家人一起交流互動,增進感情。如果能夠把零散的時間利用起來通過手機APP與好友互動,另外還有機會認識來自全國各地、民俗風格迥異的新朋友,這會給人們的業(yè)余生活帶來許多的樂趣。</p><p>  此次設(shè)計的APP具有社交APP的基礎(chǔ)功能,例如:用戶收發(fā)消息,發(fā)送/查閱動態(tài),點贊、評論等等。并在此基礎(chǔ)上進行了擴展,用戶

22、可以定制鬧鈴,撥打免費網(wǎng)絡(luò)電話,這是此次設(shè)計的APP的一大亮點。</p><p>  1.2 研究的目的和意義</p><p>  1967年,哈佛大學的心理學教授Stanley Milgram(1934~1984)創(chuàng)立了六度分割理論,通俗地解釋就是:你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過六個人你就能夠認識任何一個陌生人。按照六度分隔理論,每個個體的社交圈都不斷放

23、大,最后成為一個大型網(wǎng)絡(luò)。這是社會性網(wǎng)絡(luò)的早期理解。</p><p>  根據(jù)中咨網(wǎng)研究部預計,到2017年,全球網(wǎng)民人數(shù)將達到8.5億人。手機APP 作為移動互聯(lián)網(wǎng)快速發(fā)展的助推器和其搶占市場份額的重要突破口,被廣泛關(guān)注并運用于實際生活。而在2015年末的統(tǒng)計當中,社交類APP對人類生活方式的進步和影響更是功不可沒。在國內(nèi)外風靡的APP中,如微信、微博、QQ、Facebook等,都有著自己鮮明的特點,但是在大方

24、向都是以人類社交圈為根本基礎(chǔ)。本APP從人性化的設(shè)計角度出發(fā),旨在探索出一種新型的社交APP的方向。</p><p>  1.3國內(nèi)外研究現(xiàn)狀</p><p>  移動社交網(wǎng)絡(luò)是在社交網(wǎng)絡(luò)的基礎(chǔ)上演化、發(fā)展而來的。社交網(wǎng)絡(luò)(Social Network),是隨著E-mail、BBS、博客等互聯(lián)網(wǎng)應用而自然發(fā)展起來的反應社會群體的一種形態(tài),它的本質(zhì)是提供了一個在人群(朋友圈)中分享興趣、愛好

25、、狀態(tài)和活動等信息的在線平臺。隨著移動互聯(lián)網(wǎng)的不斷發(fā)展,社交網(wǎng)絡(luò)對人類社會活動的方式方法、效率效果等都產(chǎn)生了深遠的影響。</p><p>  在國內(nèi)市場,微信,QQ和微博已經(jīng)做大做強并且成為社交APP行業(yè)的巨頭,其他出彩的社交APP并不多,其中陌陌已經(jīng)上市,但是一開始卻是打著某些不好的招牌,招攬的用戶群,不過現(xiàn)如今它也已經(jīng)開始轉(zhuǎn)型。所以,經(jīng)過這些年社交APP市場的發(fā)展和過濾,想要做出亮眼的、出眾的社交APP,就盡

26、量不要走傳統(tǒng)路線,避開微信、QQ這樣的巨頭,才有機會成長和發(fā)展起來。</p><p>  國外有款類似的鬧鈴社交軟件叫做Wakie,在Wakie創(chuàng)始人Hrachik Adjamian看來,人們已經(jīng)厭煩每天早上千篇一律的系統(tǒng)鬧鈴聲,而如果換做每天早上叫醒你的是一個陌生人,人們則會有充足的好奇心以及新鮮感。而且,在你成為Wakie付費用戶之后,你還能看到那個喚醒你的他(她)的基本資料,并可添加其為好友,與其互動交流。

27、2015年年中發(fā)布,Wakie已經(jīng)擁有150萬注冊用戶,用戶群覆蓋了80個國家。由此說明了在未來,這項新奇的服務,能夠有很好的發(fā)展前景。</p><p>  此次設(shè)計的鬧鈴社交APP除了通話喚醒功能,還提供了基本的“社區(qū)”社交板塊,類似論壇形式。應用內(nèi)每個用戶都能夠在“社區(qū)”內(nèi)發(fā)表動態(tài),并且所有動態(tài)都會以信息流的方式呈現(xiàn)出來,用戶也可以對動態(tài)進行點贊和評論。這種方式是最簡單最直接,也是當前社交APP主流的好友之間

28、進行信息交流的一種形式之一。</p><p>  1.4 本系統(tǒng)主要內(nèi)容以及結(jié)構(gòu)</p><p>  本課題主要研究了一款基于Objective-C語言的iPhone社交APP的設(shè)計與實現(xiàn),這款應用整體劃分了五個模塊,主要包括登錄注冊模塊、鬧鈴模塊、免費網(wǎng)絡(luò)電話模塊、動態(tài)模塊、個人中心模塊,其中網(wǎng)絡(luò)電話模塊是這款應用的技術(shù)難點也是亮點,動態(tài)模塊是核心。</p><p&g

29、t;  這五個模塊的主要功能:</p><p>  1. 登錄注冊模塊:注冊功能通過APP下發(fā)手機驗證碼,以當前用戶手機號為賬號進行注冊。通過高德地圖SDK進行定位用戶當前所在地區(qū)。并收集用戶基本信息,注冊發(fā)送到服務器。登錄功能即輸入已注冊的帳號和密碼進行登錄。</p><p>  2. 鬧鈴模塊:banner圖的定時輪播,展示本APP的特色、近期活動或者新聞、廣告等。鬧鈴列表的展示,顯示

30、了用戶制定的鬧鈴,開關(guān)按鈕控制鬧鈴的開關(guān)。用戶可點擊列表項對當前已定制的鬧鈴進行修改,也可左滑刪除鬧鈴列表項。</p><p>  3. 免費網(wǎng)絡(luò)電話模塊:顯示當前待叫醒用戶人數(shù)。點擊隨機呼叫按鈕,服務器自動分配一個在線用戶進行呼叫,實現(xiàn)免費網(wǎng)絡(luò)電話。</p><p>  4. 動態(tài)模塊:該模塊展示所有用戶發(fā)表的動態(tài)內(nèi)容以及動態(tài)回復內(nèi)容,用戶可進行評論和點贊、舉報。</p>

31、<p>  5. 個人中心模塊:包含個人資料編輯、個人主頁、已關(guān)注好友列表、消息列表、設(shè)置、用戶本人的動態(tài)列表、通話記錄列表、社會化分享等。</p><p>  本文分為五章,分別為:第一章為緒論部分,主要概述了本APP的研發(fā)背景、研究目的和意義、國內(nèi)外研究現(xiàn)狀以及APP的功能概述。第二章介紹了開發(fā)系統(tǒng)所用到的Objective-C語言、開發(fā)環(huán)境和關(guān)鍵技術(shù),這是開發(fā)本APP的基礎(chǔ)。第三章主要對此次設(shè)計的

32、APP進行需求分析,確定系統(tǒng)流程,劃分程序模塊,設(shè)計數(shù)據(jù)結(jié)構(gòu)等,為實現(xiàn)應用確定方向。第四章為應用內(nèi)主要功能的具體實現(xiàn),介紹APP是如何實現(xiàn)相應的功能,以及對APP進行一些測試,指出開發(fā)過程中遇到的問題。第五章對此次畢業(yè)設(shè)計進行總結(jié),和對于這款應用未來的構(gòu)思,指出不足之處并標明繼續(xù)研究的方向。</p><p>  2. 開發(fā)環(huán)境及關(guān)鍵技術(shù)</p><p>  2.1 Mac OS X 開發(fā)平

33、臺</p><p>  Mac OS X是蘋果公司為Mac系列產(chǎn)品開發(fā)的專屬的操作系統(tǒng),是蘋果麥金塔(Macintosh)電腦操作系統(tǒng)軟件的總稱?;趫匀缗褪腢NIX,系統(tǒng)運行穩(wěn)定,操作簡單便捷,設(shè)計美觀。配合處處創(chuàng)新的蘋果硬件,使得蘋果設(shè)備安全易用,高度兼容,堪稱完美。</p><p>  Mac OS X基于FreeBSD系統(tǒng),是采用“面向?qū)ο蟛僮飨到y(tǒng)”的全面的操作系統(tǒng)?!懊嫦?qū)ο蟛?/p>

34、作系統(tǒng)”是史蒂夫·喬布斯(Steve Jobs)所開發(fā)的。喬布斯相信大家都知道,他是最偉大的蘋果公司聯(lián)合創(chuàng)始人之一。今天蘋果手機能夠風靡全球,喬布斯功不可沒。其擁有許多的技術(shù)方面的顯著特點:</p><p>  1.全64位技術(shù),可以通過第三方的Mode Selector進行64位和32為切換。</p><p>  2.OpenCL,是一種讓圖形處理器發(fā)揮極致來加速應用程序性能的

35、新技術(shù)。</p><p>  3.對于iOS開發(fā)特別重要的是:Grand Central Dispatch .幫助程序編譯人員使用多核心編譯,增強軟件多核心支持。Grand Central Dispatch(GCD)是異步執(zhí)行任務的技術(shù)之一。開發(fā)者只需要定義想執(zhí)行的任務并追加到適當?shù)腄ispatch Queue中,GCD就能生成必要的線程并計劃執(zhí)行任務。我們使用GCD可以使用非常簡單的記述方法,實現(xiàn)了極為復雜繁瑣

36、的多線程編程。</p><p>  Mac OS X作為蘋果的操作系統(tǒng),界面精美,功能齊全,使用方便,操作人性化。由于Mac OS X只能配合蘋果的硬件才能使用,而且蘋果的設(shè)備一般來說價格都較高,所以Mac OS X系統(tǒng)的普及性暫時不是很高。但是隨著人們生活水平的提高,人們越來越追求高品質(zhì)的生活方式,越來越多的人們選擇了Mac OS X,所以我相信,Mac OS X會越來越好。</p><p&

37、gt;  2.2 Objective-C</p><p>  Objective-C是一門簡單的計算機語言,是在C語言的基礎(chǔ)上發(fā)展而來的面向?qū)ο缶幊陶Z言。作為面向?qū)ο缶幊陶Z言,它擁有著面向?qū)ο缶幊陶Z言的三要素——封裝,繼承,多態(tài)。Objective-C主要用來開發(fā)iOS操作系統(tǒng)和應用程序,Mac OS X操作系統(tǒng)和應用程序。它的流行主要歸功于iPhone手機的成功。而iPhone手機之所以流行,同時也是因為使用了

38、Objective-C開發(fā)出來的iOS操作系統(tǒng)。所以說iPhone和Objective-C是相輔相成,密不可分的。</p><p>  Objective-C語言誕生于 20 世紀 80 年代,由布萊德·考克斯(Brad Cox) 發(fā)明,意在將強大的、流行的、可移植的C語言與優(yōu)雅的 Smalltalk 語言結(jié)合在一起。Objective-C 語言是C語言的一個擴展集,它以C語言為基礎(chǔ),在語言中添加了一些

39、微妙但意義重大的特性。</p><p>  Objective-C初期的版本不支持垃圾回收機制,使用MRC,需要開發(fā)者自己手動控制內(nèi)存管理,開發(fā)起來相當麻煩。不過令開發(fā)人員欣慰的是后來蘋果公司發(fā)布的Xcode支持了自動釋放ARC (Automatic Reference Counting),不等同于嚴格意義上的垃圾回收機制,但是會在編譯期間,編譯器自動添加[NSObject release],不需要開發(fā)者手動re

40、lease對象。這大大提升了開發(fā)人員的開發(fā)速度,使得基于OC的開發(fā)更加方便。</p><p>  蘋果公司一直在通過各種方式嘗試降低Objective-C語言的復雜度,淘汰手動管理內(nèi)存和C標準頭文件,引進ARC機制,還有通過點語法訪問屬性的getter/setter方法。所以我堅信,Objective-C語言一定會有很好的未來。</p><p>  2.3 iOS系統(tǒng)的優(yōu)勢</p&g

41、t;<p>  2.3.1 iOS系統(tǒng)</p><p>  iOS是蘋果公司開發(fā)的移動設(shè)備的專屬操作系統(tǒng)。自2007年1月9日的Macworld大會上蘋果公司公布這個系統(tǒng),到現(xiàn)在將近十年的時間,iOS系統(tǒng)不斷更新,不斷完善。Siri、FaceTime、Safari、Airdrop等內(nèi)置應用以及功能,提供了更加智能化和人性化的功能,而指紋解鎖、3Dtouch等功能更是錦上添花,使得iOS系統(tǒng)獨具創(chuàng)新,

42、別具一格。</p><p>  2.3.2 軟件與硬件整合度高</p><p>  iOS系統(tǒng)的軟件與硬件的整合度相當高,這使得其分化大大降低,在這方面要遠勝于碎片化嚴重的Android。這樣也增加了整個系統(tǒng)的穩(wěn)定性,經(jīng)常使用iPhone的朋友也能發(fā)現(xiàn),手機很少出現(xiàn)死機、無響應的情況,大大提升了用戶體驗。</p><p>  2.3.3 安全性強</p>

43、<p>  安全性實際上是一個操作系統(tǒng)最重要的部分之一。對于用戶來說,不管是信息、照片、通話記錄或者地址等,移動設(shè)備中的任何信息都必須保證其安全,所以,保障手機中的信息安全具有十分重要的意義。蘋果官方AppStore建立了完整的開發(fā)者認證和應用審核機制,這充分保證了某些惡意程序基本上沒有被用戶安裝到手機上的機會。為了保護用戶的隱私,iOS用戶的許多操作例如獲取用戶位置、打開系統(tǒng)照片圖庫等都需要獲得用戶的許可。另外用戶可以通

44、過“查找我的iPhone”功能定位到丟失的手機,并使其發(fā)出響聲,或擦除所有數(shù)據(jù)信息。如果用戶的設(shè)備失而復得,他還可以回復上一次的備份。種種安全功能,使得iOS的系統(tǒng)安全性在所有移動設(shè)備中高居榜首。</p><p>  2.4 X-code</p><p>  iOS的開發(fā)環(huán)境是我所見過的集成度最高的,只需要下載安裝Xcode軟件。Xcode是一種不開源的集成開發(fā)環(huán)境,運行于Mac OS X

45、操作系統(tǒng)下,提供給開發(fā)者用于開發(fā)Mac OS X,iOS應用程序。Xcode操作方便,編譯速度極快,使得開發(fā)者的每次操作都很輕松。所謂“工欲善其事,必先利其器”,想要更好的開發(fā)iOS程序,就要先學會使用Xcode。Xcode會把所需求的基本開發(fā)環(huán)境都已經(jīng)搭建好。其中包括了編譯環(huán)境、SDK文檔、模器、單元測試工具、性能測試工具、代碼靜態(tài)分析工具、版本管理工具接口、蘋果自家服務接口等等。Xcode會隨著iOS系統(tǒng)版本升級而發(fā)布新版本并向下兼

46、容,本項目使用的是Xcode7.2。</p><p><b>  2.5 PJSIP</b></p><p>  PJSIP是一個開源的SIP協(xié)議棧,支持多種SIP的擴展功能。它實現(xiàn)了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作為基于SIP的一個多媒體通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有良好的移植性,幾乎支持當前所有

47、系統(tǒng):桌面系統(tǒng)、嵌入式系統(tǒng)、智能手機系統(tǒng)。</p><p>  PJSIP同時還支持語音通話、視頻通話和即時通訊功能。此外,它具有十分完善的開發(fā)文檔和資料,對開發(fā)者來說是一個福音。</p><p>  3. 需求分析與概要設(shè)計</p><p><b>  3.1 需求分析</b></p><p>  移動應用講究創(chuàng)新,無

48、論是新穎的界面、創(chuàng)意的操作方式還是獨特的應用內(nèi)容,都能夠吸引用戶的目光,產(chǎn)品人員經(jīng)常會提出一些新的點子,開發(fā)人員需要配合產(chǎn)品的更改,所以移動應用項目的需求較傳統(tǒng)軟件需求更容易變化。</p><p>  3.1.1 技術(shù)可行性分析</p><p>  本鬧鈴社交APP在Mac平臺使用OC編程語言開發(fā),OC語言簡單易學,Xcode開發(fā)環(huán)境易安裝。當前基于OC的開發(fā)十分火熱,網(wǎng)上也有許多第三方的

49、開源代碼庫,如網(wǎng)絡(luò)請求庫AFNetworking,圖片自動加載及緩存庫SDWebImage,TableView下拉刷新上拉加載庫MJRefresh等等。OC語言主要實現(xiàn)客戶端的開發(fā),配合服務器端進行數(shù)據(jù)傳輸,該社交APP的開發(fā)變得更加簡單。</p><p>  3.1.2 經(jīng)濟可行性分析</p><p>  在移動互聯(lián)網(wǎng)的大浪潮下,開發(fā)一款APP變得經(jīng)濟實惠,只要有一臺Mac電腦,免費下載

50、安裝Xcode軟件,直接就可以進行開發(fā),而且許多第三方的服務對于這種小型APP完全免費,例如第三方社會化分享平臺ShareSDK、友盟,第三方IM平臺融云、環(huán)信,第三方推送平臺極光推送,個推推送等,都可以免費使用它們的SDK進行開發(fā)。集成第三方的SDK使得開發(fā)一款APP變得更加高效、經(jīng)濟、方便。唯一需要花錢的地方就是蘋果的上線需要一個蘋果的開發(fā)者賬號。所以在費用上我們可以忽略不計。</p><p><b&g

51、t;  3.2 概要設(shè)計</b></p><p>  根據(jù)項目的需求,整個工程使用MVC設(shè)計模式,我們把用戶信息、鬧鈴信息等數(shù)據(jù)模型放在Model層,界面的實現(xiàn)放在View層,業(yè)務邏輯、從后臺請求數(shù)據(jù)以及數(shù)據(jù)處理放在Controller層,這樣使得整個應用模塊化,降低模塊與模塊之間的耦合度,利于后期代碼的維護以及迭代。這樣也更加符合APP的設(shè)計規(guī)范,MVC也是當前十分流行的軟件設(shè)計模式。</p&

52、gt;<p>  3.2.1 系統(tǒng)功能結(jié)構(gòu)圖:如圖(3-1)所示</p><p>  圖(3-1)系統(tǒng)功能結(jié)構(gòu)圖</p><p>  項目中的視圖控制器由標簽欄(TabbarController)控制所有的視圖控制器(ViewController)。我們可以通過標簽欄上的按鈕來選擇不同的頁面,并且完成相應的需求。在實現(xiàn)的過程中可以根據(jù)標簽欄的下標屬性(selectedInde

53、x)來進行切換視圖控制器。而pjsip需要在app打開時連接pjsip服務器并且在各個頁面接收到狀態(tài)改變(如來電或接收電話),所以放在標簽欄里面進行控制。因為需要完成這些需求,所以在用戶打開程序之后,我們需要把程序的根視圖控制器設(shè)為標簽欄。與此同時,在標簽欄設(shè)置它控制的視圖控制器的過程中,需要給各個頁面添加導航欄,以便視圖控制器需要切換頁面的時候進行壓棧操作。</p><p>  登錄注冊需求:注冊功能使用短信接

54、收驗證碼來進行控制。在注冊頁面記錄用戶的信息,反饋給服務器進行記錄。并在注冊頁面實現(xiàn)了定位功能。登錄功能輸入帳號密碼,發(fā)送給服務器,判斷是否登錄成功。</p><p>  .鬧鈴定制需求:banner 圖實現(xiàn)圖片輪播。展示用戶定制的鬧鈴,并設(shè)定開關(guān)監(jiān)聽鬧鈴的狀態(tài)。鬧鈴定制頁面,時間的選擇,設(shè)定鬧鈴的周期,選擇叫醒自己的人的性別。</p><p>  .隨機呼叫需求:顯示當前在線用戶在線人數(shù)

55、,設(shè)定隨機呼叫按鈕,自動匹配當前時間范圍內(nèi)30min的鬧鈴。我們在界面上展示了用戶在當前時間段所能夠呼叫鬧鈴的數(shù)量,當用戶點擊按鈕進行呼叫的同時,服務器會隨機返回一個鬧鈴,然后客戶度端會與這個鬧鈴的制定者來建立連接。</p><p>  互動社區(qū)需求:顯示所有用戶的心情狀態(tài),點擊頭像可查看該用戶的個人主頁。實現(xiàn)圖文混排。動態(tài)的發(fā)布頁面,編輯文字和圖片。</p><p>  個人中心需求:細

56、分幾個小模塊:個人頭像,叫醒人數(shù),個人資料編輯,好友,記錄,個人動態(tài),消息,設(shè)置以及分享。</p><p>  個人資料編輯:通過拍照或者圖庫修改頭像。并且可以修改年齡和性別;</p><p>  好友:顯示個人的好友,可對好友進行編輯來刪除</p><p>  記錄:顯示了個人的呼叫記錄和被叫醒記錄。 </p><p>  個人動態(tài):顯示個

57、人的動態(tài),可進行編輯和刪除。</p><p>  消息:可查看系統(tǒng)消息,以及其他用戶給用戶發(fā)來的消息,當有未查閱的消息時,會在個人中心的消息圖標上有小紅點進行提示??捎镁庉嫲粹o來進行刪除當前消息。</p><p>  密碼設(shè)置:可以更改符合規(guī)定格的式密碼。</p><p>  清理緩存:清理圖片的緩存。(保留動態(tài)的文字以免影響用戶體驗。)</p>&l

58、t;p>  意見反饋:收集用戶對app的意見。</p><p>  評分:跳轉(zhuǎn)到AppStore對本應用進行評分。</p><p>  檢查更新:用戶自己檢查當前用的版本。</p><p>  退出登錄:注銷當前賬戶。</p><p>  3.2.2 功能示例圖:如圖(3-2)所示</p><p><b&g

59、t;  基本功能:</b></p><p>  圖(3-2)功能示例圖</p><p>  4. 社交app詳細設(shè)計</p><p><b>  4.1 工具類設(shè)計</b></p><p>  在設(shè)計過程當中,我們需要存儲一定的信息來完成一些需求。當我們第一次打開程序,用戶需要登錄注冊。而在此之后,除非用戶執(zhí)

60、行退出登錄事件,我們應該在用戶打開程序之后,程序默認是上一次登錄的賬號登錄的,不必重新登錄,以此來改善了用戶體驗。此時我們就需要把上一次登錄的信息保存在沙盒內(nèi)。打開程序時,從沙盒中獲取賬號的信息。同時保留移除沙盒信息的方法,在我們退出登錄時,需要清空這些數(shù)據(jù),否則無法用新賬號登錄,從而導致程序崩潰。</p><p>  有多個地方需要用到用戶的信息,在用戶的登錄時把用戶的信息存入沙盒。</p>&l

61、t;p>  #pragma mark - 緩存用戶ID</p><p>  +(void)saveUserId:(NSNumber *)userId{</p><p>  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  [userDefaults

62、setObject:userId forKey:kUserID];</p><p>  [userDefaults synchronize];</p><p><b>  }</b></p><p>  #pragma mark - 清除用戶信息</p><p>  +(void)clearProfile{</p&

63、gt;<p>  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  [userDefaults setObject:@(0) forKey:kUserID];</p><p>  [userDefaults setObject:@"點擊頭像登錄"

64、 forKey:kUserName];</p><p>  [userDefaults setObject:@(0) forKey:kSex];</p><p>  [userDefaults setObject:@(0) forKey:kLocation];</p><p>  [userDefaults synchronize];</p><

65、p><b>  }</b></p><p>  #pragma mark - 獲取用戶信息,返回模型</p><p>  +(BaseModel *)myProfile{</p><p>  BaseModel * model = [BaseModel new];</p><p>  NSUserDefaults

66、* userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  model.userId = [userDefaults objectForKey:kUserID];</p><p>  model.nickname = [userDefaults objectForKey:kUserName];</p>&

67、lt;p>  model.sexy = [userDefaults objectForKey:kSex];</p><p>  return model;</p><p><b>  }</b></p><p>  #pragma mark - 獲取本人信息,返回字典</p><p>  +(NSDictionar

68、y *)getOwnInformation{</p><p>  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  NSString *userId = [userDefaults objectForKey:kUserID];</p><p>  NSSt

69、ring * name = [userDefaults objectForKey:kUserName];</p><p>  NSString * sexy = [userDefaults objectForKey:kSex];</p><p>  NSString * location = [userDefaults objectForKey:kLocation];</p>

70、<p>  return @{@"userId":userId,@"nickname":name,@"sex":sexy,@"region":location};</p><p><b>  }</b></p><p><b>  4.2 網(wǎng)絡(luò)請求</b>

71、</p><p>  本APP作為一個社交APP,幾乎每個功能都要用到網(wǎng)絡(luò)請求,我使用第三方庫AFNetworking 來進行網(wǎng)絡(luò)請求。在這個程序中,基本所有頁面都需要與服務器進行數(shù)據(jù)傳輸,所以網(wǎng)絡(luò)請求是這個程序不可或缺的、至關(guān)重要的功能。這里使用POST需要將用戶的操作以及請求內(nèi)容發(fā)送給服務器,然后,服務器根據(jù)用戶的請求,把數(shù)據(jù)以相應的格式返回給用戶APP,然后通過代碼將復雜的數(shù)據(jù)以簡單直觀的形式展現(xiàn)給用戶。比

72、如動態(tài)頁面的發(fā)動態(tài)、點贊、評論、查看原圖等功能,都充分地詮釋了網(wǎng)絡(luò)請求對于一個社交軟件的重要性。</p><p>  在iOS 9中,新增了ATS(App Transport Security)特性,也就是網(wǎng)絡(luò)請求從原來的HTTP改成了更加安全的HTTPS。HTTP是連接簡單的明文傳輸,而HTTPS是可進行加密傳輸、身份認證的網(wǎng)絡(luò)協(xié)議,比HTTP協(xié)議更加安全,對數(shù)據(jù)傳輸起到保障性的作用,簡單的說就是HTTP的安全

73、版。所以在我們進行網(wǎng)絡(luò)請求之前需要在info.plist文件中添加NSAppTransportSecurity字段,然后在該字段下添加NSAllowsAritraryLoads字段,并將其設(shè)置為YES。這樣就讓原來請求用到的HTTP,全都轉(zhuǎn)向HTTPS協(xié)議進行傳輸。</p><p>  4.3 PJSIP設(shè)計</p><p>  免費網(wǎng)絡(luò)電話是本APP的核心功能,即通過免費網(wǎng)絡(luò)電話來充當原

74、始的系統(tǒng)鬧鈴來叫醒用戶。網(wǎng)絡(luò)電話的實現(xiàn)是依靠PJSIP協(xié)議,可以說PJSIP是本APP的靈魂,由此可以看出該部分功能的重要性。PJSIP最主要的功能就是用來撥打和接聽網(wǎng)絡(luò)電話。由于我們不確定接收到電話時用戶當前的操作,所以我們需要在主界面時刻監(jiān)聽PJSIP回調(diào)的消息,并始終監(jiān)聽一個對象,來完成對網(wǎng)絡(luò)電話的接收。這就需要讓PJSIP這個類變成單例。</p><p><b>  單例代碼如下:</b&

75、gt;</p><p>  + (PJSIP *)sharedInstance</p><p><b>  {</b></p><p>  static PJSIP *sharedInstance = nil;</p><p>  static dispatch_once_t onceToken;</p>

76、<p>  dispatch_once(&onceToken, ^{</p><p>  sharedInstance = [[PJSIP alloc] init];</p><p><b>  });</b></p><p>  return sharedInstance;</p><p><b

77、>  }</b></p><p>  PJSIP需要與服務器建立長鏈接,并給每個用戶分配不同的賬號。使用這個協(xié)議棧,當用戶第一次登錄時,會檢索后臺數(shù)據(jù)庫是否已經(jīng)創(chuàng)建了賬號,如果沒有創(chuàng)建賬號,則會自動注冊一個新的賬號,并保存到后臺數(shù)據(jù)庫。第二次及以后該用戶再進行登錄操作,PJSIP會自動登錄,無需再做處理。</p><p>  PJSIP登錄并注冊代碼如下:</p&g

78、t;<p>  - (int)registerToServer:(NSString *)domian username:(NSString *)username passwd:(NSString *)passwd{    pjsua_acc_id acc_id;    

79、pj_status_t status;    status = pjsua_create();    if (status != PJ_SUCCESS) {        error_exit("

80、;Error in pjsua_create()", status);        return -1;    }else{        pjsua_config cfg

81、;        pjsua_logging_config log_cfg;        pjsua_config_default(&cfg);        cfg.cb.

82、on_incoming_call = &on_incoming_call;        cfg.cb.on_call_media_state = &on_call_media</p><p>  PJSIP與服務器進行長鏈接時,當有新的消息到來,會使狀態(tài)改變,并回調(diào)一些函數(shù):

83、</p><p>  static void on_reg_state2(pjsua_acc_id acc_id, pjsua_reg_info *info);</p><p>  static void on_reg_state2(pjsua_acc_id acc_id, pjsua_reg_info *info)</p><p><b>  {<

84、/b></p><p>  [[PJSIP sharedInstance] handleRegistrationStateChangeWithRegInfo: info];</p><p><b>  }</b></p><p><b>  // 接來電</b></p><p>  -(vo

85、id)answer:(pjsua_call_id)callId</p><p><b>  {</b></p><p>  pjsua_call_answer(callId, 200, NULL, NULL);</p><p><b>  }</b></p><p><b>  //來電回

86、調(diào)函數(shù)</b></p><p>  static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,</p><p>  pjsip_rx_data *rdata)</p><p><b>  {</b></p><p>  pj

87、sua_call_info ci;</p><p>  PJ_UNUSED_ARG(acc_id);</p><p>  PJ_UNUSED_ARG(rdata);</p><p>  pjsua_call_get_info(call_id, &ci);</p><p>  PJ_LOG(3,(THIS_FILE, "Inc

88、oming call from %.*s!!",</p><p>  (int)ci.remote_info.slen,ci.remote_info.ptr));</p><p>  char *phoneId = ci.remote_info.ptr;</p><p>  NSDictionary * dic = </p><p>

89、;  @{@"call_id":@(call_id),@"phoneId":[NSString stringWithFormat:@"%s",phoneId]};</p><p><b>  }</b></p><p>  當消息改變時,狀態(tài)改變函數(shù)回調(diào):</p><p>  stat

90、ic void on_call_state(pjsua_call_id call_id, pjsip_event *e)</p><p><b>  {</b></p><p>  pjsua_call_info ci;</p><p>  PJ_UNUSED_ARG(e);</p><p>  pjsua_call_g

91、et_info(call_id, &ci);</p><p>  PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,</p><p>  (int)ci.state_text.slen,ci.state_text.ptr));</p><p>  if ([[PJSIP sharedIn

92、stance].delegate respondsToSelector:@selector(stateChange:)]) {</p><p>  [[PJSIP sharedInstance].delegate stateChange:ci.state];</p><p><b>  }</b></p><p><b>  }<

93、;/b></p><p>  撥打、接聽界面如圖:</p><p>  圖(4-1)接聽界面</p><p>  圖(4-2)接聽界面</p><p>  4.4 模塊功能設(shè)計</p><p>  4.4.1 登錄注冊模塊</p><p>  登陸注冊模塊主要用于服務器統(tǒng)計用戶以及讓用戶個

94、性化定制其個人信息,并且用戶登陸之后能夠更全面更完整的使用此APP,用戶體驗更佳。</p><p>  注冊界面使用高德地圖sdk進行定位(需要用戶開啟本app獲取位置的權(quán)限),確定用戶當前所處的地區(qū)位置,如果用戶不想使用定位的結(jié)果或者手機定位功能沒有打開而無法定位,也可以點擊進入地區(qū)列表選擇用戶喜歡的地區(qū)。而注冊詳細方法是通過APP下發(fā)驗證碼短信到用戶手機,通過驗證碼與手機號的匹配來判斷該用戶手機號碼是否為合法

95、、符合規(guī)范的手機號,通過驗證后將該手機號綁定為用戶賬號,并將手機號和用戶基本信息保存到服務器,完成注冊。注冊之后使用該手機號用戶注冊時設(shè)定的密碼進行登陸。另外蘋果官方要求每個APP的用戶在注冊之前都要了解最終用戶許可協(xié)議,同意最終用戶許可協(xié)議之后方能完成注冊。否則APP無法通過上線審核。</p><p>  1.注冊頁面高德地圖定位代碼:</p><p>  self.locationMa

96、nager = [[AMapLocationManager alloc] init];</p><p>  [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];</p><p>  [self.locationManager requestLocationWithReGeocode:YES c

97、ompletionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {</p><p><b>  }];</b></p><p>  2.使用手機號獲取驗證碼:</p><p>  [SMSSDK getVerificationCod

98、eByMethod:SMSGetCodeMethodSMS </p><p>  phoneNumber:_phoneNum</p><p>  zone:@"86" customIdentifier:nil </p><p>  result:^(NSError *error) {</p><p><b>  

99、}];</b></p><p>  4.4.2 鬧鈴模塊</p><p>  鬧鈴模塊可以讓用戶自定義鬧鈴,選擇鬧鈴的時間、叫醒者的性別、鬧鈴周期、添加備注信息等,而且可以對已定制的鬧鈴進行修改和刪除。鬧鈴模塊使用banner圖輪播的形式來展示本app的一些信息,后期也可以用來添加一些廣告信息。</p><p>  1.鬧鈴定制周期排序</p>

100、;<p>  代碼需求是在用戶選擇鬧鈴的周期之后,在界面上顯示的周期從周一開始排列,當中用空格隔開,當用戶選擇了周一到周五,則會顯示“工作日”,而選擇周六周日則會顯示“周末”。使用數(shù)組,將用戶選擇的周期全部加入到該數(shù)組內(nèi)并賦值成數(shù)字,遍歷數(shù)組,根據(jù)數(shù)字大小來排序,排序之后再根據(jù)數(shù)字對應改成日期,顯示到界面上。</p><p>  2 .使用runtime改變時間選擇器</p><

101、p>  runtime即運行時,就是系統(tǒng)在運行的時候的一些機制,其中消息機制是最主要的。對于C語言來說,調(diào)用哪個函數(shù)會在編譯的時候就會決定,編譯完成之后直接順序執(zhí)行,沒有二義性。OC語言的函數(shù)調(diào)用則是變成消息發(fā)送,這屬于動態(tài)調(diào)用的過程。當我們在編譯的時候其實并不能決定真正調(diào)用哪個函數(shù);</p><p>  而事實證明,在編譯階段,OC可以調(diào)用任何函數(shù),即使這個函數(shù)并未實現(xiàn),只要在代碼中申明過就不會報錯,而C

102、語言在編譯階段就會報錯。當程序在真正運行的時候,才會通過函數(shù)的名稱找到對應的函數(shù)來調(diào)用。runtime非常好用,當我們調(diào)用一個類時,它的ipa指針會指向這個類,當我們想要動態(tài)改變這個類的成員變量時,我們可以通過runtime重寫方法,從而達到動態(tài)改變的目的。</p><p>  使用runtime改變時間選擇器字體顏色的代碼:</p><p>  objc_property_t *pPro

103、perty = class_copyPropertyList([UIDatePicker class], &outCount);</p><p>  for (i = outCount-1; i>=0; i--) {</p><p>  NSString *getPropertyName = [NSString stringWithCString:property_getNa

104、me(pProperty[i]) encoding:NSUTF8StringEncoding];</p><p>  if ([getPropertyName isEqualToString:@"textColor"]) {</p><p>  [_datePicker setValue:[UIColor whiteColor] forKey:@"textCo

105、lor"];</p><p><b>  }</b></p><p><b>  }</b></p><p>  [self addSubview:_datePicker];</p><p>  [_datePicker addTarget:self </p><p&g

106、t;  action:@selector(dateChanged:) </p><p>  forControlEvents:UIControlEventValueChanged];</p><p>  [self getCurrentTime];</p><p><b>  鬧鈴界面如圖:</b></p><p>  

107、圖(4-3)鬧鈴界面</p><p>  4.4.3 隨機呼叫模塊</p><p>  隨機呼叫模塊可以讓用戶對定制了當前時間段鬧鈴的用戶進行隨機叫醒。調(diào)用pjsip的主動呼叫接口,同時調(diào)用撥打電話的接口。監(jiān)聽狀態(tài)改變,做出相應的處理操作。</p><p><b>  隨機呼叫頁面如圖:</b></p><p>  圖(

108、4-4)隨機呼叫頁面</p><p>  4.4.4 動態(tài)模塊</p><p>  動態(tài)模塊可以讓用戶在此發(fā)表自己的圖文動態(tài)、新鮮事等,并且可以瀏覽其他用戶發(fā)表的動態(tài),并對其進行評論或點贊,與其他用戶交流互動。展示用戶的動態(tài)信息,需要實現(xiàn)圖文混排,圖片從1張到6張不等。</p><p>  1 根據(jù)動態(tài)的字數(shù)自定義label的大小</p><p&

109、gt;  在實現(xiàn)過程中,我們需要為tableViewCell的高度實現(xiàn)自定義,根據(jù)需要展示的不同內(nèi)容,所以在創(chuàng)建的模型對象內(nèi),根據(jù)文字內(nèi)容的字體大小、排列方式,計算出文本框的大小,從而得到不同的tableViewCell高度。</p><p>  -(CGSize)currentSize{</p><p>  UIFont * font = [UIFont systemFontOfSize

110、:14*__kScreeWidth/375];</p><p>  NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil];</p><p>  CGSize size = [_text boundingRectWithSize:</p>&

111、lt;p>  CGSizeMake((750-120-50)/2*__kScreeWidth/375, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine attributes:dict context:nil].size;<

112、;/p><p>  NSLog(@"size.height:%f",size.height);</p><p>  return size;</p><p><b>  }</b></p><p><b>  2選擇圖片并壓縮</b></p><p>  發(fā)表

113、動態(tài)需要從用戶系統(tǒng)照片圖庫中選擇圖片,下面實現(xiàn)了如何從系統(tǒng)庫中選擇圖片。另外,由于有些圖片可能過大,用戶在上傳的時候會比較慢,造成界面假死的情況,而且耗費流量,所以需要在不影響圖片查看效果的情況下,將圖片的質(zhì)量和大小進行壓縮,然后再上傳到服務器。</p><p><b>  選擇圖片代碼:</b></p><p>  #pragma mark - image pick

114、er delegte</p><p>  - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info</p><p><b>  {</b></p><p>  [picker

115、 dismissViewControllerAnimated:YES completion:^{}];</p><p>  UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];</p><p>  * UIImagePickerControllerMediaType; // an NSStrin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論