Social Twist – aplicație bazată pe integrarea [631702]
Universitatea Tehnică a Moldovei
Social Twist – aplicație bazată pe integrarea
realității virtuale în viața socială utilizând platforma
iOS
Social Twist – application based on virtual reality
integration into social life developed for iOS
platform
Student: [anonimizat]: lect.sup. Andrievschi -Bagrin Veronica
Chișinău 2017
Ministerul Educației al Republicii Moldova
Universitatea Tehnică a Moldovei
Facultatea Calculatoare Informatică și Microelectronică
Departamentul Ingineria Software și Automatică
Admis la susținere
Șef departament: dr.conf.univ. Ciorb ă D.
________________________________ _
„__”_____________ 2017
Social Twist – aplicație bazată pe integrarea
realității virtuale în viața socială utilizând platforma
iOS
Proiect de licență
Student: _______________ (V. Plasiciuc )
Conducător: _________ _(V.Andrievschi -Bagrin )
Consultanți: ____________ (Sv.Cojocaru )
_____________ ( A. Dodu )
Chișinău 2017
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică și Microelectronică
Departamentul Ingineria Software și Automatică
Specialitatea Tehnologii Informaționale
Aprob
dr.conf.univ. Dumitru Ciorbă
șef de departament
____________________
„__”_____________ 2016
CAIET DE SARCINI
pentru proiectul de licență al student: [anonimizat]
1. Tema proiectului de licență Social Twist – aplicație bazată pe integrarea realității virtuale în
viața socială utilizând platforma iOS __________________________________
confirmată prin hotărârea Consiliului facultății de la „ 24” octombrie 2016
2. Termenul limită de prezentare a proiectului 31.05.2017
3. Date inițiale pentru elaborarea proiectului Sarcina pentru elaborarea proiectului de
diplomă .
4. Conținutul memoriului explicativ
Introducere
1. Analiza domeniului de studiu
2. Modelarea și proiectarea sistemului informatic
3. Realizarea sistemului
4. Documentarea produsului realizat
5. Argumentarea economic ă
6. Concluzii
5. Conținutul părții grafice a proiectului
Funcționalitățile oferite de sistem utilizatorului , structura modului realitate virtuală , funcționalitățile
modulului mesagerie ale aplicației , afișarea evenimentelor pe cameră , stările modulului realitatea
augmentată ,procesul de înregistrare a utilizatorului , componentele și librăriile utilizate în crearea
funcționalităților sistemului .
6. Lista consultanților:
Consultant Capitol Confirmarea realizării activității
Semnătura
consultantului (data) Semnătura
student: [anonimizat], Controlul
calității
7. Data înmânării caietului de sarcini 01.09.2016
Conducător _________________________
semnătura
Sarcina a fost luată pentru a fi executată
de către student: [anonimizat] 01.09.2016
semnătura, data
PLAN CALENDARISTIC
Nr.
crt. Denumirea etapelor de proiectare Termenul de realizare a
etapelor Nota
1 Elaborarea sarcinii, primirea datelor pentru
sarcină 01.09.16 – 30.09.16 10%
2 Studierea literaturii de domeniu 01.10.16 – 30.11.16 20%
3 Alegerea și pregătirea de lucru a softului 01.12.16 – 25.12.16 20%
4 Realizarea programului 16.01.17 – 30.04.17 25%
5 Descrierea programului, diagramele UML 01.05.17 – 15.05.17 10%
6 Testarea aplicației 16.05.17 – 28.05.17 10%
7 Finisarea proiectului 29.05.17 – 31.05.17 5%
Student Plasiciuc Vadim ( )
Conducător de proiect Andrievschi -Bagrin Veronica ( )
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică și Microelectronică
Departamentul Ingineria Software și Automatică
Specialitatea Tehnologii Informaționale
AVIZ
la proiectul de licență
Tema: Social Twist aplicație bazată pe integrarea realității virtuale în viața socială utilizând platforma
iOS
Studentul(a) Plasiciuc Vadim gr. TI -133
1. Actualitatea temei: O dată cu avansarea în tehnologie a crescut și necesitatea de comunicare. În zilele
noastre este mult mai ușor și ieftin să comunici, conectezi cu oameni din întreaga lume, astfel internetul a
adus cu el o nouă formă de comunicare fiind numită, rețea de socializare.
2. Caracteristica tezei de licență : Scopul aplicației este de a furniza utilizatorul ului o comunicare
virtuală orientată pe integrarea acestora în viața reală .
3. Analiza aplicației: Sarcina de bază a aplica ției este de a favoriza accesul la diferite evenimente ce
decurg în jurul utilizatorilor.
4. Estimarea rezultatelor obținute: Aplica ția SocialTwist este în curs de dezvoltare , la momentul dat
este accesibilă doar persoanelor din cadrul companiei .
5. Corectitudinea materialului expus: Noțiunile si cuvintele cheie ale materialului expus sunt prezentate
prin referințe .
6. Calitatea materialului grafic: Proiectul include: diagrame, tabele, imagini, interfa ța aplica ției.
7. Valoarea practică a tezei: Aplica ția accesibilă persoanelor ce dispun de dispozitiv iPhone cu sistema
de operare de la iOS9.1 și internet mobil.
8. Observații și recomandări: Cerin țele fa ță de teza de licen ță au fost îndeplinite în totalmente.
Observa ții nu sunt.
9. Caracteristica studentului și titlul conferit : Studentul Plasiciuc Vadim a dat dovadă de
profesionalism în elaborarea lucrării, a respectat cerințele impuse și a manifestat exigență în elaborarea și
calitatea t ezei de licență.
Din cele relatate, urmează că lucrarea de licență poate fi admisă spre susținere, cu nota _______
Conducătorul tezei de licență lector supe rior Andrieschi -Bagrin Veronica
Rezumat
Acest memoriu explicativ are ca scop descrierea funcționalităților aplicației SocialTwist realizată pe
platforma iOS [1], utilizând IDE Xcode [2] și limbajul Objective -c. Este descrisă în 68 foi și include 5
capitole. Primul capitol poartă denumirea de “ Analiza domeniului de studiu ” în care a fost descris
importanța temei și a domeniului ales, aplicația a fost analizată din mai multe aspecte, și comparată cu alte
sisteme ce dețin funcționalit ăți asemănătoare. Capitolul 2 poartă denumirea de “Modelarea și proiectarea
sistemului informatic” în care au fost reprezentate diagrame ce descriu la nivel grafic funcționalitățile
aplicației. Capitolul 3, “Realizarea sistemului” include cod sursă și imag ini ce descriu pașii de realizarea a
sarcinilor prestabilite pentru elaborarea aplicației, cât și testarea sistemului la erori. “Argumentarea
economic ă” presupune evaluarea economică a produsului, stabilirea punctelor forte și slabe, riscurilor,
identificarea potențialilor beneficiari.
Cuvinte cheie:
– servicii;
– eveniment;
– realitate augmentat ă;
– mesagerie.
Abstract
This explanatory memo is intended to describe the functionality of the SocialTwist application based
on iOS platform using IDE Xcode and the Objective -c language. It is described in 68 sheets and includes 5
chapters. The first chapter is called " Domain Analysis " which include the importan ce of the chosen theme ,
the application was analyzed from several aspects and compar ed with other systems that have similar
functions. Chapter 2 is called " System design ", in which we describe the application's functionalities
graphically using diagrams . Chapter 3, " System implementation ", includes the source code and images that
describe the steps to accomplish a pre -set task s for application development, as well as system testing for
errors. "Economic argumentation" involves the economic evaluation of the product, the establishment of
strengths and weaknesses, the risks, the iden tification of potential beneficiaries.
Keywords :
– services;
– events;
– augmented reality;
– messages.
Cuprins
Introducere ……………………………………………………………………………………….. ……………………………………… 9
1 Analiza domeniului de studiu …………………………………………………………………………………………………. 10
1.1 Compararea cu alte sisteme similare …………………………………………………………………………………….. 10
1.2 Cerințe față de sistem …………………………………………………………………………………………………… …….14
2. Modelarea și proiectarea sistemului informatic ………………………………………………………………….. ……18
2.1 Descrierea comportamentală a sistemului ………………………………………………………………….. ………….18
2.1.1 Imaginea generală asupra sistemului ………………………………………………………………………… ……….. 19
2.1.2 Modelarea vizuală a fluxur ilor………………………………………………………………………………….. ………. 22
2.1.3 Stările și t ranzacțiile sistemului ………………………………………………………………………………….. …….. 25
2.1.4 Descrierea scenariilor de utilizare a sistemului …………………………………………………………………… .26
2.1.5 Fluxurile de mesaje și legăturile dintre componentele sistemului …………………………………………… 29
2.2 Descrierea structurală a sistemului ………………………………………………………………………………….. ……31
2.2.1 Descrierea structurii statice a sistemului ……………………………………………………………………… …….. 31
2.2.2 Relațiile de dependență între componentele sistemului ………………………………………………………… 34
2.2.3 Modelarea echipamentelor mediului de implementare …………………………………………………………. 36
3 Realizarea sistemului ………………………………………………………………………………….. ………………………… 38
3.1 Realizarea realității virtuale ………………………………………………………………………………….. …………….. 38
3.2 Realizarea modulului Mesagerie ………………………………………………………………………………….. ……… 41
3.3 Realizarea modulului Înregistrare ………………………………………………………………………………….. …….45
3.4 Testarea sistemului ………………………………………………………………………………….. ……………. ………….. 46
4 Documentarea produsului realizat ………………………………………………………………………………….. ………. 48
5 Argumentarea economi că………………………………………………………………………………….. ………………….. 56
Conclu zii………………………………………………………………………………….. ……………………………………………. 67
Bibliografie ………………………………………………………………………………….. ………………………………………… 68
Anexa A ………………………………………………………………………………….. …………………………………………….. 69
UTM 526.2. 893 ME
Mod. Coala Nr. document Semnăt. Data
Elaborat Plasiciuc V. SocialTwist – aplicație
bazată pe integrarea
realității virtuale în viața
socială utilizând
platforma iOS
Litera Coala Coli
Conducător Andrievschi
-Bagrin V. 8 67
Consultant S. Cojocaru
UTM FCIM
TI– 133
Aprobat Ciorbă D.
9 Introducere
O dată cu avansarea în tehnologie a crescut și necesitatea de comunicare. În zilele noastre este mult mai
ușor și ieftin să comunici, conect ezi cu oameni din întreaga lume, astfel internetul a adus cu el o nouă formă
de comunicare fi ind numită, rețea de socializare .
O rețea de socializare reprezintă un mod de a împărtăși gândurile cu mai multe persoane în același timp.
Este ușor de a face schimb de informatii precum ar fi imaginile, clipurile video , mesaje text. Alți oameni
percep rețelele ca o formă de divertisment. Rețelel e sociale se bazează pe o anumită structură care permite
oamenilor să -și expr ime atât individualitatea lor cât și de a întâlni oameni cu interese similare.
Este din ce în ce mai clar că rețelele de socializare au devenit parte din viața oamenilor iar compl exitatea
acestora crește o dată cu creșterea necesităților societății precum ar fi abonarea la diferite grupe pentru a
vizualiza noutăți sau informații adiționale . Abonarea la aceste grupe are și ea dezavantajele sale precum ar
fi abudența de informație su plimentară de care utilizatorul nu are nevoie. Această formă de divertisment
poate trezi noțiunea de dependență, care este caracterizată prin irosirea totală a timpului, cât și depărtarea
de tot ce înseamnă real.
Scopul lucrării este crearea unui sistem in formațional pe platforma iOS [1] care va oferi utilizatorilor o
comunicare virtuală orientată pe integrarea acestora în viața reală. Aplicația propriu zisă reprezintă un motor
de generare a evenimentelor în timp real fără abonarea la diferite grupe , și se f ocusează pe stimularea
comunicării tête-à-tête.
Obiectivele generale ale lucrării sunt următoarele:
– contribuirea la formarea unui nou stil de viață și descotorosirea de la lumea virtuală;
– aplicarea celor mai eficiente șabloane pentru crearea unui sistem scalabil;
– utilizarea celor mai noi standarde de modelare, proiectare, planifica re și implementarea sistemului.
Pentru implementarea aplicației, pe parcursul proiectării acesteia se va utiliza Enterprise Architect.
Enterprise Arh itect este un instrument de modelare și design vizual bazat pe UML [3], care include în sine
funcționalități de proiectare și construirea sistemelor informatice. Limbajul UML reprezintă un limbaj
standard pentru descrierea de modele și specificații pentru software oferind un model de interacțiune între
utilizator și sistem.
10 1 Analiza domeniului de studiu
Rețelele de socializare online au câștigat o creștere și o popularitate uluitoare la nivel mondial , ele au
înlocuit practic total presele, televiziunea, oferind client -ului modul de a sesiza informația și de ai presta
serviciile in mod online.
Cred că un prim avantaj al rețelelor de socializare este faptul că indivizi i pot dezvolta abilitățile de
comunicare î n scris , la fel pot interacționa cu oameni din alte țări, iar in acest fel vor afla lucruri noi despre
cultura altora. Oferirea utilizatorului informațiile ne cesare , duce la satisfacerea anumitor cerințe ceea ce
provoacă integrarea totală a societății în lumea virtuală. Zi de zi rețelele de socializare sunt copleșite cu un
număr total impresionant de 350 milioane de fotografii [4]. Facebook [5] este gazda unui t ip de conț inut
mult mai variat. Daca ar fi sa luă m in calcul comentarii, actualizări de status ș i fotografii, 4,75 miliarde de
informatii noi ajung zilnic p e Facebook in diverse formate. De aici tragem concluzia că dependența de a
partaja cât mai multe res urse reprezintă un mod al utilizatorilor de a se promova dar și la fel un mod de a
capta indicii despre personalitatea fiecărui individ. Unele organizații își promovează produsele sale pe rețele
astfel atrăgând mai mulți clienți față de posturile de televi ziune. Este un proces digital care este dezvoltat
cu timpul și poate asigura o oarecare independen ță în procesul de marketing, implicit d e vânzări, dac ă totul
este fă cut corect și atunci cind obiectul promovat este în vogă, fiecare utilizator al ace stor rețele poate regăsi
cu ușurință ceea ce căuta fără mari eforturi . Un alt avantaj al reț elelor de socializare este faptul că poți găsi
un loc de muncă mult mai usor și imaginea creată intr-o comunitate on line, te poate ajuta la un potenț ial
interviu .
Cert este că interacțiunea în acest spațiu virtual nu este dăunatoare atit timp cî t nu de vine singurul mod
de integrare și creează senzația de control și putere în viața cuiva . Indiferent de categoria socială, oamenii
își doresc atenție, confort și reducer ea anxietății generate de imposibilit atea de a fi așa cum își doresc.
1.1 Compararea cu alte sisteme similare
Social Twist este o aplicație realizată pe platforma iOS și este destinată administrării, planificării, și
controlului evenimentelor ce vor activa în viața socială . Evenimentele vor fi partajate atât pe hartă cât și pe
modulul cameră -video. Alături de aceste funcții aplicația la fel oferă o metodă de vizualizare tuturor
evenimentelor la care utilizatorul a participat, precum și împărtășirea cu alți utilizatori a emoțiilor , pozelor
de la evenimente. Aplicația oferă și o casetă de dialoguri în care utilizatorul va putea comunica cu prietenii
săi. Această caseta va include mai multe moduri de transmiterea a mesajelor precum ar fi :
– transmiterea mesajulu i text;
– transmiterea simbolurilor emoji;
11 – transmiterea unei poze;
– transmiterea audio;
– transmiterea locației util izatorului.
Sisteme similare
Pe platforma iOS sunt o mulțime de rețele de socializare . Dar puține din ele sunt bazate pe integrarea
la nivel înalt a utilizatorului în viața reală și nu virtuală. Pentru compararea cu sisteme similare au fost
analizate aplicațiile Facebook , Wingit [6] și Eventbrite [7]. Aceste aplicații sunt la momentul actual, primele
din clasamentul acestui gen de aplicații pe App Store.
Aplicația Facebook
Facebook (figura 1.1) este o aplicație gratuită de rețele sociale care le permite utilizatorilor înregistraț i
să creeze profiluri, să încarce fotografii și video, să trimit ă mesaje și să păstreze le gătura cu prietenii, familia
si colegii. Site -ul, care este disponibil în 37 de limbi diferite, include funcții publice, cum ar fi:
– grupurile permite membrilor care au interese comune pentru să se găsească mai ușor și să
interac ționează;
– permit membrilor să creeze evenimente la care vor participa cei ce doresc;
– permit membrilor să creeze și să promoveze o pagină publică construi tă în jurul unui anumit subiect;
– tehnologia prezentă permite m embrilor să vadă care contacte sunt online.
Facebook mai reprezintă un anumit mod de promovare a personalului, oferind posibilitatea de a promova
produsele cât și anumite vedete.
Figura 1. 1- Interfața aplicației Facebook
12 Aplicația Wingit
WINGiT este singura aplicație care dezvăluie în timp real toate evenimentele postate pe rețelele sociale
de către organizații sau persoane fizice. Este disponibilă în circa 100 de țări, și permite filtrarea
evenimentelor după dorința utilizatorului. Deține un algoritm continuu, care extrage date toate evenimentele
aflate pe rețele de socializare precum ar fi Facebook. Dezavanta jele acestei aplicații, lipsa custo mizării
evenimentelor. În figura 1.2 este afișată interfața aplicației Wingit.
Figura 1. 2- Interfața aplicației Wingit
Aplicația Eventbrite
Eventbrite reprezintă o aplicație la fel de gestionare și distribuirea a evenimentelor în timp real , față
de aplicația Wingit ea permite utilizatorului de a crea propriile evenimente , și la fel oferă u n mod de
urmărire a prietenilor, la ce eveniment au participat sau vor participa . În schimb nu permite comunicarea
13 între utilizatori, doar transmiterea unui anunț despre evenimentul la care este invitat utilizatorul pe email –
ul acestuia. Este permis la fel filtrarea evenimentelor după anumite categorii, precum ar fi sport, muzică.
Permite înregistrarea contului bancar pentru procurarea biletor la evenimentele ce sunt contra -plată, și
salvarea în memoria cache a evenimentelor la care utilziat orul a participa t. În figura 1.3 este afișată interfața
aplicației Eventbride.
Figura 1. 3- Interfața aplicației Eventbrite
Compararea sistemelor
Toate aceste 4 aplicații oferă un mod de vizuali zarea noutăților dar în schimb a u caracteristici
diferite, modulul complexității acestora sunt diferite, precum Facebook oferă un mod de partajarea a
pozelor, schimb de mesaje cât și mod de promovare a produselor . Wingit oferă posibilitatea de a fi la curent
cu toate evenimentele create în jurul utilizatorului . Eventbrite permite crearea propriilor evenimente. În
14 tabelul 1.1 sunt comparate funcționalitățile și serviciile oferite de aceste 4 aplicații, asemănările și
diferențele dintre acestea.
Tabelul 1 .1 – Diferențele dintre sistemele similare și sistemul informațional implementat
Funcționalități/servicii ST Facebook Wingit Eventbrite
Vizualizarea evenimentelor + + + +
Crearea evenimentelor + + – +
Afișarea hărții + + + +
Adăugarea fotografiilor/video pentru a
customiza modulul profilul utilizatorului + + – –
Afișarea listei de prieteni + + + +
Crearea grupurilor de interes – + – –
Posibilitatea de a vizualiza evenimentele
utiliz ând tehnologie realitate augmentată + – – –
Customizarea/editarea evenimentelor + + – +
Cross -platform + + + +
Posibilitatea de a rula aplicația de pe
calculator + + – +
Comunicarea/ schimbul de mesage între
utilizatori + + – –
1.2 Cerințe față de sistem
Cerințe referitoare la structura și modul de funcționare a sistemului
Pentru a implementa o aplicație calitativă se vor utiliza anumite cerințe funcționale, nefuncționale și
tehnice. Aplicația trebuie sa ofere anumite cerințe caracteristice unei rețele de socializare . Pentru aceasta
sunt prevăzute următoarele funcționalități:
– înregistrarea utilizatorului;
– monitorizarea/gestionarea în timp real a evenimentelor prin intermediul realității augmentate;
– filtrarea nivelului de acces a evenimentelor;
– adăugarea și ștergerea din lista de prieteni a utilizatorilor;
– comunicarea instantanee între doi utilizatori;
– personalizar ea unor setări ale aplicației;
– localizarea utilizatorului;
– transmiterea imaginilor între utilizatori.
15 Cerințe privi nd personalul
Pentru implementarea aplicației este nevoie de cunoștințe vaste a principiilor programării orientate pe
obiecte . Printre cerințele privind personalul se pot enumera:
– studii în domeniu;
– cunoștințe tehnice privind programarea iOS;
– cunoștințe și abilități de practicare a șabloanelor de proiectare;
– experiență de lucru cu partea server;
– experiență de lucr u cu mediul de dezvoltare Xcode.
Cerințe referitoare la funcții
Administrarea și gestionarea datelor necesare pentru înregistrare se realizează în modulul Înregistrare .
Procesul de înregistrare necesită anumite informații obligatorii cât și suplimentare , acestea reprezintă date
utilizate pentru crearea contului și eliberarea utilizatorului. Printre câmpurile obligaorii se enumeră:
– numele utilizato rului;
– prenumele utilizatorului;
– email -lul utilizatorului;
– parola utilizatorului;
– data nașterii utilizatorului;
– genul utilizatorului.
Printre câmpurile adiționale se enumera:
– interesele utilizatorului;
– locul de studiu/munca al utilizatorulu i;
– locul natal/actual al utilizatorului;
– relațiile utilizatorului;
– numărul de contact al utilizatorului;
– detalii despre utilizator (hobby, ocupații).
Printre modalitățile de definire a comportamentului de afișarea e evenimentelor se enumera următoa rele
posibilități:
– afișarea tuturor evenimentelor/doar evenimentele prietenilor;
– afișarea evenimentelor î n conformitatea cu raza de afișare.
16 Procesul de generare a evenimentelor pe cameră este ghidată și de o hartă transparentă care va facilita
o mai bună reprezentare a evenimentului și orientarea utilizatorului în spațiu.
Procesul de generare a evenimentelor pe cameră implică următoarele posibilități :
– accesarea descrierii evenimentului;
– vizualizarea în timp real a evenimentelor;
– oportunitatea de a utiliza funcționalitate suplimentară (hartă transparentă);
– orientarea direcției utilizatorului în dependență de po ziționarea dispozitivului mobil;
– localizarea utilziatorului.
Pentru comunicarea instantanee între utilizatori va fi utilizat mod ulul Mesagerie. Procesul de mesagerie
include în sine următoarele posibilități.
– accesarea listei de prieteni;
– schimbul instantaneu de mesaje între 2 persoane;
– ștergerea conversației;
– posibilitatea de utilizare a iconițelo r ce descriu emoții (emoticons);
– vizualizarea utilizatorilor online.
Adaptabilitatea la modificări
Sistemul oferă c ustomizare completă a datelor utilizatorului ceea ce impune sistemul să fie flexibil la
diferite modificări :
– editarea datelor utilizatorului (nume, prenume, vârsta, ș.a.m.d) ;
– editarea evenimentelor ;
– crearea, editarea, ștergerea mesajelor ;
Scalabilitatea sistemului
Sistemul fiind o sursă de informare, rezistența acestuia trebuia să fie maximală volumului de cereri,
datele extrase de pe server vor fi salvate periodic în memoria c ache apoi eliberate.
Cerințe de securitate
Lucru în rețea induce anumite riscuri precum ar fi accesul neautorizat, ceea ce impune sistemul să
respecte anumite reguli de securitate. În cazul primei versiuni ale aplicației Social Twist se vor respecta
regulile de integritate și confidențialitate a datelor.
Cerințe tehnice
Realizarea funcționalităților aplicației presupune respectarea anumitor cerințe tehnice :
17 – prezența dispozitivului iPhone ;
– versiunea iOS 9 .1 sau mai recentă;
– memorie cache pentru păstrar ea datelor extrase de pe server;
– memorie pentru instalarea aplicației.
Cerințe privind stocarea datelor
Așa cum aplicația „Social Twist” se află într -o strinsă legătură cu serverul , datele nu vor fi păstrate într –
o bază de date locală a dispozitivului mobil , și direct vor fi extrase de pe server atunci cînd se va stabili o
conexiune internet.
Cerințe privind documentația
Documentația este o parte importantă a ingineriei software, care va include:
– cerințele, declarații, care vor identifica atributele pr incipale ale aplicației;
– arhitectura aplicației, proiectarea acesteai utilizând diagramele UML;
– documentația la nivel de cod, interfețe.
18 2. Modelarea și proiectare a sistemului informatic
Modelarea și proiectarea unui sistem este descris de un ansamblu de componente interdependente între
care se stabile ște o interac țiune dinamic ă, pe baza unor reguli prestabilite de către dezvoltator , cu scopul
atingerii unui anumit obiectiv.
Elaborarea sistemelor informatice impune mode larea sistemului informa țional utilizând abstractizări
prin care s ă poată fi reprezentat cât mai su gestiv și fidel realitatea din cadrul sistemului informa țional.
Cerințele impuse de sistem sunt elaborate la etapa de analiză, unde sistemul este descompus în subsisteme
indep endente mai simple astfel ușurând procesul de depanare a sistemului.
La etapa de proie ctare sunt realizate modele care descriu arhitectura sistemului, definite scopurile,
serviciile și restric țiile pe care trebuie s ă le îndeplineasc ă sistemul . Proiec tarea unui sistem are loc pe baza
unei specificații a cerințelor . Proiectarea software -ului este convertită într-o mul țime de programe sau
module program unde are loc verificarea faptului c ă fiecare program sau modul satisface specifica ția sa.
Analiza și proiectarea sistemelor informaționale implică utilizarea instrumentelor de bază Entreprise
Architect care dispun e de toate funcționalitățile necesare pentru construirea sistemului informațional și
descrierea acestuia utilizând diagramele oferite de ace st instrument . În cursul dezvoltării aplicației
SocialTwist vor fi create mai multe module ale produsului, care vor capta diferite aspecte ale acestuia cu
mai multe nivele de detaliere.
Enterprise Architect este o unealtă excepțională și multifuncțională u tilizată pentru analiza, proiectarea
sistemelor informaționale.
Limbajul UML reprezintă un limbaj de modelare a sistemului informațional utilizat în domeniul
inginerii software , utilizat pentru vizualizarea și documentarea componentelor produsului soft . Limbajul
UML poate fi utilizat efectiv pentru modelarea structurii unei apl icații, comportamenul acesteia cât și
descrierea unui bussiness proces . Modelarea structurii aplicației este reprezentată prin mai multe diagrame,
unde fiecare diagramă v -a reprezent a o anumită vedere.
2.1 Descrierea comportamentală a sistemului
Descrierea comportamental ă este legat ă de modul în care opereaz ă sistemul și funcționalitățile ce le
oferă eviden țiind modul în care circulă datele de intrare și ieșire . În cadrul acestuia se includ :
– imaginea generală asupra sistemului ce reprezintă o interacțiune dintre un actor și un sistem și
furnizează funcționalitățile, interfețele oferite de către acest sistem ;
– modelarea vizuală a fluxurilor ce reprezintă trecerea sistemului de la o activitate la alta în timpul
interacțiunii cu utilizatorul ;
19 – stările și tranzacțiile sistemului descriu ciclul de viață a unui obiect, stările sale și schimbă rile de
stare care au loc pe parcursul ciclului de viață ;
– descrierea scenariilor de utilizare a sistemului sunt utilizate pentru descrierea interacțiunilor dintre
entități și ordinea în care mesajele sunt schimbate între acestea ;
– fluxurile de mesaje și legăturile dintre componentele sistemului ilustrează fluxur ile de mesaje și
legăturile dintre componentele sistemului .
2.1.1 Imaginea generală asupra sistemului
Imaginea generală asupra sistem ului este folosi tă ca o reprezentare la nivel conceptual a unei
interacț iuni dintre un actor si un sistem . În același timp ea poate fi gândit ă ca o colecție de scenarii posibile
legate de un anumit obiectiv . Un actor poate fi un utilizator sau mai mulți ce interacționează cu sistemul
modelat. Imaginea generală asupra sistemului poate fi descrisă cu ajutorul dia gramelor cazurilor de
utilizare.
O diagramă a cazurilor de utilizare este descrisă de anumite caracteristici :
– reprezintă o metodologie generală a modului în care va fi utilizat sistemul;
– furnizează funcționalități le oferite de către sistem ;
– oferă o viziu ne mai clară a interacțiunii dintre actor și sistem.
În diagrama 2.1 sunt reprezentate abstract funcționalitățile de bază cu care utilizatorul v -a interacționa
și defin ite acțiunile executate de sistem în urma legăturii interdependente cu actorul .
Servici ile oferite de către aplicația SocialTwist sunt inițiate la cererea utilizatorului. În cazul diagramei
elaborate în figura 2.1 sunt distinse principalele servicii pe care sistemul oferă utilizatorul ului. Printre
acestea se pot enumera:
– înregistrarea utilizatorului (pentru eliberarea unui cont) ;
– autentificarea (pentru a accesa serviciile aplicației Social Twist) ;
– accesarea mesageriei instantanente;
– vizualizarea evenimentelor în listă ;
– accesarea profilului utilizatorilor ;
– accesarea setă rilor;
– accesarea listei de prieteni;
– vizualizarea evenimentelor utilzând realitatea augmentată [8];
– vizualizarea evenimentelor pe hartă;
– transmiterea cererilor de prietenie.
Datele transmise de utilizator sunt validate de către server.
20
Figura 2.1- Funcționalitățile oferi te de sistem utilizatorului
Accesând mo dulul mesagerie utilizatorului î i este oferit alte servicii reprezentate în figura 2.2 . Aceste
servicii includ transmiterea mesajelor unei persoane sau unui grup de persoane, t ransmiterea simbolurilor
emoji, transmite rea mesajului formatului căruia poate fi o imagine, sau mesaje text. Utilizatorului îi este
oferit oportunitatea de a vizualiza profilul interlocutorului d oar la un simplu click pe imaginea acestuia. La
fel este disponibilă și funcția de ștergere a mesajel or, vizualizarea listei de conversație. În cadrul aplicației
SocialTwist pentru a ușura modul de comunicare între utilizatori, s -a introdus și funcția de vizualizarea
stărilor utilizatorilor care se divide în 2 părți :
– stare activă (online);
– stare inactivă (offline).
21
Figura 2 .2- Funcționalități le modulul ui mesagerie ale aplicației
În figura 2.3 sunt definite serviciile oferite de către sistem, caracteristice modulului – realitatea
augmentată. Acest modul oferă utilizatorului un mod alternativ de vizualizarea a evenimentelor prin
intermediul realității augmentate. De asemenea în cadrul acestui modul utilizatorul este apt de a personaliza
unele opțiuni de vizualizare a evenimentelor, precum ar fi vizualizarea evenimentelor postate public sau
privat. Pe lingă aceste opțiuni utilizatorului mai are posibilitatea de a stabili raza de afișare a evenimentelor,
cât și modul de urmărire a utilizatorului care presupune orientarea în spațiu în dependență de po ziționarea
dispozitivului mobil.
22
Figura 2.3- Func ționalități oferite de modulul realitatea virtuală
2.1.2 Modelarea vizuală a fluxurilor
Pentru a reda pașii unui proces și a modela fluxul controlului la nivel de sistem este utilizată diagrama
de activități . Diagrama de activități reprezintă niște derul ări de etape regrupate secvențial în care se descriu
activitățile sistemului , trecerea de la o activitate la alta are loc numai la terminarea efectuării operațiunilor
stărilor precedente.
Un rol important în accesarea serviciilor oferite de către aplicație SocialTwist reprezintă crearea unui
cont de utilizator . Contul la rândul său este creat în urma accesării modulului de înregistrare prezentat în
figura 2.4. În timpul înregistrării utilizatorului îi este oferit un formular de înregistrare cu următoarele
câmpuri precum, nume, prenume, anul de naștere, genul , parola , email -ul. . După introducerea datelor are
loc verificarea datelor conform anumitor standarte și ulterior validarea acestora. Î n cazul introducerii datelor
23 invalide sistemul va notifica utilizatorul de câmpul pe care acesta l -a greșit sau nu l -a completat . Dacă
utilizatorul a introdus date valide atunci sistemul v -a înregistra utilizatorul și -i v-a crea un cont cu care
acesta se va putea autentifica în sistem doar după verificare a contului email și confirmarea autentificării
utilizatorului.
Figura 2 .4- Procesul de înregistrare a utilizatorului
Pentru vizualizarea evenimentelor utilizând realitatea augmentată, utilizatorul v -a accesa modulul
corespunzător acestuia. În diagrama 2. 5 este descris procesul de accesarea a modulului realitate augmentată,
și serviciile pe care utilizatorul le poate accesa.
24 Pentru a putea vizualiza pe cameră evenimentele, utilizatorul trebuie să confirme accesul la camera
dispozitivului, ulterior în cazu l în care confirmarea a avut loc atunci utilizatorul poate vizualiza
evenimentele din jurul său utilizând camera. La fel o oportunitate este de a vizualiza aceste evenimente
într-un mod alternativ descris prin combinarea hărții și a dispozitivului cameră. Aceasta reprezintă un mod
de percepere a evenimentelor în spațiu mai fluent. Pentru combinarea acestor 2 componente se utilizează
gesturile.
Figura 2.5 – Procesul de vizualizarea a evenimentelor utilizând modulul realitate virtuală
În cadrul modulului mesagerie, utilizatorul poate efectua anumite activități descrise în diagrama 2.6.
Pentru a efectua schimbul de mesage, inițial este ales interlocutorul cu care v -a avea loc comunicarea.
Mesajele transmise se clasifică în 3 tipuri :
– mesaje tip text;
25 – mesaje tip emoji;
– mesaje tip imagini.
La fel utilizatorul poate vizualiza și șterge conversația.
Figura 2.6 – Activitățile utilizatorului în cadrul modulului mesagerie
2.1.3 Stările și tranzacțiile sistemului
Pentru descriera stărilor și tranzacțiilor sistemului vom utiliza diagrama de stări care v-a modela viața
unui obiect prin stările sale și schimbă rile de sta re care au loc pe parcursul ciclului de viață. Schimbă rile de
stare sunt determinate de evenimente le prin care trece sistemul .
Aplicația SocialTwist menține anumite date legate de starea activă sau inactivă a opțiunii cameră și
hartă . În dependență de acțiunile utilizatorului modulul cameră și hartă pot descrie 2 stări , stare activă și
inactivă. În cazul când utilizatorul accesează modulul realitatea augmentată starea acestuia devine activă
doar atunci când utilizatorul confirmă utilizarea camerei dispozitivului, același proces este definit și
componentei hartă. În caz contrar datele și funcționalitățile acest ui modul sunt suspendate, ulterior starea
acestui modul devine inactiv. În figura 2.8 este diagrama stărilor modului realitate augmentată.
26
Figura 2 .8- Stările modulului realitatea augmentată
2.1.4 Descrierea scenariilor de utilizare a sistemului
Descrierea scenariilor de utilizare a sistemului se utilizează pentru a reprezenta interacțiunile dintre
entități și ordinea în care mesajel e sunt schimbate între acestea. D iagramele de secvențe pot fi folosite
pentru a descrie logica de funcționare a fun cțiilor sau proceselor complexe.
În figura 2.10 este reprezentat procesul de accesarea a evenimentelor utilizînd modulul cameră. Inițial
utilizatorului transmite o cerere de vizualizare a evenimentelor, modulul ui Realitate Augmentată verifică
prezența stări i active a acesteia, în caz contrar nu va răspunde la cererile utilizatorului. Ulterior sunt
transmise cererile de vizualizare a evenimentelor ce se află pe modulul hartă, care la rîndul său le va extrage
de pe server și le va întoarce către modulul Realit atea Augmentată . Utilizatorul are posibilitatea la fel de a
27 stabili și anumite opțiuni precum ar fi raza de afișare astfel încât modulul hartă va trebui să răspundă de
toate datele transmise conform cererilor impuse de cameră.
Figura 2.10 – Afișarea eveni mentelor pe cameră
În figura 2.11 este descris procesul de înregistrare a unui utilizator. Inițial, utilizatorul neautorizat
va accesa modulul Înregistrare unde va introduce toate datele necesare , precum nume, prenume, email și
parolă . Aceste date vor fi verificate conform standartelor predefinite și vor fi transmise către server unde
acesta , în cazul unui raspuns afirmativ va transm ite un mesaj de succes sau eroare și în rezultat v -a elibera
un nou cont. Pentru a se putea autentifica în sistem cu contul nou creat, utilizatorul trebuie să verifice pagina
email, pentru a confirma crearea contului.
28
Figura 2.11 – Înregistrarea utilizatorului
Accesarea modului chat reprezintă un proces complex, în care serverul este un intermediar ce per mite
schimbul de mesaje instantaneu între 2 utilizatori . După introducerea unui mesaj se efectuează o cerere
către server care redirecționează mesajul către receptor . Ulterior are loc verificarea veridicității mesajului.
Atât receptorul, cît și emițătorul poate iniția un nou proces de comunicare. Acest proces este bine descris
în figura 2.12. O componentă de bază în transmiterea mesajelor pe server o joacă componenta
chatController, care răspunde de transmiterea datelor pe server, și de tipul mesajelor tran smise către server.
29
Figura 2.12 – Procesul de transmiterea a mesajului între 2 interlocutori
2.1.5 Fluxurile de mesaje și legăturile dintre componentele sistemului
Diagramele de colaborare ilustrează fluxurile de mesaje și legăturile dintre componentele sistemului.
Sunt similar e cu diagramele de secvențe dar spre deosebire de acestea timpul nu este reprezentat ca o
dimensiune separată.
Diagramele de col aborare descriu diverse scenarii de funcționare a aplicației utilizând reprezentarea
fluxurilor de mesaj e dintre obiecte și organizarea spațială a obiectel or și legăturile dintre acestea.
Astfel încât aplicația Social Twist reprezintă o rețea de socializare, utilizatorul poate dispune de o listă
de prieteni cu o posibilitate de a adăuga și a șterge noi utilizatori. Procesul de ștergere este descris în figura
2.13, inițial utilizatorul accesează persoan a pe care ar dori să o șteargă, după care are loc transmiterea unei
cereri de ștergere în modulul lista de prieteni, aceasta la rîndul său verifică prezenț ei unei astfel de persoane,
30 ulterior o șterge din lista de prieteni, și transmite un mesaj de ștergere a acestuia și din baza de date aflată
pe server. Este importantă invocarea acestui mesaj către server, pentru evitarea reapariției acestei persoane
șterse în lista de prieteni.
Figura 2.13 – Ștergerea unui utilizator din lista de prieteni
Pentru a ascunde anumite date ce -l reprezintă pe utilizator, a fost implementată funcția de setare a
nivelului de acces. Astfel utilizatorul va putea stabili nivelul de acces public sau privat în dependență de
preferințele sale. Acest proces este bine descris în figura 2.14. Prin nivel de acces public utilizatorul permite
vizualizarea tuturor datelor sale către toate persoanele care utilizează aplicația Social Twist. Nive lul de
acces privat reprezintă modul de a partaja resursele utilizatorului doar pentru prieteni. Pentru ca la
următoarea pornire a aplicației aceste setări să funcționeze se folosește o bază de date locale care va menține
schimbările efectuate de către uti lizator.
Figura 2.14 – Setarea nivelului de acces
31 2.2 Descrierea structurală a sistemului
Descrierea structurală a sistemului modeleaz ă componentele (entit ățile) de interes ale unui sistem . Aici
sunt descrise atributele obiectelor cu care interacționează sistemul , operaținule ce pot fi efectuate.
Descrierea structurală a sistemului care include în sine :
– descrierea structurii statice ;
– relațiile de dependență între componentele sistemului ;
– modelarea echipamentelor mediului de implementare .
Descrierea str ucturii statice include în sine prezența diagramelor de clasă și stabilirea relațiilor dintre
acestea.
În compartimentul relațiile de dependență între componentele sistemului se vor include diagramele de
componente ce descriu relațiile structurale între componentele sistemului.
Modelarea echipame ntelor mediului de implementare s unt folosite pentru a vizualiza topologia
componentelor fizice ale unui sistem în care sunt implementate componentele softwar e.
2.2.1 Descrierea structurii statice a sistemului
Descrierea structurii statice a sistemului prezintă clasele sistemului, interdependeța lor (moștenirea ,
agregarea,compoziția ), analizează cerințele sub forma unui model conceptual, descrie proiec tarea detaliată
a aplicației utlizând principiile programării orientate pe obiect. Modelul structural static al sistemului
proiectat este o reprezentare grafică a legăturilor structurale al e modelului logic al sistemului.
În figura 2 .15 este reprezentată s tructura modului camera a aplicației și relațiile cu clasele dependente .
Pentru realizarea funcționalităților de bază se utilizează CameraState , AugmentedController. Aceasta
permite crearea și gestionarea eficientă a resurselor modulului cameră. Pentru ini tițializarea realității
virtuale CameraState creează o instanță de tipul clasei AugmentedRealityController care va răspunde pentru
suprapunere stratului cameră cu evenimentele corespunzătoare. În dependență de orientarea dispozitivului
și a geolocației, pe stratul cameră vor fi afișate evenimentele care se includ în raza de afișare. Coordonatele
evenimentelor și poziționare acestora sunt stabilite de clasele GeoLocations și ArCoordinate. Pentru crearea
și afișarea imaginii tipului de eveniment a fost creată clasa Ev entsDraw care v -a raspunde de custo mizarea
evenimentului după tipul stabilit de datele transmise d e către modulul hartă, care v -a include în sine un
dicționar de parametri ce vor fi utilizați pentru atribuirea anumitor proprietăți evenimentelor. C lasa
UserLocation este clasa de bază dupa care are loc formarea evenimentelor pe cameră astfel încât ea prezintă
poziționarea utilizatorului după geolocație. Dacă utilizatorul se v -a dezice de la transmiterea datelor sale pe
server și anume a poziției sale conform geolocației atunci are loc distrugerea obiectelor claselor care vor
răspunde de crearea unei realități augmentare.
32
Figura 2.15 – Structura modului realitate virtuală
Pentru crearea evenimentului pe camera se folosește clasa EventsDraw si metodel e sale
getArObjectDraw pentru construirea animata a evenimentului de la punctul utilizatorului si pentru
reprezentarea grafica a acestuia se va utiliza metoda fadeInAnimation .
Toate aceste date legate de modulul realitate augmentată, vor fi permanent acti ve atât timp cât
utilizatorul va permite aplicației SocialTwist să utilizeze dispozitivul cameră și hartă. În caz contrar, datele
vor fi suspendate și utilizatorului îi se v -a afișa un mesaj de eroare. Pentru a putea accesa din nou modulul
dat, utilizatoru l este nevoit să acceseze setările dispozitivului și să permită acces aplicației SocialTwist.
33 Înregistrarea se utilizează pentru verificarea identității utilizatorului care utilizeaz ă aceasta aplicație
(figura 2.16 ). Pentru a putea accesa serviciile oferite de aplicația propriu -zisa este nevoie de introducerea
datelor personale si anume a login -ului si parola email -ul, anul de naștere cât și genul.
Figura 2.16 – Modulul Înregistrare
Aceste date sunt verificate utilizând metoda UiAlertAction care vali dează datele introduse de utilizator.
În caz că datele sunt introduse incorect se va afișa un mesaj de eroare în dependență de câmpul pe care l -a
greșit utilizatorul. Datele validate sunt transmise către server utilizând clasa AfnetWorking care oferă
metod ele Get, Post pentru transmiterea sau extragerea datelor de pe server. Pentru a evita cazurile în care
tastiera ocupă câmpul de introducere a textului, a fost creată clasa KeyBoardAvoiding care va ajusta
viziunea atunci când tastiera va apărea.
În figura 2.17 este reprezentată diagrama a modului Chat care reprezintă metoda prin care utilizatorul
poate comunica cu prietenii la un moment dat de timp. Pentru a transmite un mesaj unui prieten se va
utiliza metoda sendMsg() , mesajele sunt transmise utilizând clasa RequestManager care va răspunde de
interacțiunea utilizatorului cu ceilalți utilizatori . Modulul chat depinde și de alte clase importante precum
34 ar fi clasa care va răspunde de tipul mesajelor transmise Message și MediaItem, prin obiecte media
subân telegem mesaje de tip imagini, audio și geolocație. Pe lângă oportunitatea de a transmite mesaje text
și imagini, utilizatorul poate transmite și mesaje emoji de care răspunde clasa EmojiKeyboard. Simbolurile
emoji sunt obiecte json ce aparțin IDE -ului Xco de și care sunt atașate pe tastieră.
Figura 2.17 – Modulul Chat
2.2.2 Relațiile de dependență între componentele sistemului
Relațiile de dependență între componentele sistemului sunt utilizate pentru a arăta relațiile structurale
dintre componentele unui sistem și pentru a verifica dacă cerințele unui sistem sunt implementat e de
componente le sale. Relațiile de dependență sunt caracterizate utilizând diagrama de componente.
Diagrama de componente se elab orează pentru următoarele scopuri:
– sunt folosite pentru a vizualiza componentele fizice într -un sistem /framework -uri;
– descrie rea organizării și relațiilor dintre compon ente;
35 – reprezentarea conceptuală și fi zică a schemelor bazei de date.
În figura 2.19 su nt afișate relațiil e dintre componentele dispozitivului iOS și librăriile sistemului dat .
Aceste componente au o influență enormă asupra funcționării sistemului în cauză . Printre ele se enumeră:
– camera , ea va răspunde de crearea realității virtuală;
– geolocația , a cărui scop este stabilirea poziției evenime ntelor cât și a utilizatorului;
– AfnetWorking ( librărie care răspu nde de transmiterea datelor pe server);
– JsqMessageCo ntroller, controller care răspunde de partea vizuală a modulului Mesagerie;
– EmojiKeyboard ( librărie care răspunde de crearea unei tastiere cu simboluri);
– AvFoundation ( librărie utilizat pentru personalizarea dispozitivului camer ă);
– MapKit ( librărie utilizat pentru personalizarea hărții) .
Figura 2.19 – Componentele și librăriile utilizate în crearea funcționalităților sistemului
Astfel precum aplicația SocialTwist este divizată pe module, în figura 2.20 au fost reprezentate
modulele corespunzătoare . Prezența acestora asigură realizarea sarcinilor corespunzătoare subcapitolului
cerințe. Astfel este prezentat modulul înregistrar e pentru crearea unui cont nou , modulul realitate
augmentată ce depinde de astfel de componente precum ar fi camera dispozitivului și componenta hartă
36 pentru afișarea evenimentelor. Modulul chat este utilizat pentru comunicarea cu prietenii , el oferă 3 moduri
de transmiterea a mesajelor. Aceste 3 moduri presupun prezența formatului de date de tip txt, jpg și unicode.
Figura 2.20 – Componentele esențiale ale aplicației
2.2.3 Modelarea echipamentelor mediului de implementare
Modelarea echipame ntelor mediului de implementare s unt folosite pentru a vizualiza topologia
componentelor fizice ale unui sistem în care sunt implementate componentele software și caracterizează
desfășurarea fizică a sistemului, ce device -uri (numite și noduri) vor fi folosite pentru realizarea efectivă a
implementării, cum sunt acestea conectate, precum și ce componente se vor executa pe fiecare nod .
Din figura 2.21 deducem, că toate datele pe care le oferă aplicația SocialTwist uti lizatorului sunt extrase
de pe server. Serverul la rândul său dispune de o bază de date în care va păstra aceste date . Un rol important
în rularea aplicației propriu zise este sistemul de operare iOS și prezența unui device iPhone . Ceea ce denotă
faptul c ă aplicația nu va putea fi rulată pe dispozitive Android.
37
Figura 2 .21- Diagrama structurală a aplicației
38 3 Realizarea sistemului
Aplicația SocialTwist este realizată pentru platforma iOS iar pentru implementarea aplicației s -a utilizat
mediul de dezvoltare Xcode. Xcode include totul pentru crearea aplicațiilor pentru Mac, iPhone, iPad,
Apple Watch, și Apple TV .
Aplicația SocialTwist va fi implementată în limbajul de programare orientat pe obie cte Objective C.
Algoritmii și librăriile utilizate pentru dezvoltarea aplicației sunt :
– AVFoundation;
– MapKit;
– Algoritmul Azimuth;
– Algoritmul de convertare a coordonatelor î n puncte x,y;
– AFNetWorking;
– JsqMessageViewController;
– Emoji Keyboard.
3.1 Realizarea realității virtuale
Proiectarea augmentății reale este realizată utilizând librăria AVFoundation. În cadrul acesteia va
fi realizată modul de implementare a funcției live -cameră . Un avantaj al utilizării unor astfel de librării este
customizarea totală a camerii de filmare . Această librărie va fi custo mizată utilizînd si clasele necesare
pentru a oferi o modalitate de a vizualiza în direct a evenimentelor ce vor fi afișate pe hartă. În figura 3.1
se observă o contopire între modulul cameră și modulul hartă, ambele utilizate pentru a ușura modul de
căutare a evenimentului. Această funcțiune va fi utilizată pentru a ușura metoda de căutare a evenimentelor.
Utilizarea acestor 2 modul implică în sine și utilizarea anumitor functii matematice și geografice de
calcularea a distanței cît și de afișarea evenime ntelor pe ecranul dispozitivului.Una din principalele
particularități în aplicație este faptul cum sunt stocate datele și distribuite pe ecranul dispozitivului . Pentru
aceste sarcini au fost utilizate lib răriile AVFoundation, Mapkit , și clasele necesare precum ARKit,
ARGeoCoordinate, AugmentedRealityController. AVFoundation este o librărie care ne permite accesarea
și implementarea modulului cameră în cadrul aplicației SocialTwist.
AVFoundation este o librărie care ne permite accesarea și implementarea mo dulului cameră în cadrul
aplicației SocialTwist.
Această librărie este formată din 3 obiecte principale care sunt AVCaptureSession , AVCaptureDevice
, AVCaptureVideoPreviewLayer . Aceste componente sunt utilizate pentru a personaliza componenta cameră
a dis pozitivului iOS. În cazul aplicația socialTwist vom utiliza cameră ca o componentă indicator pentru
vizualizarae evenimentelor ce decurg în jurul utilizatorului.
39
Figura 3.1 – Implementarea augmentății reale
Se recomandă inițializarea unei sesiuni cameră , care transmite device -ului informația că va avea loc
implementarea modulului cameră . Apoi se alege tipul camerei utilizate , frontală sau din spate. Iar apoi
se construiește un înveliș pe ecranul dispozitivului care îl constituie camera.
AVCaptureSession *avCaptureSession = [[AVCaptureSession alloc] init];
AVCaptureDevice *videoC aptureDevice =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput
deviceInputWithDevice:videoCaptureDevice error:&error];
AVCaptureVideoPreviewLayer *newCaptureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer
alloc] initWithSession:avCaptureSession];
Pentru a con topi camera cu modulul mapă s -a utilizat librăria MapKit care dispune de 3 obiecte
principale care sunt :
40 – locationManager , managerul a cărui funcție este de a actualiza poziția utilizatorului;
– userLocation , afișarea punctului care va reprezenta utilizat orul;
– mapView , însuși harta propriu -zisă.
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *lastLocation = [locations lastObject];
CLLocationAccuracy accuracy = [lastLocation horizontalAccuracy];
NSLog(@"Received location %@ with accuracy %f", lastLocation, accuracy);
if(accuracy < 100.0) {
MKCoordinateSpan span = MKCoordinateSpanMake(0.14, 0.14);
MKCoordinateRegion region = MKCoordinateRegionMake([lastLocation coordinate], span);
[_mapView setRegion:region animated:YES];
Pentru a implementa și modulul evenimente care include în sine ataș area acestuia pe stratul cameră , au
fost utilizate anumite metode de calcularea a orientării dispozitivului , cît și calcularea utilizînd formule
geografice a distanței dintre utilizator și evenimentele care îl înconjoară.
Pentru calcularea distanței este utilizată formula Azimuth [9]. Azimutul este unghiul format între o
direcție de referință (Nord) și linia de la observator la un punct de interes proiectate pe același plan cu
direcția de referință . Ulterior va urma executarea codului și implementarea formulei Azimuth .
-(double) findDeltaOfRadianCenter:(double*)centerAzimuth
coordinateAzimuth:(double)pointAzimuth betweenNorth:(BOOL*) isBetweenNort h
{if (*centerAzimuth < 0.0)
*centerAzimuth = M_2PI + *centerAzimuth;
if (*centerAzimuth > M_2PI)
*centerAzimuth = *centerAzimuth – M_2PI;
double deltaAzimuth = ABS(pointAzimuth – *centerAzimuth);
*isBetweenNorth = NO;
if (*centerAzimuth < degreesToRadia n(degreeRange) && pointAzimuth > degreesToRadian(360 –
degreeRange)) {
deltaAzimuth = (*centerAzimuth + (M_2PI – pointAzimuth));
*isBetweenNorth = YES;
}
else if (pointAzimuth < degreesToRadian(degreeRange) && *centerAzimuth > degreesToRadian(360 –
degreeRang e)) {
deltaAzimuth = (pointAzimuth + (M_2PI – *centerAzimuth));
*isBetweenNorth = YES;
}
return deltaAzimuth;
41 }
Pentru calcularea poziționării evenimentelor pe cameră se utilizează o formulă de convertare în puncte
x, y coordonatele evenimentelor de pe hartă .
– (CGPoint)pointForCoordinate:(ARCoordinate *)coordinate
{ CGPoint point;
CGRect realityBounds = [[self displayView] bounds];
double currentAzimuth = [[self centerCoordinate] azimuth];
double pointAzimuth = [coordinate azimuth];
BOOL isBetweenNorth = NO;
double deltaAzimith = [self findDeltaOfRadianCenter: ¤tAzimuth
coordinateAzimuth:pointAzimuth betweenNorth:&isBetweenNorth];
if ((pointAzimuth > currentAzimuth && !isBetweenNorth) ||
(currentAzimuth > degreesToRadian(360 – degreeRange) && pointAzimuth <
degreesToRadian(degreeRange))) {
point.x = (realityBounds.size.width / 2 ) + ((deltaAzimith / degreesToRadian(1))
* ADJUST_BY) -100; // Right side of Azimuth
}else
point.x = (realit yBounds.size.width / 2) – ((deltaAzimith / degreesToRadian(1)) *
ADJUST_BY); // Left side of Azimuth
point.y = (realityBounds.size.height / 2) -200; // + (radianToDegr ees(M_PI_2 + viewAngle)
* 2.0) return point;
}
3.2 Realizarea modulului Mesagerie
Acest modul implică în sine prezența a 2 controalere, unul va răspunde de alegerea persoanei cu care
vom dori să comunicăm, precum și vizualizarea persoanelor online, iar al 2 controler va răspunde de
comunicarea instantantanee între 2 utilizatori.
Pentru implementarea unei astfel de liste am creat un tabel care va afișa utilizatorii recenți cu care s -a
comunicat și o colecție de date care v -a raspunde de afișarea utilizatorilor online.
Pentru implementarea tabelei au fost utilizate metodele delegatului tab elei.
-(UITableViewCell *)tableView:( UITableView *)tableView cellForRowAtIndexPath:( NSIndexPath
*)indexPath
{if(indexPath. row == 0 && indexPath. section == 0)
{
ActiveFriendsTableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier :@"ActiveFriendsTableViewCell" ];
cell.testImage = [UIImage imageNamed :@"demo_avatar_woz" ];
return cell;
}
NSLog(@"indexpath %ld" ,(long)indexPath. row);
42 if(indexPath. section == 1) {
FriendsCell *cell = [tableView dequeueReusableCellWithIdentifier :@"FriendCell" ];
if(indexPath. row == 0)
{
cell.avatarImageView .image =[UIImage imageNamed :@"demo_avatar_jobs" ];
}
else{
cell.avatarImageView .image =[UIImage imageNamed :@"demo_avatar_cook" ];
}
return cell;
}
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier :@"StandartCellID" ];
if (!cell) {
cell = [[ UITableViewCell alloc] initWithStyle :UITableViewCellStyleDefault
reuseIdentif ier:@"StandartCellID" ];
}
return cell;}
În figura 3.2 este prezentat procesul de alegerea a utilizatorilor cu care se va stabili procesul de
comunicare.
Figura 3.2 – procesul de alegerea a utilizatorului cu care se va stabili comunicarea
Așa precum tabela este creată din celule în metoda delegatul ui tabelei vom utiliza celule custo mizate.
În figura 3.3 și 3.4 sunt afișate celule care raspund de lista de prieteni și utilizatorii online.
43
Figura 3.3 – Celula utilizatorilor online
Figura 3.4 – Celula listelor de utilizatori cu care s -a comunicat recent
Pentru alegerea persoanei cu care se v -a trece la modului mesagerie instantanee vom accesa unul din
utilizatori cu un simplu click pe caseta dată.
if(indexPath. row ==0)
{
DemoMessageViewController *vc = [self.storyboard
instantiateViewControllerWithIdentifier :@"DemoMessageViewController" ];
vc.demoData = [[DemoModel alloc]init];
vc.name =@"Vadim Plasiciuc" ;
vc.userID = @"23";
[self.navigationController pushViewController :vc animated :YES];
}
else{
DemoMessageViewController *vc = [self.storyboard
instantiateViewControllerWithIdentifier :@"DemoMessageViewController" ];
vc.demoData = [[DemoModel alloc]init];
vc.name =@"Roma Cosciuc" ;
vc.userID = @"25";
[self.navigationController pushViewController :vc animated :YES];
}
Fiecare utilizator pe va avea un anumit id utilizat pentru identificarea de către server a mesajelor transmise
între utilizatori. În figura 3.5 e ste prezentat modulul mesagerie dintre 2 utilizatori.
Procesul de comunicare are loc prin transmiterea mesajelor pe server, iar acesta le va redistribui printre
utilizatori. Mesajele sunt transmise utilizând metodele HTTP POST și extrase utilizând metoda GET.
-(void)getMessagefromID:( NSString *)userId onSucces:( void(^)(NSDictionary *response)) success
44 onFail:( void(^)(NSError * error, NSInteger statusCode)) failure
{ … }
-(void)sendMessage:( NSString *)message andId:( NSString *)userId
{ … }
Utilizatorul are posibilitatea de a transmite mesaje text, imagini și emoji.
Pentru transmiterea mesajelor se v -a utiliza clasa UiphotoImagePickerController care v -a răspunde de
alegerea pozei pe care utilizatorul v -a dori sa o transmită. Astfel accesând butonul cameră va fi apelată
metoda care v -a răspunde pentru procesul de extragerea a pozei .
UIImagePickerController *imagePickerController = [[ UIImagePickerController alloc]init];
imagePickerController. delegate = self;
UIAlertController * alertController = [ UIAlertController alertControllerWithTitle :nil
message:nil preferredStyle :UIAlertControllerStyleActionSheet ];
[alertController addAction :[UIAlertAction actionWithTitle :@"Take a photo"
style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
imagePickerController. sourceType = UIImagePickerControllerSourceTypeCamera ;
[self presentViewController :imagePickerController animated :YES completion :nil];
Figura 3.5 – Modulul mesagerie dintre 2 utilizatori
45 3.3 Realizarea modulului Înregistrare
Orice utilizator înainte de a accesa serviciile oferite de către aplicația propriu zisă este nevoit să se
înregistreze. Procesul de înregistrare include în sine introducerea astfel de câmpuri precum ar fi numele,
prenumele, email -ul și parola.
Datele acestea sunt transmise către server utilzând metoda HTTP POST. Datele transmise sunt de tip
json. Pentru a efectua procesul de transmiterea utilzând metoda POST, a fost inclus librărie AFNetWorking
care va răspunde de efectuarea conexiunii cu serverul. Este creat un manager de sesiuni cu numele de
RequestManager de tip Singl eTon împreuna cu metodele sale.
+(RequestManager *)sharedManager
{
static RequestManager * manager = nil;
static dispatch_once_t onceToken;
dispatch_once (&onceToken, ^{
manager = [[ RequestManager alloc]init];
});
return manager;
}
Ulterior v -a fi efectuat ă metoda de transmiterea a datelor accesând butonul Register, unde se vor tranmsite
aprametri ca numele, prenumele email, parola, data, anul de naștere, genul. Aceste date vor fi salvate într –
un dicționar și apoi serializate într -un format json, pentru a f i transmise către server. În cazul transmiterii
datelor cu succes, serverul v -a întoarce un mesaj cu codul “200” ce semnifică un mesaj de succes a
transmiterii datelor, în caz că datele nu au fost transmise cu succes, serverul v -a transmite un mesaj de
eroare cu codul “400”
-(void)registerUserWithFirstName:( NSString *)firsName LastName:( NSString *)lastName
userName:( NSString *)userName sex:( NSString *)gender password:( NSString *)password
email:(NSString *)email andBirthday:( NSString *)birthday
onSucces:( void(^)(NSString * response))success
ofFail:( void (^)(NSError *error,NSInteger statusCode)) failure
{ [self.requestManager setRequestSerializer :[AFJSONRequestSerializer serializer ]];
[self.requestManager setResponseSerializer :[AFJSONResponseSerializer serializer ]];
[self.requestManager .requestSerializer setValue :@"application/json"
forHTTPHeaderField :@"Content -Type"];
NSDictionary *parameters = @{ @"is_ios" :@(true),
@"password" : password,
@"username" : userName,
@"location" : @"Chisinau" ,
@"email" : email
}
[self.requestManager POST:@"oauth/register/" parameters :parameters progress :nil
success:^(NSURLSessionDataTask *task,id response)
În figura 3.6 este afișat modulul care va răspunde de înregistrarea utilizatorului.
46
Figura 3.6 – Modulul Înregistrare
3.4 Testa rea sistemului
La etapa de testare a sistemului a fost ales modulul Realitate Augmentat ă. În cadrul acestui modul sunt
incluse dispozitivul cameră și serviciul hartă. Atunci când este accesat butonul de trecer e la modulul realitate
augmenta tă, sistemul transmite o cerere de confirmare a accesului la serviciul cameră și hartă. Prima etapă
de testare a inclus verificarea funcționalităților acestui modul atunci când utilizatorul permite accesul la
localizație și dispozitivul cameră aplicației SocialTwist. După ce s -a confirm at accesul, are loc verificarea
conexiunii la internet. Sistemul dat a fost testat at ât la conexiunea cu internet cât și fără. În cazul conexiunii
la internet sunt afișate datele despre evenimentele din jurul utilizatorului și distanța acestuia pâna la ele .
Distanța de la utilizatorul aflat în mișcare pâna la eveniment se actualizeaz ă. În cazul pierderii conexiunii la
internet, datele nu se modifică. În cazul ieșirii din utilizatorului din modulul realitate augmentar ă și accesarea
din nou fără conexiune la internet, dispozitivul va afișa ultimele date extrase de pe server atunci c ând a avut
47 loc conexiunea cu internetul. La fel aceste date nu vor fi actualizate, deci distanța dintre utilizator și
evenimente poate fi er onată în cazul în care ultima conexiune a avut loc în altă regiune. La urm ătoare
conexiune, dispozitivul va actualiza localizarea utilizatorului și evenimentele ce decurg în jurul său. A doua
etapă a inclus anularea cererii de confirmare a accesului aplica ției la serviciile necesare. În acest caz
utilizatorul este notificat cu un mesaj de eroare.
48 4 Documentarea produsului realizat
La rularea aplicației utilizatoru lui îi se v -a deschide modulul l ogare (figura 4.1) unde utilizatorul va fi
nevoit sa introdu că datele sale pentru a putea accesa serviciile oferite de către aplicație. Aceste date includ
e-mailul și parola. În caz că nu a re cont, accesând butonul SignUp î i se va oferi posibilitatea de înregistrare.
În figura 4.2 este afișat modulul de înregistrar e.
Figura 4.1 – Modulul logare
La înregistrare utilizatorul v -a completa cele 7 câmpuri libere cu date personale. Aceste date vor fi
verificate de către server pentru a fi ulterior validate. În caz că datele sunt corupte utilizatorului îi se v -a
transmit e un mesaj de eroare. Mesajul de eroare v -a include câmpul care nu satis face datele introduse de
acesta .
49
Figura 4.2 – Modulul înregistrare
După logare utilizatorul este automat redirecționat că tre modulul hartă (figura 4.3 )w . Utilizatorului i
se vor of eri evenimentele ce decurg în regiunea sa, precum și oportunitatea de a crea pro priu eveniment
(figura 4.3 ) , completând câmpurile :
– titlul;
– descrierea;
– categoria evenimentului.
Stabilirea evenimentului sau poziționarea acestuia are loc conform zonei impuse de utilizator prin
accesarea și atingerea ecranului cu degetul timp de 2 secunde la poziția curentă a degetului. Eveni mentul
50 ulterior creat este tran smis către server pentru a -l înregistra. Evenimentul înregistrat va fi vizibil tuturor
beneficiarilor aplicației din regiunea dată.
Figura 4.3 – Modulul hartă /creare eveniment
Accesând butonul din mijloc, harta automat se va centra la poziția utilizatorului. Accesând butonul
camera utilizatorul v -a fi redirecționat către modulul realitate augmentară (fig ura 4.4 ). Utilizatorul va fi
nevoit să permită aplicației Social Twist să utilizeze astfel de servicii precum geolocația utilizatorului
pentru a stabili poziția sa curentă pr ecum și serviciul cameră pentru a -i putea oferi un mod de a vizualiza
evenimentele utilizând realitatea virtuală. Pentru trecerea la modulul cronologie (figura 4.5 ) utilizatorul v –
a trebui sa acceseze bara sub denumire TimeLine unde vor fi afișate toate e venimentele intr -o formă de listă
care vor include datele precum:
51 – titlul evenimentului;
– descrierea evenimentului;
– imagini atribuite descrierii evenimentului;
– categoria evenimentului;
Aceste date la fel sunt transmise către server pentru a fi înregistrate.
Figura 4.4 – Vizualizarea evenimentelor utilizând realitatea virtuală
Lista evenimentelor va fi permanent actualizată astfel încât utilizatorul să disp ună de cele mai recente
evenimente ce vor decurge în jurul său. La fel ca și pe modulul hartă utilizato rul v-a putea posta evenimente
și din modulul cronolog ie, prin accesarea casetei post , unde v -a introduce datele necesare despre eveniment.
O dată cu accesarea butonului post, utilizatorul v -a posta atât pe lista sa cât și pe hartă evenimentul la poziția
curentă a utilizatorului. Astfel evenimentul creat va putea fi vizualizat și de alți beneficiari ai aplicației
Social Twist. Aplicația propriu zisă oferă și serviciul de apreciere a evenimentului la care a participat
52 utilizatorul prin accesarea butonului Li ke sau Dislike. La fel este disponibilă și funcția de a lăsa comentarii
ceea ce permite utilizatorilor de a fi informați mai detaliate despre evenimentul creat cât și de a comunica
cu un nou grup de persoane ce au participat la evenimentul dat, funcție nec esară pentru crearea unor noi
prieteni.
Figura 4.5 – Modulul cronologie
Pentru accesarea altor module din cadrul aplicației precum ar fi modulul mesagerie, aplicația Social Twist
oferă un meniu pentru trecerea de la un modul la altul (figura 4.6). Acest meniu poate fi accesat în cornul
din stinga -sus având forma unor 3 liniuțe atașate orizontal .
53
Fig 4.6 – Meniul aplicației pentru a trece prin diferite module
Figura 4.7 – Modulul mesagerie cât și alegerea prietenului
54 La trecerea la modulul mesagerie, utilizatorului îi se va oferi lista de prieteni cu care s -a comunicat recent
cât și prietenii care sunt activi, pentru a instanția o noua comunicare. La accesarea prietenului, utilizatorul
va fi redirecționat către modulul mesagerie între 2 util izatori unde aceștia vor putea transmite mesaje unul
altuia (figura 4.7)
Accesând dialogul New Message , utilizatorul v -a putea înscrie mesajul său și cu ajutorul butonului Send
să-l transmită receptorului. Pentru a transmite un mesaj se v -a accesa butonul cameră iar pentru transmiterea
simbolurilor emoji butonul cu imaginea unui omuleț (figura 4.8 ) .
Fig 4.8 – Mesaj text și mesaj utilizând emoji
Atunci când utilizatorul v -a accesa butonul cameră, aplicația ii v -a propune 2 metode de transmiterea
pozelor, transmiterea unei noi poze utilizând camera, ori o poză deja s alvată în galerie. În figura 4.9 este
afișat procesul de transmiterea a pozei.
Figura 4.9 – Procesul de transmiterea a unei poze
55 Imaginea transmisă v -a fi inclusă într -o bulină astfel încât d imensiunea imaginii v -a fi comprimată. Pentru
a vedea imaginea conform dimensiunii sale utilizatorul v -a accesa bulina imaginii pe care dorește sa o
privească în dime nsiunile sale originilae (figura 4.10 ) .
Figura 4.10 – Mărirea dimensiunii imaginii la click
56 5 Argumentarea economică
Astfel precum obiectivele prestabilite ale aplicației Social Twist sunt conectarea oamenilor, și
integrarea acestora în viața reală, urmează ca aplicația dată să rămână non -comercială/comercială.
Utilizatorilor li se va oferi alegerea pentru crearea unui c ont obișnuit, cît și pentru crearea unui cont VIP
(persoane juridice) cărora li se vor oferi funcționalități adiționale, precum ar fi crearea unor evenimente
animate pentru atragerea atenției utilizatorilor de la restul evenimentelor afișate pe hartă sau c ameră -video.
Contul Vip va rămâne contra plată pentru obținerea unui anumit profit.
Utilizarea serviciilor de comunicare cât și orientarea în spațiu utilizând harta, înregistrarea momentelor
utilizând camera, informarea utilizatorilor de evenimentele ce s e întâmplă în jurul lor vor rămâne cele mai
solicitate servicii utilizate de către societate și oferite de către dispozitivul mobil.
Cert spus există multe aplicații care ar putea contopi aceste servicii dar nu multe din ele vor oferi servicii
de calitate pentru a satisface anumite cerințe ale utilizatorilor. Facebook -ul este la fel o rețea de socializare,
cât de populară nu ar fi utilizarea acestei , există și unele ne ajunsuri precum ar fi informarea utilizatorilor
despre evenimentele ce au loc în jurul l or în timp real. Pentru a putea fi informat de o anumită cantitate de
informații este necesar abonarea la diferite grupe, ceea ce duce la încărcarea paginii Facebook cu informații
non-necesare. Aplicația Social Twist oferă servicii de informare în timp rea l , despre evenimentele ce au
loc în jurul utilizatorilor, oferindu -le rază pentru a stabili cercul de viziune a evenimentelor, cât și filtrarea
acestora după categorii.
Produsul dat va fi accesbil pe platforma iOS, și va corespunde conform standartelor stabilite de către
compania Apple și va corespunde cerințelor pieței. Obiectivele principale fiind informarea utilizatorilor,
cât și intorducerea unei tehnologii noi numite realitate augmentara pentru a trezi un anumit stimul și interes
din partea utilizat orilor.
5.1 Studiul pieții
Sunt o mulțime de aplicații care împărtășesc aceleași funcționalități ca și aplicația social Twist în schimb
nu multe din ele sunt optimizate astfel încât să nu supra -încarce utilizatorul cu informații non -necesare.
Funcționalit ățile ce diferă față de alte aplicații sunt :
– accesarea evenimentelor după categorii și rază;
– accesarea evenimentelor utilizând camera -video;
– oferirea a 3 moduri de vizualizare a evenimentelor;
– adăugarea în prieteni;
– custo mizare a evenimentelor;
– vizualizarea utilizatorilor activi;
57 – aprecierea evenimentelor;
– crearea contului obișnuit și VIP;
– restabilirea datelor după ștergerea aplicației.
Social Twist este o aplica ție gratuit ă care prevede a fi utilizată de circa 1.000.000 de utilizatori
lunar.
5.2 Planul calendaristic
Particularitățile pe care un sistem trebuie să le conțină :
– oferirea serviciilor de informarea a utilizatorilor;
– asigurarea accesului evenimente ce decurg în jurul utilizatorilor;
– organizarea, gestionarea evenimentelor;
– oferirea a 3 moduri de vizualizare a evenimentelor;
– stocarea cât și includerea în modulul acitivități a evenimentelor create de utilizator .
În tabela 5.1 este descris detaliat timpul petrecu t de la începutul analizei domeniului de stiudu al
aplicației Social Twist până la realizarea sistemului, testarea acestuia la erori și optimizarea pentru a spori
rapiditatea sistemului. Aici se includ perioada de începere și finisare precum și durata zile i care este estimată
la 142 zile, executantul care a efectuat sarcinilie și software -ul utilizat, și sarcinile efectuat e de acesta. La
fel sunt descrise resursele utilizate în elaborarea aplicației SocialTwist și executantul care a participat la
elaborarea proiectului propriu -zis.
Tabel 5.1 Timpul necesar pentru elaborarea sarcinilor
Nr Denumirea sarcinilor Perioada Durata,
zile Executant Resurse utilizate
Început Sfârșit
1 Stabilirea temei și
scopurilor aplicației 24.10.16 28.10.16 5 Programator Internet,
Microsoft Word
2 Analiza domeniului
de studiu și
compararea
sistemului cu alte
sisteme ce dețin
funcționalități
asemănătoare 1.11.16 4.11.16 5
Programator Internet,
Microsoft Word
7.11.16 10.11.16 4
3
Proiectarea și
modelarea
sistemului 14.11.16 18.11.16 5
Programator Internet
Enterprise
Archiect 21.11.16 25.11.16 5
28.11.16 30.11.16 3
58 Continuarea tabelul 5.1
4
Realizarea
funcționalitățior
sistemului la nivel
local 1.12.16 2.12.16 1
Programator
Xcode
5.12.16 9.12.16 5
12.12.16 16.12.16 5
19.12.16 23.12.16 5
26.12.16 29.12.16 5
3.1.17 7.1.17 5
9.1.17 13.1.17 5
16.1.17 20.1.17 5
23.1.17 27.1.17 5
5
Realizarea
funcționalităților
sistemului la nivel
de rețea 1.2.17 3.2.17 5
Programator Xcode 6.2.17 10.2.17 5
13.2.17 17.2.17 5
20.2.17 24.2.17 5
27.2.17 3.3.17 5
6.3.17 10.3.17 5
13.3.17 17.3.17 5
20.3.17 24.3.17 5
27.3.17 31.3.17 5
6
Testarea sistemului 3.4.17 7.4.17 5
Programator Xcode 10.4.17 14.4.17 5
17.4.17 21.4.17 5
7
Optimizarea
sistemului 24.4.17 28.4.17 5
Programator Xcode 2.5.17 5.5.17 4
8.5.17 12.5.17 5
8
Total 142
59 5.3 Analiza Swot
Analiza Swot este utilizată pentru a identifica punctele forte și slabe ale aplicației Social Twist pentru
depășirea ulterioară a diferitor dificultăți în cadrul elaborării și realizării sistemului. În tabelul 5.2 este
realizată diagrama Swot a aplicației Social Twist.
Tabelul 5.2 – Descrierea diagramei Swot în cadrul aplicației Social Twist
Mediul Intern
Puncte forte :
– personalizare totală;
– ușurință în navigare;
– flexibilitate la apariția unor
modificări;
– acces ușor la evenimente;
– diferite modalități de vizualizare a
evenimentelor.
Puncte slabe :
– securitate scăzută;
– necesită resurse internet;
– funcționalitate de crearea drumului
depinde de regiune;
– necesitatea sistemului de operare iOS 9 ș i
mai sus;
– lipsa comunicării în grup.
Mediul Extern
Oportunități :
– oportunitatea utilizatorului de a
participa la optimizarea, și
dezvoltarea continuă a aplicației;
– viteză de încărcare;
– dezvoltarea ramurii iOS;
– oferirea unui mediu de promovare a
produselor.
– dezvoltarea tehnologiei realitate
augmentată. Riscuri :
– concurență (Facebook,Vkontakte,Twitter);
– resurse financiare insuficiente pentru
menținerea aplicației;
– recenzie rea din partea anumitor utilizatori,
companii;
– politic ă guvernamentală precu m ar fi
interzicerea efectuării anumitor activități.
5.4 Calculul indicatorilor economici
În acest subcapitol sunt calculate toate cheltuielele și stabilită suma necesară pentru dezvoltarea,
lansarea și menținerea aplicației până la momentul atingerii pragului de rentabilitate [10].
Toate calculele sunt efectuate în valuta națională (MDL).
Inițial se vor efectua calculele calculele investițiilor în active materiale cu o durată mai mare de un
an și nemateriale ce nu dețin formă dar sunt utilizate și contr olate de înterprindere. În tabelul 5.3 sunt
descrise activele materiale utilizate în timpul dezvoltării proiectului și costurile acestora care au atins
valoarea de 44849 lei.
60 Tabel 5.3 – Descrierea activelor materiale și costurilor acestora
Active material e pe termen lung
Nr. Denumirea/ tipul activului Un.de măs. Preț achiziție
/unitate, MDL Cantitatea Valoarea de
intrare, MDL
1. Macbook Pro 2014 – mid Unitate 35000 1 35000
2. iPhone 5 Unitate 6700 1 6700
3. Mouse Unitate 299 1 299
4. Scaun Unitate 1200 1 1200
5. Masă Unitate 1500 1 1500
6. cablul USB pentru conectare Unitate 150 1 150
Total 44849
În tabelul 5.4 sunt descrise activele nemateriale utilizate în cadrul dezvoltării aplicației care au atins
costul de 4083 lei.
Tabel 5.4 – Descrierea activelor nemateriale și costurilor acestora
Active nemateriale pe termen lung
Nr. Denumirea/ tipul activului Un.de măs. Preț achiziție
/unitate, MDL Cantitatea Valoarea de
intrare, MDL
1. Microsoft Office Unitate 1500 1 1500
2. Enterprise Architect Unitate 2583 1 2583
3. Xcode IDE Unitate – 1 0
4. Cocoapods Unitate – 1 0
5. Sistem de operare OS Unitate – 1 0
Total 4083
În tabelul 5.5 sunt repezentate c onsumuri materiale directe , costul materialelor consumabile utilizate
în proc esul de elaborare a proiectului. Aici au fost incluse astfel de obiecte precum pix, hârtie, imprinată,
unitatea de măsură a acestora, cantitatea și prețul achiziției pe unitate.
61 Tabel 5.5 – Consumuri directe de materiale
În tabelul 5.6 sunt descrise consumurile directe privind retribuirea muncii, care sunt formate din
consumurile aferente ale personalului încadrat la elaborarea proiectului. Salariile sunt stabilite conform
planului ca lendaristic și orelor lucrate [11 ].
Tabel 5.6 – Consumuri privind retribuirea muncii
Conform tabelului 5.6 fondul de salarizare a constituit 45900 lei. Ulterior vom calcula fondul social în
baza fondului de retribuirea a muncii (FRM) și cota contribuțiilor de asigurări sociale de stat obligatorii
23% (Cfs ), asigurare medicală în baza fondu lui de retribuire și cotei de asigurare obligatorie de asistență
medicală ( Cam), fondul de pensionare în baza fondului de retribuire și cotei fondului de pensionare (C fp).
Fondul social
FAS conducător ul proiect = FRM × Cfs(%) = 17500 × 23% = 4025 lei
FAS inginer programator = FRM × Cfs(%) = 28400 × 23% = 6532 lei
FAS total = 45900 lei 𝑥 23% = 10557 lei
Asigurarea medicală obligatorie
FAM conducător ul proiect = FRM 𝑥 Cam(%) = 17500 × 4,5% =752,50 lei
FAM inginer programator = FRM 𝑥 Cam(%) = 28400 × 4,5% = 1278 lei
FAM total = 752,50 + 1278 = 2030,50 lei
Consumuri directe de materiale
Nr. Denumirea activului Un. de măs. Preț achiziție
pe unitate,
MDL Cantitate Valoarea de intrare,
MDL
1. Pix Unitate 3 4 12
2. Hârtie A4 Unitate 0.50 150 75
3. Imprimantă Unitate 0.50 150 75
Total 162
Nr. Funcția angajatorului
conducătorul proiectului Volumul de lucru,
zile Salariu contractual pe
unitate de timp, MDL/zi FRM, lei
1. conducătorul proiectului 70 250 17500
2. programator 142 200 28400
Total 45900
62 Fondul de pensionare
FPconducător ul proiect = FRM × 6% = 17500 × 6% = 1050 lei
FPinginer programator = FRM × 6% = 28400 × 6% = 1704 lei
Pentru calcularea impozitului pe venit, sau a venitului net al unui programator vom stabili o perioada
de 12 luni și cotele procentuale :
– venituri anuale p înă la 31140 lei – se aplic ă cota de impozitare 7%;
– venituri anuale mai mari de 31140 lei – se aplic ă cota de impozitare 18%;
– fondul de pensionare – 6% d in venit;
– fondul de asigurare medical ă – 4,5% din venit;
– fiecare contribuabil (persoan ă fizică rezident ă) are dreptul la o scutire personal ă în sum ă de 10620
lei pe an;
– contribuabilul (persoan ă fizică rezident ă) are dreptul la o scutire în sum ă de 2340 lei anual pentru
fiecare persoan ă întreținută;
– suma scutirii personale majore – 15840 lei anual.
Salariul brut al inginerului programator pe perioada de 12 luni a câte 22 zile pe lună lucrate, este de
52800 lei.
Noțiuni utilizate pentru calcu lul venitului impozabil sunt :
– VI – venitul impozabil;
– VB – venitul brut;
– FP – fondul de pensionare (asigur ări sociale);
– FAM – fondul de asigurare medical ă;
– SP – scutirea personal ă;
– SiP – scutirea pentru persoana întreținută;
– SM – scutirea personal ă major ă;
– IV – impozitul pe venit.
– I – cota de impozitare
Fondul de pensii = VB × 6%= 3168 lei.
Fondul de asigurare medic ală = VB × 4.5% = 2376 lei.
Venitul impozabil = VB – FP – FAM – SP = 52800 – 3168 – 2376 – 10620 = 36636 lei.
Impozitul pe venit = VI – I = 31140 × 7% + ( 36636 – 31140) × 18% = 3190 lei.
Venitul net: VB – IV – FP – FAM = 52800 – 3190 – 3168 – 2376 = 44066 lei.
În cadrul dezvoltării proiectului au fost utilizate și consumuri indirecte, aceste incluzând energie
electrică, serviciu l internet ș.a.m.d. În tabelul 5.7 sunt descrise costurile privind consumurile indirecte.
63 Tabel 5.7 – Consumuri indirecte
Partea important ă a cheltuielilor indirecte constituie calcularea fondului de uzur ă/amortizare. Uzura
mijloacelor fixe reprezint ă repartizarea sistematic ă a valorii uzurabile a mijloacelor fixe pe parcursul duratei
de func ționare util ă [12].
Formula de calcul a fondului de amortizare este FA = MF i : DFU × T1 (1)
unde :
– FA este fondul de amortizare calculat în lei;
– Mf i este valoare de intrare;
– T1 este durata proiectu lui;
– DFU este durata de funcționare utilă.
Pentru calculul uzurii mijloacelor fixe au fost utilizate activele materiale :
– UmacBookPRO = 35000 : 60 × 5 = 2916,6 lei;
– UiPhone5s = 6500 : 60 × 5 = 541,6 lei;
– Uscaun = 1200 : 60 × 5 = 100 lei;
– Umasă = 1500 :60 × 5 = 125 lei;
Uzura totală reprezintă suma uzurilor pentru fiecare activ material.
Utotal = 2916,6 + 541,6 + 100 + 125 =3683,2 lei.
Fondul de amortizare este calculat conform fomulei (1) :
– FA mouse = 299 : 12 × 5 = 124.58 lei ;
– FA cabluUSB = 150 : 12 × 5 = 62,5 lei.
Fondul de amortizare total reprezintă suma fondurilor pentru fiecare activ material.
FA total = 124,58 + 62,5 = 187,08 lei.
Costul de produc ție reprezint ă totalitatea cheltuielilor corespunz ătoare consumului de fact ori de
produc ție, pe care agen ții economici le efectueaz ă pentru produ cerea și vînzarea de bunuri materiale sau
prestarea de servicii. Pre țul de cost se calculeaz ă pe o unitate. În tabelul 5.8 sunt descrise costurile de
producție și ponderea acestor a [12 ].
Denumirea
articolului Unitate de măsură Tarif / Unitate,
lei Cantitatea
necesară Valoarea totala,
MDL
Energia
electrică KW 1,92 450 864
Servicii
Internet Abonament/ lună 175 5 875
Total 1739
64 Tabel 5.8 – Costurile de producție
Articole de calculație Valoarea,
lei Ponderea,
%
Consumuri directe de materiale 162 0.25
Consumuri directe privind retribuirea, municii 45900 71.42
Contribuții de asigurări sociale de stat obligatorii (FAS) 10557 16.3
Prima de asigurare obligatorie de asistență medicală (FAM) 2030 ,50 3.15
Consumuri indirecte 1739 2.70
Uzura mijloacelor fixe (AMTL) 3683,2 5.73
Amortizarea activelor nemateriale pe termen lung 187,08 0.29
Total 64258,78 100
5.5 Calculul indicatorilor economico -financiari
Avînd la dispozi ție pre țul de cost al unei copii de produs, iar prin copii de produs se subântelege prețul
unui cont VIP, se poate determina pre țul de realizare p e pia ță a produsului elaborat. Se utilizeaz ă metoda
“up –down” pentru cal cularea prețului de realizare [10].
𝑃𝑟𝑧=𝑃𝑙𝑣+𝑇𝑉𝐴 (2)
Unde :
– 𝑃𝑟𝑧 – prețul de realizare;
– 𝑃𝑙𝑣 – prețul de livrare;
– TVA – taxa pe valoarea adăugată de 20 %.
Conform formulei (2 ) pre țul de realizare este 240 lei.
𝑃𝑟𝑧 = 200 +40 = 240 lei.
După ce s -a calculat 𝑃𝑟𝑧 , se stabilește venitul brut din vinzări conform formulei (2).
𝑉𝑉𝐵 =𝑞×𝑃𝑟𝑧 (3)
Unde q este numărul de copii planificate spre vânzare .
Deci conform formulei (3 ) 𝑉𝑉𝐵 = 240 × 100.000 = 24000000 𝑙𝑒𝑖.
Profitul brut se calculează după formula (4 )
𝑃𝑏=𝑉𝑉𝑁 −𝐶𝑇 (4)
Unde:
– 𝑉𝑉𝑁 – suma netă a venitului din vânzări fără TVA;
– CT – costul t otal de realizare a proiectului.
Deci 𝑃𝑏= 200 × 100.000 – 64258 .78 = 19935741.2 lei (conform formulei (4)).
Profitul net se cal culează prin deducerea taxelor și impozitelor în vigoare din sum a impozabilă
conform formulei (5 )
𝑃𝑛=𝑃𝑏−𝐼𝑣 (5)
Unde 𝐼𝑣 este impozitul pe venit conform legislației în vigoare de 15%.
𝑃𝑛 = 19935741,2 –2990361,18 = 16945380, 02lei (conform formulei (5)).
65 În final se calculează rentabilitatea proiectului:
𝑅= (𝑃𝑛:𝐶𝑇) × 100% = (16945380,02 : 64258,78 ) × 100 = 263.7%
5.7 Matricea BCG
Matricea BCG [13] este concepută pentru pentru a ajuta la planificarea strategică pe termen lung, pentru
a ajuta o afacere să ia în considerare oportunitățile de creștere prin revizuirea portofoliului de produse ,
pentru a decide unde să investească, să întrerupă sau să dezvolte produse . Gruparea activităților are loc
conform a 2 criterii :
– rata de crestere a pietei (produsului);
– cota relativă de piață.
În figura 5.1 este descris scheletul diagramei BCG.
Figura 5.1 – Scheletul diagramei BCG
Produsele aflate în cadranul “Dileme” sunt produse care acționează pe o piață aflată în
creștere rapidă dar sunt in fază de lansare, ceea ce duce la concluzia că necesită investiții când înca nu se
știe dacă produsul va avea un succes sau nu.
„Vedetele” reprezintă produse ce acționează pe o piață aflată în creștere rapidă, ele deținând
poziția de lider ceea ce contribuie la creșterea cifrei de afacere a intreprinderii ce nu semnifică altceva
decât obținerae unui profit, precum și la îmbunătățirea imaginii acesteia.
“Vacile de muls” reprezintă produse care ocupă o poziție de lider pe o piață aflată într -o creștere lentă
sau chiar in declin. Aceste produse sunt valori certe ale întreprinderii care aduc profituri și investesc în
finanțarea celorlalte produse situate în alte cadrane.
“Pietrele de moara” sun t produse aflate pe o piata în creștere lentă, stagnare sau declin si care nu
reusesc să dețină poziția de lider
În figura 5.2 este descris diagrama BCG a serviciilor oferite de aplicația Social Twist în dependență de
concurenții săi.
66
Figura 5.2 – Diagra ma BCG a serviciilor aplicației Social Twist
Din matricea figurii 5.2 se observă :
– serviciul notificare eveniment sunt produse ce dețin o poziția înaltă chiar și lider pe piața de desfacere
într-o creștere medie cauză fiind satisfacerea înaltă a necesităților utilizatorului și investiții
permanente;
– serviciul realitate augmentată deține o poziție de lider într -o creștere rapidă din cauză că reprezintă
o tehnologie nouă;
– serviciul promovare a produselor deține o poziție slabă pe piața de desfacere cauza fiind concurența
înaltă.
67 Concluzii
Elaborînd această lucrare au fost analizate și studiate tehnici de elaborare a unui proiect . Aceasta a
inclus, analiza domeniului, analiza tuturor cerințelor pentru elaborarea acestui proiect. Au fost studiate mai
detaliat multe aspecte ale programării orientate pe obiect cât și elaborarea anumitor strategii pentru
întelegerea mai bună a structurii aplicației și optimizarea acesteia. A fost integrat în proiect un termen nou
cunoscut sub numele de realitate virtuală. Au fost studiate părțile componente ale acesteia, și al
dispozitivilui mobil pentru crearea și combinarea funcționalităților pentru o cooperare mai bună. Au fost
analizate termeni geografici precum ar fi algoritmul lui Azimuth, pentr u stabilirea coordonatelor geografice
a evenimentelor și implementarea acestora pe cameră.
Elaborând partea economică a aplicației Social Twist au fost studiate noțiuni ca active materiale,
nemateriale, fondul de amortizare a produselor utilizate în dezvo ltarea aplicației. Au fost determinate
veniturile brute și nete a salariaților precum și profitul pe care îl v -a deține înterprinderea în baza aplicației
dezvoltate. Au fost efectuate analize conform matricei Swot și BCG asupra aplicației SocialTwist unde s-
au stabilit punctele forte și cele slabe precum și oportunitățile de creștere pe piața de desfacere.
Au fost întilnite și anumite dificultăți precum ar fi transmiterea datelor pe server . Unele date aveau
nevoie de serializare json, altele nu, ce impunea anumite dificultăți la nivel de întelegere a cauzei mesajelor
de eroare din partea serverului.
Echipa a dispus de un repozitoriu Git privat unde fiecare membru din echipă își realiza sarcinile sale și
le combina cu celelalte, fapt ce a dezvoltat astfel de capacități ca lucrul în echipă .
În cazul dat, aplicația SocialTwist este un utilă sistem informațional util pe platforma iOS care va oferi
utilizatorilor o comunicare virtuală orientată pe integrarea acestora în viața reală.
68 Bibliografie
1 Sistemul de operare Ios. [Resursa electronică ]. – Regim de acces :
https://www.apple.com/ro/ios/ios -10/
2 Xcode. [Resursa electronică]. – Regim de acces: https://developer.apple.com/xcode/
3 Diagrame UML. [Resursa electronică]. – Regim de acces:
http://web space.ulbsibiu.ro/sorin.negulescu/media/curs_is/uml.pdf
4 Analiza datelor expuse pe internet. [Resursă electronică]. – Regim de acces:
http://www.9am.ro/top/business/it -c/238963/cat -de-uriasa -a-devenit -reteaua -facebook/4/350 -de-
milioane -de-poze -in-fiecare -zi.html
5 Facebook. [Resursa electronică]. – Regim de acces: http://www.factslides.com/s -Facebook
6 Wingit. [Resursa electronică]. – Regim de acces: https://wingit.business
7 Eventbrite. [Resursa electronică]. – Regim de acces: https://www.eventbrite.com
8 Augmentatea Reală . [Resursa electronică]. – Regim de acces:
http://www.vtt.fi/inf/pdf/science/2012/S3.pdf
9 Formula Azimuth. [Resursa electronică]. – Regim de acces:
http://sciencing.com/calculate -azimuth -5522209.html
10 Indicații metodice partea economică. [Resursa electronic ă]. – Regim de acces:
https://moodle.ati.utm.md/mod/folder/view.php?id=2122
11. Salarizarea angaja ților. [Resursa electronic ă]. – Regim de acces:
http://monitorul.md
12. Consumuri indirecte, directe.[Indicatii metodice]. – Regim de acces: Dodu A,Gumeniuc I. Mana –
gementul întreprinderii. UTM, 2015.
13 Exemplu matrice BCG. [Resura electronica] – Regim de acces:
https://webcache.googleusercontent.com/search?q=cache:FczCBNfTns4J: https://ro -static.z –
dn.net/files/d38/a8c3e47eb0b118ada273b2b53516833c.doc+&cd=6&hl=ru&ct=clnk&client=safari
69 Anexa A
Codul Sursă
#import "RequestManager.h"
#import <AFNetworking.h>
#import "AuthToken.h"
@interface RequestMana ger()
@property (nonatomic,strong) AFHTTPSessionManager *requestManager;
@end
@implementation RequestManager
{
NSMutableArray* messagesArray;
}
+(RequestManager *)sharedManager
{
static RequestManager * manager =nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[RequestManager alloc]init];
);
return manager;
}
– (instancetype)init
{
self = [super init];
if (self) {
NSURL *url = [NSURL URLWithString:@" http://35.187.72.36/"];
self.requestManager = [[AFHTTPSessionManager alloc] initWithBaseURL:url];
}
return self;
}
-(void) loginWithEmail :(NSString *)email
username:(NSString *)username
password:(NSString *)password onSucce s:(void(^)(NSString *response)) success
onFail:(void(^)(NSError * error,NSInteger statusCode)) failure
{
// if ([[NSUserDefaults standardUserDefaults] stringForKey:@"token"] <= 0) {
//
70
[self.requestManager setRequestSeriali zer:[AFJSONRequestSerializer serializer]];
[self.requestManager setResponseSerializer:[AFJSONResponseSerializer serializer]];
NSDictionary* authParameters = @{@"grant_type": @"password",
@"username" : username,
@"password" : password,
@"client_id":
@"TMZfVOHHMoBC0lBniwXpa6htljw0v5topwdBcimi"
};
[self.requestManager POST:@"oauth/token/"
parameters:authParameters
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable
responseObj ect) {
NSLog(@"Response object %@", responseObject);
[AuthToken sharedToken].token = [NSString stringWithFormat:@"Bearer
%@", responseObject[@"access_token "]];
NSLog(@"Token %@", [AuthToken sharedToken].token);
[[NSUserDefaults standardUserDefaults] setObject:[AuthToken
sharedToken].token forKey:@"token"];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull
error) {
NSLog(@"%@", error);
}];
// }
// else {
// NSLog(@"user defaults %@ ", [[NSUserDefaults standardUserDefaults]
stringForKey:@"token"]);
// [self.requestManager.requestSerializer setValue:[[NSUserDefaults
standardUserDefaults] stringForKey:@"token"] forHTTPHeaderField:@"Authorization"];
//
71 // }
}
-(void)logout
{
-(void)registerUserWithFirstName:(NSString *)firsName LastName:(NSString *)lastName
userName:(NSString *)userName sex:(NSString *)gender password:(NSString *)password
email:(NSString *)email andBirthday:(NSString *)birthday onSucces:(void(^ )(NSString *
response))success ofFail:(void (^)(NSError *error,NSInteger statusCode)) failure
{
[self.requestManager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[self.requestManager setResponseSerializer:[AFJSONResponseSerializer se rializer]];
[self.requestManager.requestSerializer setValue:@"application/json"
forHTTPHeaderField:@"Content -Type"];
NSLog(@"%@ %@ %@ %@ %@ %@ ,%@",firsName,lastName,password,email,gender,birthday, userName);
NSDictionary *parameters = @{ @"is_ios" :@(true),
@"password": password,
@"username": userName,
@"location": @"Chisinau",
@"email": email
};
NSLog(@"%@",parameters);
[self.requestManager POST:@"oauth/register/" parameters:parameters progress:nil
success:^(NSURLSessionDataTask *task,id response)
{
if(success)
{
success(response);
}
}failure:^(NSURLSessionDataTask *task, NSError *error)
{ NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response;
NSLog(@"Error: %@", error);
NSLog(@"Error = %@", error);
NSString* errResponse = [[NSString alloc] initWithData:(NSData
*)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]
encoding:NSUTF8StringEncoding];
NSLog(@"%@",errResponse);
if(failure)
{
failure(error,httpResponse.statusCode);
}
72
-(void)sendMessage:(NSString *)message andId:(NSString *)userId
{
NSDictionary *parameters = @{ @"text":message,
@"seen": @(false)
};
[self.requestManager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[self.requestManager setResponseSerializer:[AFJSONResponseSerializer serializer]];
[self.requestManager.requestSerializer setValue:[AuthToken sharedToken].token
forHTTPHeaderField:@"Authorization"];
[self.requestManager POST:[NSString stringWithFormat:@"messages/%@/send/",userId]
parameters:parameters progress:nil
success:^(NSURLSessionTask *task, id responseObject)
{
NSLog(@"JSON: %@", r esponseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
NSLog(@"Error = %@", error);
NSString* errResponse = [[NSString alloc] initWithData:(NSData
*)error.userInfo[AF NetworkingOperationFailingURLResponseDataErrorKey]
encoding:NSUTF8StringEncoding];
NSLog(@"%@",errResponse);
}
];
}
-(void)getMessagefromID:(NSString *)userId onSucces:(void(^)(NSDictionary *response)) success
onFail:(void(^)(NSError * error,NSInteger statusCode)) failure
{
[self.requestManager.requestSerializer setValue:[AuthToken sharedToken].token
forHTTPHeaderField:@"Authorization"];
[self.requestManager GET:[NSString stringWithFormat:@"messages/%@/",use rId] parameters:nil
progress:nil
success:^(NSURLSessionTask *task, id responseObject)
{
if([messagesArray count] == [responseObject count])
NSLog(@"RESPONSE OBJECT %@",responseObject);
NSLog(@"message array co unt %lu",(unsigned long)[messagesArray count]);
if ([messagesArray count]==0)
73 {
messagesArray = [responseObject mutableCopy];
for( long i=[messagesArray count] -1; i>=0; i –)
{
NSDictionary *messageDictionary =[[NSDictionary alloc]init];
messageDictionary = [messagesArray objectAtIndex:i];
success(messageDictionary);
}
}
else{
if (!([messagesArray count] == [responseObject count])) {
NSInteger count = [messagesArray count];
[messagesArray = responseObject mutableCopy];
NSInteger count2 = [messagesArray count] – count;
for (int i=(int)count2 -1; i>=0; i –)
{
NSLog(@"i ESTE %d",i);
NSDictionary *messageDictionary = [messagesArray objectAtIndex:i];
if (![[[messageDictionary objec tForKey:@"sender_id"]stringValue]
isEqualToString:@"24"]) {
success(messageDictionary);
NSLog(@"dics %@",messageDictionary);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
NSLog(@"Error = %@", error);
NSString* errResponse = [[NSString alloc] initWithData:(NSData
*)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]
encoding:NSUTF8StringEncoding];
NSLog(@"%@",errResponse);
}
]
}
@end
#import "DemoMessageViewController.h"
#import "JSQMessage.h"
#import <JSQMessagesBubbleImageFactory.h>
#import "RequestManager.h"
#import "FriendsViewController.h"
74
@interface DemoMessageViewController ()
@property (strong, nonatomic) dispatch_source_t timer;
@end
@implementation DemoMessageViewController
– (void)viewDidLoad {
[super viewDidLoad];
// self.title = [NSString stringWithFormat:@"%@",self.name];
self.navigationItem.title =@"Vadim";
self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:(155/255.0)
green:(186/255.0) blue:(205/255.0) alpha:1];
CGRect frame = CGRectMake(0, 0, 400, 44);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.backgroundCol or = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:13.0];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.numberOfLines =0;
label.text = [NSString stringWithFormat:@"chat with \n%@",self.name];
self.navigationItem.titleView = label;
self.inputToolbar.contentView.textView.pasteDelegate = self;
self.demoData = [[DemoModel alloc] init]
kJSQDemoAvatarDisplayNameCook = self.name;
kJSQDemoAvatarIdCook = self.userID ;
NSLog(@"Name is %@",self.demoData.name);
[self.inputToolbar.contentView.textView setAutocorrectionType:UITextAutocorrectionTypeNo];
erMessagesHeader = YES;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage
jsq_defaultTypingIndicatorImage]
style:UIBarButtonItemStylePlai
target:sel
action:@selector(receiveMessagePressed:)];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] init WithTitle:@"Back"
style:UIBarButtonItemStylePlain target:self action:@selector(getBackToFriendsTableView)];
[self startTimer];
NSLog(@"Timer starts");
75 -(void)getBackToFriendsTableView
{
pushViewController:vc animated:YES];
[self.navigationController p opViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:nil];
dispatch_suspend(_timer);
NSLog(@"Timer stops")
[super viewWillDisappear:YES];
– (void)startTimer
{
if (!self.timer) {
self.timer = dispatc h_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
dispatch_get_main_queue());
}
if (self.timer) {
dispatch_source_set_timer(self.timer, dispatch_walltime(NULL, 0), 3ull*NSEC_PER_SEC,
10ull*NSEC_PER_SEC);
dispatch_source_set_event_ha ndler(_timer, ^(void) {
[self tick];
});
dispatch_resume(_timer);
}
}
– (void)tick
{
[self receiveMessagePressed:nil];
}
– (void)didPressSendButton:(UIButton *)button
withMessageText:(NSString *)text
senderId:(NSString *)senderId
senderDisplayName:(NSString *)senderDisplayName
date:(NSDate *)date
{
[[RequestManager sharedManager]sendMessage:text andId:@"23"];
JSQMessage *message = [[JSQMessage al loc] initWithSenderId:senderId
senderDisplayName:senderDisplayName
date:date
text:text];
76
[self.demoData.messages addObject:message];
[self finishSendingMessageAnimated:YES];
}
-(void)receiveMessagePressed:(UIBarButtonItem *)sender
{
[self scrollToBottomAnimated:YES];
[[RequestManager sharedManager]getMessagefromID:self.userID onSucces:^(NSDictionary
*messageDictionaries)
{
NSLog(@"sender id is %@",[messageDictionaries valueForKey:@"sender_id"]);
if([[[messageDictionaries valueForKey:@"sender_id" ]stringValue]
isEqualToString:kJSQDemoAvatarIdSquires])
{
JSQMessage *copyMessage = [JSQMessage messageWithSenderId:kJSQDemoAvatarIdSquires
displayName:kJSQDemoAvatarDisplayNameCook text:[messageDictionaries valueForKey:@"text"]];
else
{
JSQMessage *copyMessage = [JSQMessage messag eWithSenderId:kJSQDemoAvatarIdCook
displayName:kJSQDemoAvatarDisplayNameCook text:[messageDictionaries valueForKey:@"text"]];
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 *
NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {
[self.demoData.messages addObject:copyMessage];
[self finishReceivingMessageAnimated:YES];
} });
}onFail:^(NSError *error ,NSInteger statusCode)
{
NSLog(@"Error is %@ , and Status is % ld",[error
localizedDescription],(long)statusCode);
}];
}
#pragma mark – JSQMessages CollectionView DataSource
– (NSString *)senderId {
return kJSQDemoAvatarIdSquires;
}
– (NSString *)senderDisplayName {
return kJSQDemoAvatarDisplayNameSquires ;
}
77
– (id<JSQMessageData>)collectionView:(JSQMessagesCollectionView *)collectionView
messageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
return [self.demoData.messages objectAtIndex:indexPath.item];
}
– (void)collectionView:(JSQMessagesCollectionView *)collectionView
didDeleteMessageAtIndexPath:(NSIndexPath *)indexPath
{
[self.demoData.messages removeObjectAtIndex:indexPath.item];
– (id<JSQMessageBubbleImageDataSource>)collectionView:(JSQMessagesColl ectionView
*)collectionView messageBubbleImageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessage *message = [self.demoData.messages objectAtIndex:indexPath.item];
if ([message.senderId isEqualToString:self.senderId]) {
return self.demoData.outgoingBubbleImageData;
}
return self.demoData.incomingBubbleImageData;
}
-(id<JSQMessageAvatarImageDataSource>)collectionView:(JSQMessagesCollectionView
*)collectionView avatarImageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessage *message = [self.demoData.messages objectAtIndex:indexPath.item];
return [self.demoData.avatars objectForKey:message.senderId];
}
– (NSAttributedString *)collectionView:(JSQMessagesCollectionView *)collectionView
attributedTextForCellTopLabelA tIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.item % 3 == 0) {
JSQMessage *message = [self.demoData.messages objectAtIndex:indexPath.item];
return [[JSQMessagesTimestampFormatter sharedFormatter]
attributedTimestampForDate:message .date];
}
return nil;
}
– (NSAttributedString *)collectionView:(JSQMessagesCollectionView *)collectionView
attributedTextForMessageBubbleTopLabelAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessage *message = [self.demoData.messages objectAtIndex:indexPath.item];
78 if ([message.senderId isEqualToString:self.senderId]) {
return nil;
}
if (indexPath.item – 1 > 0) {
JSQMessage *previousMessage = [self.demoData.messag es objectAtIndex:indexPath.item –
1];
if ([[previousMessage senderId] isEqualToString:message.senderId]) {
return nil;
}
}
return [[NSAttributedString alloc] initWithString:message.senderDisplayName];
}
– (NSAttributedStrin g *)collectionView:(JSQMessagesCollectionView *)collectionView
attributedTextForCellBottomLabelAtIndexPath:(NSIndexPath *)indexPath
{
return nil;
}
#pragma mark – UICollectionView DataSource
– (NSInteger)collectionView:(UICollectionView *)collectionVie w
numberOfItemsInSection:(NSInteger)section
{
return [self.demoData.messages count];
}
– (UICollectionViewCell *)collectionView:(JSQMessagesCollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell *)[super
collectionView:collectionView cellForItemAtIndexPath:indexPath];
JSQMessage *msg = [self.demoData.messages objectAtIndex:indexPath.item];
if (!msg.isMediaMessage) {
if ([msg.send erId isEqualToString:self.senderId]) {
cell.textView.textColor = [UIColor blackColor];
}
else {
cell.textView.textColor = [UIColor whiteColor];
}
79 cell.textView.linkTextAttributes = @{ NSForeg roundColorAttributeName :
cell.textView.textColor,
NSUnderlineStyleAttributeName :
@(NSUnderlineStyleSingle | NSUnderlinePatternSolid) };
}
return cell;
}
#pragma mark – JSQMessages collection view flow lay out delegate
#pragma mark – Adjusting cell label heights
– (CGFloat)collectionView:(JSQMessagesCollectionView *)collectionView
layout:(JSQMessagesCollectionViewFlowLayout *)collectionViewLayout
heightForCellTopLabelAtIndexPath:(NSIndex Path *)indexPath
{
if (indexPath.item % 3 == 0) {
return kJSQMessagesCollectionViewCellLabelHeightDefault;
}
return 0.0f;
}
– (CGFloat)collectionView:(JSQMessagesCollectionView *)collectionView
layout:(JSQMessagesCollectionViewFlowLayout *)collectionViewLayout
heightForMessageBubbleTopLabelAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessage *currentMessage = [self.demoData.messages objectAtIndex:indexPath.item];
if ([[cur rentMessage senderId] isEqualToString:self.senderId]) {
return 0.0f;
}
if (indexPath.item – 1 > 0) {
JSQMessage *previousMessage = [self.demoData.messages objectAtIndex:indexPath.item –
1];
if ([[previousMessage senderId] isEqua lToString:[currentMessage senderId]]) {
return 0.0f;
}
}
return kJSQMessagesCollectionViewCellLabelHeightDefault;
}
– (CGFloat)collectionView:(JSQMessagesCollectionView *)collectionView
layout:(JSQMessagesCollecti onViewFlowLayout *)collectionViewLayout
heightForCellBottomLabelAtIndexPath:(NSIndexPath *)indexPath
{
80 return 0.0f;
}
#pragma mark – Responding to collection view tap events
– (void)collectionView:(JSQMessagesCollectionView *)collectionView
header:(JSQMessagesLoadEarlierHeaderView *)headerView
didTapLoadEarlierMessagesButton:(UIButton *)sender
{
NSLog(@"Load earlier messages!");
}
– (void)collectionView:(JSQMessagesCollectionView *)collectionView
didTapMessageBubbleAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Tapped message bubble!");
}
– (void)collectionView:(JSQMessagesCollectionView *)collectionView
didTapCellAtIndexPath:(NSIndexPath *)indexPath touchLocation:(CGPoint)touchLocation
{
NSLog(@"Tapped cell at %@!", NSStringFromCGPoint(touchLocation)); }
#pragma mark – JSQMessagesComposerTextViewPasteDelegate methods
– (BOOL)composerTextView:(JSQMessagesComposerTextView *)textView
shouldPasteWithSender:(id)sender
{
if ([UIPasteboard generalPasteboard].image) {
// If there's an image in the pasteboard, construct a media item with that image and
`send` it.
JSQPhotoMediaItem *item = [[JSQPhotoMediaItem alloc] initWithImage:[UIPasteboard
generalPasteboard].image];
JSQMessage *message = [[JSQMessage alloc] initWithSenderId:self.senderId
senderDisplayName:self.senderDisplayName
date:[NSDate date]
media:item];
[self.demoData.messages addObject:message];
[self finishSendingMessage];
return NO;
}
return YES;
}
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Social Twist – aplicație bazată pe integrarea [631702] (ID: 631702)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
