版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 安徽工業(yè)大學</b></p><p> 畢業(yè)設計(論文)說明書</p><p><b> 安徽工業(yè)大學</b></p><p> 畢業(yè)設計(論文)任務書</p><p> 畢業(yè)設計(論文)的主要內容及要求:</p><p> 對社交AP
2、P進行需求的分析</p><p> 熟練掌握一門編程語言</p><p> 設計主要實現以下功能</p><p> 1.用戶定制鬧鈴,其他用戶通過網絡電話的方式叫醒該用戶;</p><p> 2.用戶可以發(fā)送圖文動態(tài)到社區(qū),其他用戶可以查看其動態(tài),并點贊、評論;</p><p> 3.界面美觀大方,簡單易操作
3、。</p><p> 四、完成與設計有關的外文文獻翻譯,譯文約3000字。</p><p> 五、完成畢業(yè)設計說明書(畢業(yè)論文)一份。</p><p> 指導教師簽字: </p><p><b> 摘要</b></p><p> 在當代移動互聯的大環(huán)境下,
4、手機已經成為人們生活中不可或缺的一部分。在人與人之間的交流過程中,社交app憑借著方便快捷,不受地域、空間、時間限制等優(yōu)點更是在當前的社會下大行其道。無疑在這樣的環(huán)境下,社交APP有著無比廣闊的前景。</p><p> 本文研究的是一款基于iOS平臺的應用軟件,采用Objective-C為設計語言,通過iPhone為硬件,實現網絡電話,溝通互動交流,用戶留言等功能。該應用基于iOS 9進行適配,主要利用coco
5、a框架,在iPhone上實現了結合動畫等基本功能的社交應用。網絡電話主要通過Voice over IP服務來實現,而Voice over IP服務是通過一個開放源代碼的協議棧PJSIP來完成的。APP中使用了大量的自定義控件來滿足產品功能以及視覺效果上的需求,同時使用UITableView控件充分展示了后臺提供的數據,實現了用戶的登錄與注冊,定制鬧鈴,發(fā)表動態(tài)以及用戶之間通話等功能。</p><p> 本軟件作
6、為一個社交、工具類軟件,缺少了一個十分重要的功能:即時通訊。下一步的計劃是添加即時通訊功能,方便用戶之間的交流,同時也是增加用戶量的一種方式。另外,再添加視頻、音頻的錄制和播放,以多媒體的方式來吸引用戶,增加用戶粘性。</p><p> 關鍵詞: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國內外研究現狀2</p><p>
14、 1.4 本系統主要內容以及結構2</p><p> 2. 開發(fā)環(huán)境及關鍵技術4</p><p> 2.1 Mac OS X 開發(fā)平臺4</p><p> 2.2 Objective-C4</p><p> 2.3 iOS系統的優(yōu)勢5</p><p> 2.3.1 iOS系統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. 需求分析與概要設計7</p><p> 3.1 需求分析7</p><
16、p> 3.1.1 技術可行性分析7</p><p> 3.1.2 經濟可行性分析7</p><p> 3.2 概要設計7</p><p> 4. 社交app詳細設計10</p><p> 4.1 工具類設計10</p><p> 4.2 網絡請求11</p><p>
17、; 4.3 PJSIP設計12</p><p> 4.4 模塊功能設計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 個人中心模塊設計22</p><p><b> 5.總結24</b></p><p> 5.1 論文總結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ā)產業(yè)最主流的開發(fā)平臺就是iOS(iPhoneOS)和Android。Android是基于Linux的開放源代碼的操作系統,
20、其最大的優(yōu)點就是開放、自由。因此,Android在移動開發(fā)領域始終保持占有一半以上的市場份額。而iOS的優(yōu)點也相當明顯:流暢的操作體驗,優(yōu)美的UI界面,應用程序通過AppStore嚴格把控,只有通過官方檢測的APP才能被用戶安裝到手機上,這也保證了iOS最重要的優(yōu)點,安全性高。這是其他移動端操作系統無法媲美的。</p><p> 現如今,人們的生活節(jié)奏越來越快,手機已經成為了人們首選的娛樂和交流的方式。在這樣的
21、背景下,社交APP無疑有著非常巨大的發(fā)展前景。在緊張的生活工作節(jié)奏中,人們很難有大量集中的時間和朋友或家人一起交流互動,增進感情。如果能夠把零散的時間利用起來通過手機APP與好友互動,另外還有機會認識來自全國各地、民俗風格迥異的新朋友,這會給人們的業(yè)余生活帶來許多的樂趣。</p><p> 此次設計的APP具有社交APP的基礎功能,例如:用戶收發(fā)消息,發(fā)送/查閱動態(tài),點贊、評論等等。并在此基礎上進行了擴展,用戶
22、可以定制鬧鈴,撥打免費網絡電話,這是此次設計的APP的一大亮點。</p><p> 1.2 研究的目的和意義</p><p> 1967年,哈佛大學的心理學教授Stanley Milgram(1934~1984)創(chuàng)立了六度分割理論,通俗地解釋就是:你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過六個人你就能夠認識任何一個陌生人。按照六度分隔理論,每個個體的社交圈都不斷放
23、大,最后成為一個大型網絡。這是社會性網絡的早期理解。</p><p> 根據中咨網研究部預計,到2017年,全球網民人數將達到8.5億人。手機APP 作為移動互聯網快速發(fā)展的助推器和其搶占市場份額的重要突破口,被廣泛關注并運用于實際生活。而在2015年末的統計當中,社交類APP對人類生活方式的進步和影響更是功不可沒。在國內外風靡的APP中,如微信、微博、QQ、Facebook等,都有著自己鮮明的特點,但是在大方
24、向都是以人類社交圈為根本基礎。本APP從人性化的設計角度出發(fā),旨在探索出一種新型的社交APP的方向。</p><p> 1.3國內外研究現狀</p><p> 移動社交網絡是在社交網絡的基礎上演化、發(fā)展而來的。社交網絡(Social Network),是隨著E-mail、BBS、博客等互聯網應用而自然發(fā)展起來的反應社會群體的一種形態(tài),它的本質是提供了一個在人群(朋友圈)中分享興趣、愛好
25、、狀態(tài)和活動等信息的在線平臺。隨著移動互聯網的不斷發(fā)展,社交網絡對人類社會活動的方式方法、效率效果等都產生了深遠的影響。</p><p> 在國內市場,微信,QQ和微博已經做大做強并且成為社交APP行業(yè)的巨頭,其他出彩的社交APP并不多,其中陌陌已經上市,但是一開始卻是打著某些不好的招牌,招攬的用戶群,不過現如今它也已經開始轉型。所以,經過這些年社交APP市場的發(fā)展和過濾,想要做出亮眼的、出眾的社交APP,就盡
26、量不要走傳統路線,避開微信、QQ這樣的巨頭,才有機會成長和發(fā)展起來。</p><p> 國外有款類似的鬧鈴社交軟件叫做Wakie,在Wakie創(chuàng)始人Hrachik Adjamian看來,人們已經厭煩每天早上千篇一律的系統鬧鈴聲,而如果換做每天早上叫醒你的是一個陌生人,人們則會有充足的好奇心以及新鮮感。而且,在你成為Wakie付費用戶之后,你還能看到那個喚醒你的他(她)的基本資料,并可添加其為好友,與其互動交流。
27、2015年年中發(fā)布,Wakie已經擁有150萬注冊用戶,用戶群覆蓋了80個國家。由此說明了在未來,這項新奇的服務,能夠有很好的發(fā)展前景。</p><p> 此次設計的鬧鈴社交APP除了通話喚醒功能,還提供了基本的“社區(qū)”社交板塊,類似論壇形式。應用內每個用戶都能夠在“社區(qū)”內發(fā)表動態(tài),并且所有動態(tài)都會以信息流的方式呈現出來,用戶也可以對動態(tài)進行點贊和評論。這種方式是最簡單最直接,也是當前社交APP主流的好友之間
28、進行信息交流的一種形式之一。</p><p> 1.4 本系統主要內容以及結構</p><p> 本課題主要研究了一款基于Objective-C語言的iPhone社交APP的設計與實現,這款應用整體劃分了五個模塊,主要包括登錄注冊模塊、鬧鈴模塊、免費網絡電話模塊、動態(tài)模塊、個人中心模塊,其中網絡電話模塊是這款應用的技術難點也是亮點,動態(tài)模塊是核心。</p><p&g
29、t; 這五個模塊的主要功能:</p><p> 1. 登錄注冊模塊:注冊功能通過APP下發(fā)手機驗證碼,以當前用戶手機號為賬號進行注冊。通過高德地圖SDK進行定位用戶當前所在地區(qū)。并收集用戶基本信息,注冊發(fā)送到服務器。登錄功能即輸入已注冊的帳號和密碼進行登錄。</p><p> 2. 鬧鈴模塊:banner圖的定時輪播,展示本APP的特色、近期活動或者新聞、廣告等。鬧鈴列表的展示,顯示
30、了用戶制定的鬧鈴,開關按鈕控制鬧鈴的開關。用戶可點擊列表項對當前已定制的鬧鈴進行修改,也可左滑刪除鬧鈴列表項。</p><p> 3. 免費網絡電話模塊:顯示當前待叫醒用戶人數。點擊隨機呼叫按鈕,服務器自動分配一個在線用戶進行呼叫,實現免費網絡電話。</p><p> 4. 動態(tài)模塊:該模塊展示所有用戶發(fā)表的動態(tài)內容以及動態(tài)回復內容,用戶可進行評論和點贊、舉報。</p>
31、<p> 5. 個人中心模塊:包含個人資料編輯、個人主頁、已關注好友列表、消息列表、設置、用戶本人的動態(tài)列表、通話記錄列表、社會化分享等。</p><p> 本文分為五章,分別為:第一章為緒論部分,主要概述了本APP的研發(fā)背景、研究目的和意義、國內外研究現狀以及APP的功能概述。第二章介紹了開發(fā)系統所用到的Objective-C語言、開發(fā)環(huán)境和關鍵技術,這是開發(fā)本APP的基礎。第三章主要對此次設計的
32、APP進行需求分析,確定系統流程,劃分程序模塊,設計數據結構等,為實現應用確定方向。第四章為應用內主要功能的具體實現,介紹APP是如何實現相應的功能,以及對APP進行一些測試,指出開發(fā)過程中遇到的問題。第五章對此次畢業(yè)設計進行總結,和對于這款應用未來的構思,指出不足之處并標明繼續(xù)研究的方向。</p><p> 2. 開發(fā)環(huán)境及關鍵技術</p><p> 2.1 Mac OS X 開發(fā)平
33、臺</p><p> Mac OS X是蘋果公司為Mac系列產品開發(fā)的專屬的操作系統,是蘋果麥金塔(Macintosh)電腦操作系統軟件的總稱。基于堅如磐石的UNIX,系統運行穩(wěn)定,操作簡單便捷,設計美觀。配合處處創(chuàng)新的蘋果硬件,使得蘋果設備安全易用,高度兼容,堪稱完美。</p><p> Mac OS X基于FreeBSD系統,是采用“面向對象操作系統”的全面的操作系統?!懊嫦驅ο蟛?/p>
34、作系統”是史蒂夫·喬布斯(Steve Jobs)所開發(fā)的。喬布斯相信大家都知道,他是最偉大的蘋果公司聯合創(chuàng)始人之一。今天蘋果手機能夠風靡全球,喬布斯功不可沒。其擁有許多的技術方面的顯著特點:</p><p> 1.全64位技術,可以通過第三方的Mode Selector進行64位和32為切換。</p><p> 2.OpenCL,是一種讓圖形處理器發(fā)揮極致來加速應用程序性能的
35、新技術。</p><p> 3.對于iOS開發(fā)特別重要的是:Grand Central Dispatch .幫助程序編譯人員使用多核心編譯,增強軟件多核心支持。Grand Central Dispatch(GCD)是異步執(zhí)行任務的技術之一。開發(fā)者只需要定義想執(zhí)行的任務并追加到適當的Dispatch Queue中,GCD就能生成必要的線程并計劃執(zhí)行任務。我們使用GCD可以使用非常簡單的記述方法,實現了極為復雜繁瑣
36、的多線程編程。</p><p> Mac OS X作為蘋果的操作系統,界面精美,功能齊全,使用方便,操作人性化。由于Mac OS X只能配合蘋果的硬件才能使用,而且蘋果的設備一般來說價格都較高,所以Mac OS X系統的普及性暫時不是很高。但是隨著人們生活水平的提高,人們越來越追求高品質的生活方式,越來越多的人們選擇了Mac OS X,所以我相信,Mac OS X會越來越好。</p><p&
37、gt; 2.2 Objective-C</p><p> Objective-C是一門簡單的計算機語言,是在C語言的基礎上發(fā)展而來的面向對象編程語言。作為面向對象編程語言,它擁有著面向對象編程語言的三要素——封裝,繼承,多態(tài)。Objective-C主要用來開發(fā)iOS操作系統和應用程序,Mac OS X操作系統和應用程序。它的流行主要歸功于iPhone手機的成功。而iPhone手機之所以流行,同時也是因為使用了
38、Objective-C開發(fā)出來的iOS操作系統。所以說iPhone和Objective-C是相輔相成,密不可分的。</p><p> Objective-C語言誕生于 20 世紀 80 年代,由布萊德·考克斯(Brad Cox) 發(fā)明,意在將強大的、流行的、可移植的C語言與優(yōu)雅的 Smalltalk 語言結合在一起。Objective-C 語言是C語言的一個擴展集,它以C語言為基礎,在語言中添加了一些
39、微妙但意義重大的特性。</p><p> Objective-C初期的版本不支持垃圾回收機制,使用MRC,需要開發(fā)者自己手動控制內存管理,開發(fā)起來相當麻煩。不過令開發(fā)人員欣慰的是后來蘋果公司發(fā)布的Xcode支持了自動釋放ARC (Automatic Reference Counting),不等同于嚴格意義上的垃圾回收機制,但是會在編譯期間,編譯器自動添加[NSObject release],不需要開發(fā)者手動re
40、lease對象。這大大提升了開發(fā)人員的開發(fā)速度,使得基于OC的開發(fā)更加方便。</p><p> 蘋果公司一直在通過各種方式嘗試降低Objective-C語言的復雜度,淘汰手動管理內存和C標準頭文件,引進ARC機制,還有通過點語法訪問屬性的getter/setter方法。所以我堅信,Objective-C語言一定會有很好的未來。</p><p> 2.3 iOS系統的優(yōu)勢</p&g
41、t;<p> 2.3.1 iOS系統</p><p> iOS是蘋果公司開發(fā)的移動設備的專屬操作系統。自2007年1月9日的Macworld大會上蘋果公司公布這個系統,到現在將近十年的時間,iOS系統不斷更新,不斷完善。Siri、FaceTime、Safari、Airdrop等內置應用以及功能,提供了更加智能化和人性化的功能,而指紋解鎖、3Dtouch等功能更是錦上添花,使得iOS系統獨具創(chuàng)新,
42、別具一格。</p><p> 2.3.2 軟件與硬件整合度高</p><p> iOS系統的軟件與硬件的整合度相當高,這使得其分化大大降低,在這方面要遠勝于碎片化嚴重的Android。這樣也增加了整個系統的穩(wěn)定性,經常使用iPhone的朋友也能發(fā)現,手機很少出現死機、無響應的情況,大大提升了用戶體驗。</p><p> 2.3.3 安全性強</p>
43、<p> 安全性實際上是一個操作系統最重要的部分之一。對于用戶來說,不管是信息、照片、通話記錄或者地址等,移動設備中的任何信息都必須保證其安全,所以,保障手機中的信息安全具有十分重要的意義。蘋果官方AppStore建立了完整的開發(fā)者認證和應用審核機制,這充分保證了某些惡意程序基本上沒有被用戶安裝到手機上的機會。為了保護用戶的隱私,iOS用戶的許多操作例如獲取用戶位置、打開系統照片圖庫等都需要獲得用戶的許可。另外用戶可以通
44、過“查找我的iPhone”功能定位到丟失的手機,并使其發(fā)出響聲,或擦除所有數據信息。如果用戶的設備失而復得,他還可以回復上一次的備份。種種安全功能,使得iOS的系統安全性在所有移動設備中高居榜首。</p><p> 2.4 X-code</p><p> iOS的開發(fā)環(huán)境是我所見過的集成度最高的,只需要下載安裝Xcode軟件。Xcode是一種不開源的集成開發(fā)環(huán)境,運行于Mac OS X
45、操作系統下,提供給開發(fā)者用于開發(fā)Mac OS X,iOS應用程序。Xcode操作方便,編譯速度極快,使得開發(fā)者的每次操作都很輕松。所謂“工欲善其事,必先利其器”,想要更好的開發(fā)iOS程序,就要先學會使用Xcode。Xcode會把所需求的基本開發(fā)環(huán)境都已經搭建好。其中包括了編譯環(huán)境、SDK文檔、模器、單元測試工具、性能測試工具、代碼靜態(tài)分析工具、版本管理工具接口、蘋果自家服務接口等等。Xcode會隨著iOS系統版本升級而發(fā)布新版本并向下兼
46、容,本項目使用的是Xcode7.2。</p><p><b> 2.5 PJSIP</b></p><p> PJSIP是一個開源的SIP協議棧,支持多種SIP的擴展功能。它實現了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作為基于SIP的一個多媒體通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有良好的移植性,幾乎支持當前所有
47、系統:桌面系統、嵌入式系統、智能手機系統。</p><p> PJSIP同時還支持語音通話、視頻通話和即時通訊功能。此外,它具有十分完善的開發(fā)文檔和資料,對開發(fā)者來說是一個福音。</p><p> 3. 需求分析與概要設計</p><p><b> 3.1 需求分析</b></p><p> 移動應用講究創(chuàng)新,無
48、論是新穎的界面、創(chuàng)意的操作方式還是獨特的應用內容,都能夠吸引用戶的目光,產品人員經常會提出一些新的點子,開發(fā)人員需要配合產品的更改,所以移動應用項目的需求較傳統軟件需求更容易變化。</p><p> 3.1.1 技術可行性分析</p><p> 本鬧鈴社交APP在Mac平臺使用OC編程語言開發(fā),OC語言簡單易學,Xcode開發(fā)環(huán)境易安裝。當前基于OC的開發(fā)十分火熱,網上也有許多第三方的
49、開源代碼庫,如網絡請求庫AFNetworking,圖片自動加載及緩存庫SDWebImage,TableView下拉刷新上拉加載庫MJRefresh等等。OC語言主要實現客戶端的開發(fā),配合服務器端進行數據傳輸,該社交APP的開發(fā)變得更加簡單。</p><p> 3.1.2 經濟可行性分析</p><p> 在移動互聯網的大浪潮下,開發(fā)一款APP變得經濟實惠,只要有一臺Mac電腦,免費下載
50、安裝Xcode軟件,直接就可以進行開發(fā),而且許多第三方的服務對于這種小型APP完全免費,例如第三方社會化分享平臺ShareSDK、友盟,第三方IM平臺融云、環(huán)信,第三方推送平臺極光推送,個推推送等,都可以免費使用它們的SDK進行開發(fā)。集成第三方的SDK使得開發(fā)一款APP變得更加高效、經濟、方便。唯一需要花錢的地方就是蘋果的上線需要一個蘋果的開發(fā)者賬號。所以在費用上我們可以忽略不計。</p><p><b&g
51、t; 3.2 概要設計</b></p><p> 根據項目的需求,整個工程使用MVC設計模式,我們把用戶信息、鬧鈴信息等數據模型放在Model層,界面的實現放在View層,業(yè)務邏輯、從后臺請求數據以及數據處理放在Controller層,這樣使得整個應用模塊化,降低模塊與模塊之間的耦合度,利于后期代碼的維護以及迭代。這樣也更加符合APP的設計規(guī)范,MVC也是當前十分流行的軟件設計模式。</p&
52、gt;<p> 3.2.1 系統功能結構圖:如圖(3-1)所示</p><p> 圖(3-1)系統功能結構圖</p><p> 項目中的視圖控制器由標簽欄(TabbarController)控制所有的視圖控制器(ViewController)。我們可以通過標簽欄上的按鈕來選擇不同的頁面,并且完成相應的需求。在實現的過程中可以根據標簽欄的下標屬性(selectedInde
53、x)來進行切換視圖控制器。而pjsip需要在app打開時連接pjsip服務器并且在各個頁面接收到狀態(tài)改變(如來電或接收電話),所以放在標簽欄里面進行控制。因為需要完成這些需求,所以在用戶打開程序之后,我們需要把程序的根視圖控制器設為標簽欄。與此同時,在標簽欄設置它控制的視圖控制器的過程中,需要給各個頁面添加導航欄,以便視圖控制器需要切換頁面的時候進行壓棧操作。</p><p> 登錄注冊需求:注冊功能使用短信接
54、收驗證碼來進行控制。在注冊頁面記錄用戶的信息,反饋給服務器進行記錄。并在注冊頁面實現了定位功能。登錄功能輸入帳號密碼,發(fā)送給服務器,判斷是否登錄成功。</p><p> .鬧鈴定制需求:banner 圖實現圖片輪播。展示用戶定制的鬧鈴,并設定開關監(jiān)聽鬧鈴的狀態(tài)。鬧鈴定制頁面,時間的選擇,設定鬧鈴的周期,選擇叫醒自己的人的性別。</p><p> .隨機呼叫需求:顯示當前在線用戶在線人數
55、,設定隨機呼叫按鈕,自動匹配當前時間范圍內30min的鬧鈴。我們在界面上展示了用戶在當前時間段所能夠呼叫鬧鈴的數量,當用戶點擊按鈕進行呼叫的同時,服務器會隨機返回一個鬧鈴,然后客戶度端會與這個鬧鈴的制定者來建立連接。</p><p> 互動社區(qū)需求:顯示所有用戶的心情狀態(tài),點擊頭像可查看該用戶的個人主頁。實現圖文混排。動態(tài)的發(fā)布頁面,編輯文字和圖片。</p><p> 個人中心需求:細
56、分幾個小模塊:個人頭像,叫醒人數,個人資料編輯,好友,記錄,個人動態(tài),消息,設置以及分享。</p><p> 個人資料編輯:通過拍照或者圖庫修改頭像。并且可以修改年齡和性別;</p><p> 好友:顯示個人的好友,可對好友進行編輯來刪除</p><p> 記錄:顯示了個人的呼叫記錄和被叫醒記錄。 </p><p> 個人動態(tài):顯示個
57、人的動態(tài),可進行編輯和刪除。</p><p> 消息:可查看系統消息,以及其他用戶給用戶發(fā)來的消息,當有未查閱的消息時,會在個人中心的消息圖標上有小紅點進行提示??捎镁庉嫲粹o來進行刪除當前消息。</p><p> 密碼設置:可以更改符合規(guī)定格的式密碼。</p><p> 清理緩存:清理圖片的緩存。(保留動態(tài)的文字以免影響用戶體驗。)</p>&l
58、t;p> 意見反饋:收集用戶對app的意見。</p><p> 評分:跳轉到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詳細設計</p><p><b> 4.1 工具類設計</b></p><p> 在設計過程當中,我們需要存儲一定的信息來完成一些需求。當我們第一次打開程序,用戶需要登錄注冊。而在此之后,除非用戶執(zhí)
60、行退出登錄事件,我們應該在用戶打開程序之后,程序默認是上一次登錄的賬號登錄的,不必重新登錄,以此來改善了用戶體驗。此時我們就需要把上一次登錄的信息保存在沙盒內。打開程序時,從沙盒中獲取賬號的信息。同時保留移除沙盒信息的方法,在我們退出登錄時,需要清空這些數據,否則無法用新賬號登錄,從而導致程序崩潰。</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 網絡請求</b>
71、</p><p> 本APP作為一個社交APP,幾乎每個功能都要用到網絡請求,我使用第三方庫AFNetworking 來進行網絡請求。在這個程序中,基本所有頁面都需要與服務器進行數據傳輸,所以網絡請求是這個程序不可或缺的、至關重要的功能。這里使用POST需要將用戶的操作以及請求內容發(fā)送給服務器,然后,服務器根據用戶的請求,把數據以相應的格式返回給用戶APP,然后通過代碼將復雜的數據以簡單直觀的形式展現給用戶。比
72、如動態(tài)頁面的發(fā)動態(tài)、點贊、評論、查看原圖等功能,都充分地詮釋了網絡請求對于一個社交軟件的重要性。</p><p> 在iOS 9中,新增了ATS(App Transport Security)特性,也就是網絡請求從原來的HTTP改成了更加安全的HTTPS。HTTP是連接簡單的明文傳輸,而HTTPS是可進行加密傳輸、身份認證的網絡協議,比HTTP協議更加安全,對數據傳輸起到保障性的作用,簡單的說就是HTTP的安全
73、版。所以在我們進行網絡請求之前需要在info.plist文件中添加NSAppTransportSecurity字段,然后在該字段下添加NSAllowsAritraryLoads字段,并將其設置為YES。這樣就讓原來請求用到的HTTP,全都轉向HTTPS協議進行傳輸。</p><p> 4.3 PJSIP設計</p><p> 免費網絡電話是本APP的核心功能,即通過免費網絡電話來充當原
74、始的系統鬧鈴來叫醒用戶。網絡電話的實現是依靠PJSIP協議,可以說PJSIP是本APP的靈魂,由此可以看出該部分功能的重要性。PJSIP最主要的功能就是用來撥打和接聽網絡電話。由于我們不確定接收到電話時用戶當前的操作,所以我們需要在主界面時刻監(jiān)聽PJSIP回調的消息,并始終監(jiān)聽一個對象,來完成對網絡電話的接收。這就需要讓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需要與服務器建立長鏈接,并給每個用戶分配不同的賬號。使用這個協議棧,當用戶第一次登錄時,會檢索后臺數據庫是否已經創(chuàng)建了賬號,如果沒有創(chuàng)建賬號,則會自動注冊一個新的賬號,并保存到后臺數據庫。第二次及以后該用戶再進行登錄操作,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)改變,并回調一些函數:
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、調函數</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)改變函數回調:</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 模塊功能設計</p><p> 4.4.1 登錄注冊模塊</p><p> 登陸注冊模塊主要用于服務器統計用戶以及讓用戶個
94、性化定制其個人信息,并且用戶登陸之后能夠更全面更完整的使用此APP,用戶體驗更佳。</p><p> 注冊界面使用高德地圖sdk進行定位(需要用戶開啟本app獲取位置的權限),確定用戶當前所處的地區(qū)位置,如果用戶不想使用定位的結果或者手機定位功能沒有打開而無法定位,也可以點擊進入地區(qū)列表選擇用戶喜歡的地區(qū)。而注冊詳細方法是通過APP下發(fā)驗證碼短信到用戶手機,通過驗證碼與手機號的匹配來判斷該用戶手機號碼是否為合法
95、、符合規(guī)范的手機號,通過驗證后將該手機號綁定為用戶賬號,并將手機號和用戶基本信息保存到服務器,完成注冊。注冊之后使用該手機號用戶注冊時設定的密碼進行登陸。另外蘋果官方要求每個APP的用戶在注冊之前都要了解最終用戶許可協議,同意最終用戶許可協議之后方能完成注冊。否則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> 代碼需求是在用戶選擇鬧鈴的周期之后,在界面上顯示的周期從周一開始排列,當中用空格隔開,當用戶選擇了周一到周五,則會顯示“工作日”,而選擇周六周日則會顯示“周末”。使用數組,將用戶選擇的周期全部加入到該數組內并賦值成數字,遍歷數組,根據數字大小來排序,排序之后再根據數字對應改成日期,顯示到界面上。</p><p> 2 .使用runtime改變時間選擇器</p><
101、p> runtime即運行時,就是系統在運行的時候的一些機制,其中消息機制是最主要的。對于C語言來說,調用哪個函數會在編譯的時候就會決定,編譯完成之后直接順序執(zhí)行,沒有二義性。OC語言的函數調用則是變成消息發(fā)送,這屬于動態(tài)調用的過程。當我們在編譯的時候其實并不能決定真正調用哪個函數;</p><p> 而事實證明,在編譯階段,OC可以調用任何函數,即使這個函數并未實現,只要在代碼中申明過就不會報錯,而C
102、語言在編譯階段就會報錯。當程序在真正運行的時候,才會通過函數的名稱找到對應的函數來調用。runtime非常好用,當我們調用一個類時,它的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> 隨機呼叫模塊可以讓用戶對定制了當前時間段鬧鈴的用戶進行隨機叫醒。調用pjsip的主動呼叫接口,同時調用撥打電話的接口。監(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)信息,需要實現圖文混排,圖片從1張到6張不等。</p><p> 1 根據動態(tài)的字數自定義label的大小</p><p&
109、gt; 在實現過程中,我們需要為tableViewCell的高度實現自定義,根據需要展示的不同內容,所以在創(chuàng)建的模型對象內,根據文字內容的字體大小、排列方式,計算出文本框的大小,從而得到不同的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)需要從用戶系統照片圖庫中選擇圖片,下面實現了如何從系統庫中選擇圖片。另外,由于有些圖片可能過大,用戶在上傳的時候會比較慢,造成界面假死的情況,而且耗費流量,所以需要在不影響圖片查看效果的情況下,將圖片的質量和大小進行壓縮,然后再上傳到服務器。</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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于安卓的旅游軟件的開發(fā)畢設論文.doc
- 網絡爬蟲的設計與實現畢設論文
- 基于IOS的舞蹈愛好者社交軟件的設計與實現.pdf
- 網絡工程課設報告
- 基于android的紅色旅游資訊app的設計與實現-軟件工程畢設論文
- 基于android的紅色旅游資訊app的設計與實現-軟件工程畢設論文
- 網絡工程課設報告
- 基于android手機的音視頻監(jiān)控軟件的設計與實現畢設論文
- 小型酒店管理系統的設計與開發(fā)(doc畢設論文)
- 基于ios的寵物世界手機軟件設計開發(fā)論文.doc
- 軟件工程畢業(yè)論文-基于ios平臺開發(fā)的移動應用的設計與實現—辣媽幫
- 網絡工程畢業(yè)論文----網絡工程項目的設計
- 畢設論文 基于gsm的手機設計
- 畢設論文 基于gsm的手機設計
- 軟件工程畢業(yè)論文-基于ios系統的娛樂資訊網的開發(fā)與實現
- 基于iOS的移動社交系統的設計與實現.pdf
- 基于ios的校園音樂社交應用的設計與實現
- 網絡工程設計論文參考
- 基于gis的校園社交網絡的研究與開發(fā)——畢業(yè)論文
- 基于iOS的人臉識別軟件的研究與開發(fā).pdf
評論
0/150
提交評論