10 septembrie 2018
Construirea propriei aplicatii de intalnire: tutorial # 2
Conceptul de intalnire nu poate fi inclus in calendarul exact. Oamenii au fost cunoscuti pana in prezent cu omologii lor atat timp cat au pus piciorul pe acest pamant.
Cu timpul, metodele, abordarea, procesul si-a vazut ponderea corecta de nuante. Dar ideea de baza a intalnirii a ramas aceeasi inca din vremuri imemoriale.
Tinder, Happn, eHarmony, OKCupid etc sunt cateva dintre marile nume din industria de intalniri online. Dar nu se termina acolo. Este vorba despre jucatorii batrani care au apreciat succesul in etapele foarte timpurii.
Acest lucru se datoreaza faptului ca oamenii adora sa se conecteze intre ei, in special atunci cand stiu ca se afla pe o platforma partajata unde fiecare dintre ei cauta ceva comun: un partener pana in prezent.
Dupa ce ati decis sa construiti o aplicatie de intalnire similara pentru un lider de piata, evaluarea aplicatiei dvs. a fost deja facuta. Exista mai multe povesti de succes in care au predominat similare si au reusit in nisa lor.
Fara prea multe detalii, iata ghidul tau pentru crearea unei aplicatii extraordinare de intalnire.
Ce veti invata:
- Modalitati de a construi o aplicatie de intalnire
- Construirea unei aplicatii de intalnire MVP
- Optimizarea structurala si scalabilitatea performantei aplicatiei
Cum sa creezi o aplicatie de intalnire?
Exista mai multe modalitati prin care puteti opta atunci cand creati o aplicatie de intalnire.
- Dezvoltati si configurati o aplicatie personalizata
- Utilizati un software robust pentru constructor de aplicatii online
- Utilizati si modificati un script de clona
Dezvoltati si configurati o aplicatie personalizata
Dezvoltarea unei aplicatii personalizate este ca si cum ai privi in fata unei ardezie goale. Incepi cu altceva decat cu o idee in minte si continui sa improvizezi in drum.
O aplicatie de intalnire personalizata poate fi fie nativa, fie multipla platforma. Avand in vedere salturile uriase ale tehnologiei, astazi avem aplicatii native multi-platform care va pot eficientiza cu usurinta afacerea in randul publicului mobil.
Strudel este un astfel de exemplu de aplicatie Nativescript. Este o aplicatie de intalnire care ruleaza pe iOS si Android care permite utilizatorilor sa gaseasca potriviri si sa isi impartaseasca interesele.
O aplicatie personalizata necesita o entitate backend pentru a functiona si o baza de date pentru a stoca toate datele. Majoritatea acestor aplicatii sunt construite nativ, ceea ce le face mai eficiente.
Partea stralucitoare a construirii de aplicatii de intalniri in acest fel este ca favorizeaza dezvoltarea repetitiva a produsului si siphons o abordare agila pentru dezvoltare. Fiecare pas poate fi gestionat si controlat printr-un nod centralizat prin aceasta abordare.
Daca costurile suplimentare nu ar fi ceva de care ti-ar face griji pentru a dezvolta o aplicatie de ultima generatie, atunci utilizarea abordarii de dezvoltare personalizata este o miscare inteligenta.
Daca credeti complet in ideea dvs., dezvoltarea unei aplicatii similare Tinder sau a unei aplicatii personalizate de intalnire este alegerea potrivita.
O cale standard pentru dezvoltarea unei aplicatii personalizate arata asa:
- Etapa de planificare care implica manager de produse, marketer si analisti de afaceri
- Documentatie tehnica care descrie toate cerintele tehnice
- Etapa de prototipare
- Etapa de dezvoltare – Dezvoltare frontend si backend
- Asigurarea si testarea calitatii
- Publicare si intretinere
Utilizarea unui constructor de aplicatii online
Cea mai buna parte a utilizarii unui constructor de aplicatii este faptul ca economisesc mult timp si, de obicei, este doar un dragand drop care trebuie sa faca de cele mai multe ori.
A avea cunostinte tehnice aprofundate nu este o conditie prealabila aici. Daca va jucati putin, veti obtine o agatare in cateva ore. Crearea de interfete de utilizator, reglarea functiilor de backend etc. poate fi gestionata cu usurinta cu ajutorul unui constructor de aplicatii.
Acesti construitori WYSIWYG gazduiesc aplicatia dvs. si va pastreaza backend-ul intact. Majoritatea elementelor UI sunt furnizate de acestea, care pot fi utilizate pentru a va face aplicatia de intalnire. Toata documentatia necesara si suportul in timp este oferit de acestia.
Exista doua tipuri de astfel de construitori de aplicatii:
- Tinut privat
- Sursa deschisa
Appypie este un exemplu de constructor de aplicatii detinute in mod privat, unde ofera toate suporturile necesare pentru backend si frontend, inclusiv elemente UI, hosting si documentatie.
Un alt exemplu este un software de intalnire open source. Pentru a construi aplicatia de intalnire este nevoie de cunostinte tehnice de la o persoana. Ph7CMS este un software excelent de construire a aplicatiilor de intalnire pentru aplicatii de intalnire.
Toate codurile sursa necesare si componentele majore sunt incorporate in software. Ceea ce are nevoie este intelegerea tehnica a migratiei, compilarii, configuratiei datelor etc.
In cele mai multe cazuri, atunci cand utilizati un constructor de aplicatii online, exista anumite limitari in ceea ce priveste optimizarea, personalizarea si functiile inovatoare. Toti acesti factori limitatori sunt eliminati atunci cand utilizati un software personalizat pentru a construi aplicatia de intalnire.
Utilizati si modificati un script de clona
Un script clona este practic o replica a codului sursa al unei aplicatii populare existente.
Aceste scripturi sunt usor disponibile pe pietele online. Exista zeci de scripturi de tonuri similare Tinder disponibile pe piata. Dupa ce aveti scriptul de clona, este usor sa gasiti pe cineva care va poate ajuta sa incarcati aplicatia in magazinele de aplicatii relevante.
Este scalabil?
Inovatia este cheia succesului in orice afacere. Pur si simplu, copiind si lipind singur scriptul clona nu va catapulta aplicatia spre succes.
Cand aveti codul sursa sau script-ul clona, chiar daca inovati 10% din codul real, exista sanse ca oamenii sa iubeasca aplicatia dvs. si sa o para interesanta.
Totusi, sa te bazezi complet pe scriptul clona poate sa nu para o idee buna.
Este posibil ca codul sa nu aiba documentatie sau comentarii adecvate pentru a modifica sau intelege in continuare codul. De asemenea, in majoritatea cazurilor, astfel de scripturi clonate sunt slab scrise si nu se vor scala deloc.
Doar daca simtiti ca exista o piata pentru afacerea dvs. si puteti inova cu ajutorul scriptului clon, daca alegeti sa cumparati una.
Sa trecem la partea tehnica a crearii unei aplicatii de intalnire acum.
Construirea unei aplicatii de intalnire MVP
Pentru a crea un astfel de MVP, ar trebui sa stiti despre iOS, Android si dezvoltarea backend. Astazi, pentru a crea o aplicatie, ar trebui sa cunoastem obiectivul C & Swift pentru dezvoltarea aplicatiilor iOS si Java pentru dezvoltarea aplicatiilor Android.
Limbile backend includ cunostintele tehnice ale Javascript, PHP sau orice astfel de limbaj bazat pe preferinta subiectiva. Cea mai decenta abordare in astfel de cazuri este de a urmari modul minim viabil de produs.
Aceasta este o greseala pe care o fac chiar startup-urile mari; adesea subestimeaza importanta unui MVP. Cand Tinder a fost pe punctul de a trece de la 20k utilizatori la 500k utilizatori peste noapte, Sean Rad, co-fondatorul Tinder a fost sub presiune extrema, deoarece nu au definit un MVP adecvat.
Arum Kang, co-fondator de cafea Meets Bagel spune: „Uneori, in etapele initiale, simti ca ai nevoie intr-adevar de aceasta caracteristica in produsul tau, dar mai tarziu iti dai seama ca de fapt nu ai nevoie. Si uneori iti lipseste complet caracteristicile de baza care iti definesc produsul. De aceea este important sa avem un produs viabil minim definit ”.
Care ar putea fi MVP pentru o aplicatie de intalnire?
- Inregistrare si autentificare utilizator
- Autentificarea utilizatorului prin intermediul social media precum Facebook
- Functionalitate de baza care sa „placa” sau „nu-i place” la un profil
- Instrumente de administrare de baza pentru crearea de potriviri
- Posibilitatea de a discuta prin aplicatie
Dupa definirea MVP pentru aplicatia dvs. de intalnire, sa analizam caracteristicile de baza din aplicatie
Orice caracteristica din aplicatie ar trebui sa fie acolo pentru performanta, utilizare si securitate. Acestea sunt principalele caracteristici fundamentale care iti conduc produsul.
- Glisati gesturi sau glisati carduri
- Algoritmul de potrivire a utilizatorului
- Moderarea continutului
- Localizarea geografica
- Suport pentru chat in timp real
Crearea gesturilor de glisare
Gesturile glisante sunt preferate printre utilizatori si destul de usor de utilizat pentru o aplicatie de intalnire. Cu toate acestea, trebuie sa optimizati aceste carduri glisante, in functie de publicul tinta.
Iata mai jos cativa dintre factorii pe care trebuie sa ii luati in considerare inainte de a implementa caracteristica swipe card:
- Cat de mult trebuie sa se micsoreze sau sa se estompeze cardul la glisare
- Care va fi unghiul sau de rotatie si puterea sa
- Distanta de la mijloc in functie de o actiune care trebuie sa aiba loc
- Cat de departe trebuie sa alunece utilizatorul pentru a schimba cardul
- Opacitatea si variatia culorii la atingere
Toate aceste caracteristici ruleaza in frontend pentru utilizatori. Venind in backend, nu exista nici o modalitate „cea mai usoara” de a face o aplicatie scalabila.
Tinder foloseste swipe pentru a alege functia in care glisarea din stanga pe card reflecta „Like” si glisarea spre dreapta reflecta „Dislike”.
Urmatorul este un exemplu despre modul in care puteti utiliza MDCSwipeToChooseView pentru a afisa o fotografie in iOS. In cazul in care utilizatorii pot alege sa stearga imaginea la glisarea spre stanga sau sa o salveze glisand spre dreapta.
Obiectiv-C
#import
// … intr-un controler de vizualizare
#pragma mark – Crearea si personalizarea unui MDCSwipeToChooseView
– (nul) viewDidLoad {
[super viewDidLoad];
// Puteti personaliza MDCSwipeToChooseView folosind MDCSwipeToChooseViewOptions.
MDCSwipeToChooseViewOptions * options = [MDCSwipeToChooseViewOptions new];
options.likedText = @ “Keep”;
options.likedColor = [UIColor blueColor];
options.nopeText = @ “Stergeti”;
options.onPan = ^ (MDCPanState * state) {
if (state.thresholdRatio == 1.f && state.direction == MDCSwipeDirectionLeft) {
NSLog (@ “Lasa acum sa stergi fotografia!”);
}
};
MDCSwipeToChooseView * view = [[MDCSwipeToChooseView alloc] initWithFrame: self.view.bounds
options: options];
view.imageView.image = [UIImage imageNamed: @ “photo”];
[auto.view addSubview: view];
}
#pragma mark – MDCSwipeToChooseDelegate Callbacks
// Se numeste acest lucru atunci cand un utilizator nu a glisat complet la stanga sau la dreapta.
– (nul) viewDidCancelSwipe: (UIView *) view {
NSLog (@ “Nu s-a putut decide, nu?”);
}
// Trimis inainte de a face o alegere Anulati alegerea returnand „NU”. In caz contrar, intoarceti „DA”.
– Vizualizare (BOOL): (UIView *) vizualizare shouldBeChosenWithDirection: (MDCSwipeDirection) direction {
if (direction == MDCSwipeDirectionLeft) {
return YES;
} else {
// Recuperati vizualizarea inapoi si anulati alegerea.
[UIView animateWithDuration: 0,16 animatii: ^ {
view.transform = CGAffineTransformIdentity;
view.center = [vezi supraveghere] .center;
}];
returnati NU;
}
}
// Se numeste apoi un utilizator gliseaza vederea complet la stanga sau la dreapta.
– (void) view: (UIView *) view wasChosenWithDirection: (MDCSwipeDirection) direction {
if (direction == MDCSwipeDirectionLeft) {
NSLog (@ “Photo delete !”);
} else {
NSLog (@ “Foto salvata!”);
}
}
Rapid
Pentru a utiliza codul obiectiv-c de la rapid, trebuie sa folositi bridging-header.
#ifndef BridgingHeader_h
#define BridgingHeader_h
#import
#import
#endif
import UIKit
class ViewController: UIViewController {
Inlocuieste functia viewDidLoad () {
super.viewDidLoad ()
let options = MDCSwipeToChooseViewOptions ()
options.delegate = self
options.likedText = “Mentineti”
options.likedColor = UIColor.blue
options.nopeText = “Sterge”
options.nopeColor = UIColor.red
options.onPan = {state -> Void in
if state? .thresholdRatio == 1 && state? .direction == .left {
print (“Foto stersa !”)
}
}
let view = MDCSwipeToChooseView (frame: self.view.bounds, options: options)
view? .imageView.image = UIImage (denumit: “photo.png”)
self.view.addSubview (view!)
}
}
extensie ViewController: MDCSwipeToChooseDelegate {
// Se numeste acest lucru atunci cand un utilizator nu a glisat complet la stanga sau la dreapta.
func viewDidCancelSwipe (_ vizualizare: UIView) -> Void {
print (“Nu s-a putut decide, nu?”)
}
// Trimis inainte de a face o alegere Anulati alegerea returnand `false`. In caz contrar, intoarceti „adevarat”.
func view (_ view: UIView, shouldBeChosenWith: MDCSwipeDirection) -> Bool {
if shouldBeChosenWith == .left {
return true
} else {
// Recuperati vizualizarea si anulati alegerea.
UIView.animate (cuDuration: 0.16, animatii: {() -> Void in
view.transform = CGAffineTransform.identity
view.center = view.superview! .Center
})
return false
}
}
// Aceasta se numeste atunci cand un utilizator gliseaza vederea complet la stanga sau la dreapta.
func view (_ view: UIView, wasChosenWith: MDCSwipeDirection) -> Void {
if wasChosenWith == .left {
print (“Photo delete !”)
} else {
print (“Photo salvat!”)
}
}
}
Functionalitate backend
Pentru un produs viabil minim, o baza de date MySQL + MongoDB impreuna cu Node.js functioneaza cel mai bine pentru aplicatii similare.
Oamenii au recomandat sa utilizeze MongoDB autonom pentru aplicatii de intalnire. Chiar si Tinder a folosit MongoDB. Cu toate acestea, aceasta nu poate fi salutata ca fiind cea mai buna cale. Ele apar din cauza miturilor din jurul MongoDB. Tot Tinder s-a confruntat cu probleme in timp ce folosea MongoDB.
Potrivit expertilor, proiectarea unei baze de date pe MongoDB este un pic dificila. Va solicita sa planificati din timp ce functii doriti sa implementati pentru aplicatie si ce informatii ar trebui sa extrageti din ea.
Acest lucru devine un pic greoi, deoarece majoritatea aplicatiilor sunt conduse de o abordare agila. Pentru a facilita acest lucru, mutati toate datele nestructurate ale aplicatiei pe MongoDB si asezati toate datele structurate in baza de date MySQL.
Node.js si API Caching
O aplicatie de intalnire functioneaza pe sarcini variabile. Ambele, de la capatul utilizatorului si de la capatul serverului. Acest lucru face ca Node.js sa fie cea mai buna alegere. Cand ne concentram pe continut static (Imagini), Node.js nu merge bine cu acesta.
Aceasta problema poate fi rezolvata cu un mecanism de cache. Acest lucru da un impuls imens Node.js. In acest fel, orice solicitare cu memorie in cache pare sa fi fost procesata imediat pentru utilizatorul final.
Dupa cum stim, memoria de memorie cache stocheaza temporar informatiile, astfel incat acestea sa poata fi usor recuperate ori de cate ori exista o solicitare generata de la sfarsitul utilizatorului. Mecanismul de cache reduce si multiplexeaza conexiunile HTTP si mentine conexiunile WebSocket persistente.
Acesta este un mod prin care se poate reduce numarul de apeluri pe care aplicatia trebuie sa le efectueze in baza de date principala. Exista trei moduri de a implementa memoria de cache in aplicatia dvs.:
- Conectare directa in cache
- Memorie cache locala
- Stratul de cache API
Nu uitati ca luam in calcul MVP. Odata ce aplicatia trece prin gat si este gata de scalare, puteti include toate aceste trei mecanisme de cache pentru a servi scopuri diferite.
scalabilitate
Dupa ce ati trecut de faza MVP, aplicatia trebuie sa fie mai scalabila. Trebuie sa fie gata pentru a face fata cantitatii fara precedent de trafic si cereri. Pentru aceasta, va trebui sa optimizati coada serverului.
In loc sa opteze pentru N Servers + N cozi sau Single Server + Single Queue, modelul preferat este sa optezi pentru Single Queue + N servere.
N depinde de traficul primit de aplicatia dvs. Mai jos este exemplul cel mai de baza despre cum functioneaza:
Dupa finalizarea implementarii serverului, orice alte sarcini pot fi luate in considerare. Aplicatia dvs. ar trebui sa anticipeze mai mult trafic.
Luati in considerare a) Ce se va intampla cand luati aplicatia in direct? Cati utilizatori s-ar putea conecta la un moment? Cate mesaje vor fi trimise si primite simultan. b) Care sunt riscurile? c) Cum veti putea trece la un nou aranjament, daca este necesar?
Securitate
Deoarece o multime de date cu caracter personal sunt stocate in baza de date a aplicatiei de intalnire, aceasta devine o tinta preferata pentru elementele necorespunzatoare pentru a fura si a folosi in mod eronat datele.
Aplicatiile de intalnire functioneaza pe un modul principal – Geolocalizare. Utilizatorii isi impartasesc locatia cu serverele.
Pe frontend, utilizatorii vad termeni precum „3 mile distanta” sau „6 mile distanta”. Daca un hacker, cu cunostinte bune de backend, incearca sa se infiltreze in informatiile utilizatorului, el poate gasi distantele utilizatorului sub forma de zecimale. De exemplu, „3.06551” sau „6.21112”.
Acum, hackerul va crea mai multe profiluri in aplicatie. Si va verifica locatia utilizatorului folosind toate cele trei profiluri. Acest lucru ii va oferi trei locatii arbitrare, cum ar fi 3.06551, 3.07558 si 3.11221.
Exista o metoda numita „Trilaterare”, cu ajutorul careia oricine poate obtine o apropiere aproape perfecta a utilizatorului vizat.
Pentru a evita acest lucru, pur si simplu nu furnizati informatii precise despre locatie interfetei dvs. de utilizator mobil.
decompilare
O alta modalitate prin care ghionturile online exploateaza datele site-ului dvs. este prin decompilarea aplicatiei. Este foarte usor sa decompilati aplicatia dvs. si odata ce codul a fost decompilat, exista diverse modalitati prin care hackerii pot:
- Inlaturati orice ID de backend de la terti codificat si detalii de conectare ale utilizatorilor.
- Consultati mesajele de depanare daca nu sunt deja inchise de dezvoltatorii de aplicatii. Cu mesajele de depanare, hackerii pot avea acces la fluxul potential de informatii sensibile.
Pentru a preveni acest lucru: faceti obscur codul sursa. Nu pastrati codul sursa in text simplu. Asigurati-va ca toate datele de autentificare nu sunt codate cu cheie tare in codul sursa.
Hashing criptografica si criptarea datelor
Incalcarea datelor este unul dintre cele mai frecvente tipuri de fraude online. Datorita criptarii slabe sau nu, precum si neglijenta, datele personale ale utilizatorilor ajung in mainile gresite. Prin urmare, este necesar ca fiecare comunicare care are loc intre server si aplicatie sa fie criptata.
In cele mai multe cazuri, o criptare criptografica bazata pe PGP este suficienta pentru a oferi o securitate puternica. Pentru a obtine o imagine de ansamblu, iata ce trebuie sa faceti pentru a integra GnuPG (PGP / GPG).
Presupunand ca ai instalat software-ul si ai generat o cheie publica / privata, urmatorul pas implica:
Criptare folosind cheia publica
Nota: – Acesta este un exemplu ipotetic.
Creati un fisier text simplu numit „my-secrets-myname.txt” folosind un editor de text.
Numele meu este “Numele meu”
Numarul cartii de credit este 1234-5678-9012-3456
Parola telefonului meu este 42
Acum criptati fisierul:
gpg -e my-secrets-myname.txt
GPG va spune ca nu ati inclus un destinatar / un utilizator
Nu ati specificat un ID de utilizator. (puteti utiliza „-r”)
Destinatari actuali:
Introduceti ID-ul utilizatorului. Incheiati cu o linie goala:
Introduceti un cod de e-mail, in acest caz: [email protected]
Destinatari actuali:
2048R / 3BE8FE75 2013-07-30 “John Dover (tasta sanog)”
Odata terminat, GPG va efectua in mod voluntar actiunile necesare.
$ ls -l my-secrets-myname.txt *
-rw-rw-r– 1 sanog sanog 102 iul 30 12:45 my-secrets-myname.txt
-rw-rw-r– 1 sanog sanog 441 30 iul. 14:30 my-secrets-myname.txt.gpg
In cazul ferestrelor:
C: \ exercitare> dir
Volumul din unitatea C nu are nici o eticheta.
Numarul de serie al volumului este 0CB2-23B5
Directorul C: \ exercitare
18.08.2018 05:04.
18.08.2018 05:04 AM ..
18/08/2018 05:03 AM 105 my-secrets-myname.txt
18/08/2018 05:04 AM 443 my-secrets-myname.txt.gpg
2 File ( s) 548 bytes
2 Dir (e) 47.657.218.048 bytes (free)
C: \ exercitii fizice>
In timp ce stabiliti functii de securitate pentru site-ul de intalnire, hashes-urile criptografice nu sunt foarte recomandate, deoarece este destul de usor sa cumparati sau sa descarcati o lista de hase pentru toate numerele de telefon date.
Functiile de securitate mentionate anterior sunt usor si rentabile de executat pentru o aplicatie de intalnire MVP.
Intelegerea algoritmului Tinder
Acum, inainte de a vorbi despre ceea ce intra sub capota lui Tinder, trebuie intelese cateva lucruri. Doar o multime de oameni stiu ce se afla exact in spatele algoritmului Tinder.
Nu este ceva care este open source si disponibil tuturor. Un algoritm este dezvoltat dupa ani de invatare, experiente, feedback, observatii etc. Algoritmul actual al lui Tinder este USP-ul sau. Nu isi pot permite sa o piarda in public.
Daca ne uitam la imaginea mai mare, este o combinatie de invatare automata alimentata de dinamica sistemului real din lume care ofera profilul cel mai circumstantial utilizatorilor sai.
Chiar daca aceasta este una dintre cele mai sofisticate si mai de incredere metode de potrivire a profilurilor dintr-o aplicatie de intalnire, aceasta devine o afacere substantial scumpa pentru startup-uri.
O pornire nu isi poate permite sa puna un LOB in invatarea masinii in activitatea lor. Cu toate acestea, exista o solutie in acest sens. Pur si simplu trebuie sa observati pentru a intelege si oferi.
- Influenta bazata pe similitudine – Reduce procesul de potrivire mai eficient prin evaluarea modului de a adauga greutati la interese similare sau diferite.
- Completarea profilului – Uitati-va la profilul utilizatorului. Un profil incomplet spune multe despre utilizator. Adaugati mai multa greutate profilurilor in care un utilizator are 2 sau mai multe poze de profil, a furnizat detalii despre lucrari si a folosit numarul de caractere pentru a se descrie. Acest lucru ajuta la indexarea profilurilor de utilizator autentice.
- Specificatii legate de nisa – Spuneti, de exemplu, ati creat site-ul de intalniri pentru profesionisti si clasa de lucru. Apoi, numarul de calificari si grade pe care le-a oferit un utilizator creste mai mult. In mod similar pentru sport, atletism, colegii etc.
- Seriozitate catre aplicatie – Un alt mod in care poti cantari mai mult un profil este prin sortarea tuturor utilizatorilor care au activate notificarile push. Aplicatiile au o rata de opt-in foarte buna atunci cand vine vorba de notificari push. Cand un utilizator l-a activat, puteti fi sigur ca este inclinat catre orice actualizare pe care o primeste din aplicatie.
Iata o formula de exemplu pentru a clasifica un utilizator pe o scara de 100:
Puncte = H1 (min (gradul I, x1) / x1) + H2 (Grad pe Facebook) + H3 + H4 (min (gradul 2, x4) / x4) + … + Hn (yn)
Hi este coeficientul variabilelor independente xi si yi.
Acest lucru poate fi util atunci cand aplicatia are un numar limitat de utilizatori. Pe masura ce baza de utilizatori creste, cererea de timp si efort creste si ea.
Dupa ce aplicatia dvs. a reusit sa achizitioneze o baza mare de utilizatori, acesta va fi un moment bun pentru a muta algoritmul de potrivire la invatarea automata.
Imbunatatirea calitatii aplicatiei
Calitatea unei aplicatii de intalnire este masurata de numarul de profiluri autentice si autentice. Profiluri false, escroci, impersonatori etc scad calitatea experientei aplicatiei. Pentru a controla acest lucru, sa luam un exemplu de Sightengine, o API care ajuta la eliminarea unor astfel de profiluri.
Configurarea unui sistem automat de moderare a imaginilor este o practica buna pentru aplicatii de intalnire si site-uri web. SDK-urile sunt disponibile in PHP, Node.js si Python
Dupa ce va inregistrati pe site-ul lor si va creati un cont, vi se vor oferi doua chei secrete. Dupa aceea, va trebui sa instalati SDK-ul care permite utilizarea API-ului in aplicatia dvs.
pip instala sightengine
Site-ul web returneaza un JSON. In acest JSON exista un atribut de proba inselatorie care analizeaza daca imaginea contine un escrocher sau nu. JSON contine, de asemenea, un chip de atribute care este un tablou.
Exemplu de moderare a imaginii prin URL publica:
# Detecteaza nuditatea intr-o
iesire a imaginii = client.check (‘nuditate’) .set_url (‘http://img09.deviantart.net/2bd0/i/2009/276/c/9/magic_forrest_wallpaper_by_goergen.jpg’)
# Detecteaza nuditatea, armele, alcoolul, drogurile si fetele dintr-o imagine, impreuna cu proprietatile imaginii si tipul de
iesire = client.check (‘nuditate’, ‘tip’, ‘proprietati’, ‘wad’, ‘fata’). Set_url ( ‘http://img09.deviantart.net/2bd0/i/2009/276/c/9/magic_forrest_wallpaper_by_goergen.jpg’)
Moderarea imaginii locale:
# Detecteaza nuditatea intr-o
iesire a imaginii = client.check (‘nuditate’). Set_file (‘/ full / path / to / image.jpg’)
# Detecteaza nuditatea, armele, alcoolul, drogurile si fetele dintr-o imagine, impreuna cu proprietatile imaginii si tipul de
iesire = client.check (‘nuditate’, ‘tip’, ‘proprietati’, ‘wad’, ‘fata’). Set_file ( ‘/full/path/to/image.
porno gey http://whcuithaca.com/__media__/js/netsoltrademark.php?d=adult66.net/
filme porno gangbang http://cheesedoff.net/__media__/js/netsoltrademark.php?d=adult66.net/
poze fete porno http://stophighertolls.com/__media__/js/netsoltrademark.php?d=adult66.net/
porno cu virgine http://aerogives.net/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/amatori
filme porno cu flocoase http://usedwheelchairvan.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/anal
porno tabu http://bereskinparr.info/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/asiatice
porno scat http://sucessosonline.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/beeg
porno brazilia http://nationstarrefiloan.org/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/blonde
hermafrodit porno http://algae-power.net/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/brazzers
jocuri porno 3d http://cubano.pro/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/brunete
caut film porno http://infrastructuregigs.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/chaturbate
filme porno cubabe http://ijob.net/__media__/js/netsoltrademark.php?d=adult66.net/tanara-minora-violata-in-propriul-dormitor-de-doi-necunoscuti
romania filme porno http://steelopolis.com/__media__/js/netsoltrademark.php?d=adult66.net/doua-tarfe-lesbiene-cu-tatuaje-fac-o-partida-de-sex-de-neuitat
jenna jameson porno http://yourtestsolution.com/__media__/js/netsoltrademark.php?d=adult66.net/amatoare-de-sex-are-orgasm-in-timp-ce-se-masturbeaza
filme vechi porno http://berkshirehathawaytriad.com/__media__/js/netsoltrademark.php?d=adult66.net/tanara-de-16-ani-prinsa-de-frate-in-timp-ce-se-masturbeaza-cu-vibratorul-in-pat
filme porno dure http://ranchesofidaho.com/__media__/js/netsoltrademark.php?d=adult66.net/o-bruneta-focoasa-e-fututa-animalic-pe-la-spate-chiar-in-patul-ei
castinguri porno http://rbjnews.com/__media__/js/netsoltrademark.php?d=adult66.net/doi-amatori-draguti-fac-sex-pe-canapea-si-au-orgasm
porno italian clasic http://mygrouphubb.net/__media__/js/netsoltrademark.php?d=adult66.net/creola-de-18-ani-este-fututa-in-punctul-g-pana-are-orgasm
sex porno animal http://projectpainreliever.com/__media__/js/netsoltrademark.php?d=adult66.net/negresa-originala-suge-pula-si-apoi-e-fututa-pe-la-spate
porno cam http://basicskillstest.net/__media__/js/netsoltrademark.php?d=adult66.net/blonda-beata-face-sex-oral-unui-stripper-pe-scena
jpg’)
Modificarea imaginii binare:
# Detecteaza nuditatea intr-o
iesire a imaginii = client.check (‘nuditate’). Set_bytes (binary_image)
# Detecteaza nuditatea, armele, alcoolul, drogurile si fetele dintr-o imagine, impreuna cu proprietatile imaginii si tipul de
iesire = client.check (‘nuditate’, ‘tip’, ‘proprietati’, ‘wad’, ‘fata’). Set_bytes ( binary_image)
Moderarea locala a imaginii Feedback:
client.feedback (“nuditate”, “sigur”, “/full/path/to/image.jpg”)
client.feedback (“tip”, “ilustrare”, “/full/path/to/image.jpg”)
client.feedback (“nuditate”, “brut”, “/full/path/to/image.jpg”) Sursa: Github / Sightengine
Un alt mod de a modera profilurile false este de a solicita utilizatorilor sa se inscrie prin intermediul contului Facebook si de a pune un prag la numarul de prieteni, informatii despre profil, like-uri, etc., un utilizator trebuie sa fie identificat ca utilizator valid.
Integrare in chat in timp real
Furnizarea de suport pentru chat in timp real, atat online cat si offline, este parte integranta a unei aplicatii de intalnire online. O diferenta majora intre chat-ul in timp real si un chat simplu este faptul ca ulterior este necesar ca utilizatorii sa reimprospateze fereastra de chat pentru a primi mesaje noi. Iar in timp real, chat-ul se actualizeaza automat
Daca aveti un chat HTTP instalat, pierdeti atat timp, cat si resurse. Mai mult, astfel de chat-uri nu se vor scala cu timpul si vor esua in cele din urma. Sa ai incredere in astfel de module de chat nu este o idee buna.
Iata cum puteti implementa suportul de chat in timp real in aplicatia de intalnire:
- Integrare server XMPP
- Programarea soclurilor
- Programarea soclurilor Utilizand SDK-uri solide de la terti precum CometChat
Ce inseamna asta?
Daca tocmai incepeti, construirea unui modul de chat de la zero si apoi implementarea acestuia in aplicatie nu este deloc o idee buna. Aceasta este pur si simplu prea multa munca si o pierdere extraordinara de timp.
Optiunile preferate includ A) Firebase care ofera tone de functii, impreuna cu implementarea rapida a chat-ului usor de utilizat. B) OpenFire este un alt exemplu excelent de integrare usoara a modulului de chat. Este un server de colaborare in timp real (RTC). Ambele ofera protocoale XMPP pentru functionalitatea chat-ului.
In timp ce ambele optiuni sunt bune, au propriile limitari si probleme de scalabilitate. Asigurati-va ca le verificati inainte de a opta pentru oricare dintre acestea.
O astfel de limitare este aceea ca sistemele unix limiteaza numarul maxim de utilizatori simultani pe care Openfire le poate avea. Limita implicita este setata la 4.000.
CometChat este un alt exemplu bun pentru a integra un modul de chat pentru aplicatia dvs. de intalnire. Este un bloc de constructii preambalat pentru infrastructura de chat.
In loc sa creezi un modul de chat personalizat si sa parcurgi dificultatile, SDK-urile disponibile de la CometChat ofera o aplicatie sporita.
Are mai mult de 92+ integrari disponibile si poate rula pe orice platforma.
SDK-uri mobile
Cadrele
Limbaje de programare
CometChat este o solutie robusta si eleganta pentru integrarea unui modul sofisticat de chat in aplicatia dvs.
Este livrat cu un SDK gata de a integra codul sursa complet pentru UI. Dezvoltatorii pot construi cu usurinta partea de sus a UI-ului nostru existent si se pot extinde pe functionalitatea CometChat.
Vine cu GIF-uri, stickere, emojis, apeluri video, chat-uri de grup etc si o multime de functii.
Cum se initializeaza chatul in iOS?
Rapid
let CometChat: CometChat = CometChat ();
let licenseKey: String = “COMETCHAT-XXXXX-XXXXX-XXXXX-XXXXX”;
let apiKey: String = “xxxxxxxxxxxxxxxxxxxxxx”;
self.CometChat.initializeCometChat (“”, licenseKey: licenseKey, apikey: apiKey,
isCometOnDemand: true,
success: {(raspuns) in
}, esec: {(eroare) in
})
Obiectiv-C
CometChat * CometChat = [[CometChat alloc] init];
NSString * licenseKey = @ “COMETCHAT-XXXXX-XXXXX-XXXXX-XXXXX”;
NSString * apiKey = @ “xxxxxxxxxxxxxxxxxxxxxx”;
[CometChat initializeCometChat: @ “” licenseKey: licenseKey apikey: apiKey isCometOnDemand: DA
succes: ^ (NSDictionary * response) {
} esec: ^ (eroare NSError *) {
}];
Cum sa va conectati la chat?
Rapid
let UID: String = “SUPERHERO1”;
CometChat.login (cuUID: UID,
succes: {(raspuns) in
},
esec: {(eroare) in
});
Obiectiv-C
NSString * UID = @ “SUPERHERO1”;
[CometChat loginWithUID: succes UID: ^ (NSDictionary * raspuns) {
} esec: ^ (eroare NSError *) {
}];
Lansarea chatului
Rapid
let isFullScreen: Bool = true;
let readyUI: readyUIFIle = readyUIFIle ();
self.readyUI.launchCometChat (isFullScreen, observator: self, userInfo: {(raspuns) in
}, groupInfo: {(raspuns) in
}, onMessageReceive: {(raspuns) in
}, succes: {(raspuns) in
}, esec: {(eroare) in
}, onLogout: {(raspuns) in
})
Obiectiv-C
BOOL esteFullScreen = DA;
readyUIFIle * readyUIFile = [[readyUIFIle alloc] init];
[readyUIFile launchCometChat: Observator IsFullScreen: self userInfo: ^ (NSDictionary * raspuns) {
} groupInfo: ^ (NSDictionary * raspuns) {
} onMessageReceive: ^ (NSDictionary * response) {
} success: ^ (NSDictionary * raspuns) {
} esec: ^ (Eroare NSError *) {
} onLogout: ^ (NSDictionary * raspuns) {
}];
Unul dintre cele mai simple si eficiente module de chat pentru aplicatia dvs. de intalnire online.
Procesarea platii
Deoarece nu vindeti articole corporale prin intermediul aplicatiei, cerinta pentru o poarta de plata nu se pune in discutie. Achizitiile dintr-o aplicatie de intalnire online se incadreaza in bunuri digitale.
Tot ce trebuie facut este sa integrati portofelul Apple si Google in aplicatia dvs. si sunteti gata sa mergeti.
Iata un exemplu de integrare Google Wallet.
1. Iata un exemplu de integrare Google Wallet.
Private PaymentsClient mPaymentsClient;
@ Supraverseaza
public void onCreate () {
super.onCreate ();
mPaymentsClient =
Wallet.getPaymentsClient (
aceasta,
noua Wallet.WalletOptions.Builder ()
.setEnvironment (WalletConstants.ENVIRONMENT_TEST)
.build ());
}
2. Apelarea este API-ulReadyToPay
private void isReadyToPay () {
IsReadyToPayRequest request =
IsReadyToPayRequest.newBuilder ()
.addAllowedPaymentMethod (WalletConstants.PAYMENT_METHOD_CARD)
.addAllowedPaymentMethod (WalletConstants.P_DENIT.PAY
).
Task task = mPaymentsClient.isReadyToPay (cerere);
task.addOnCompleteListener (
nou OnCompleteListener () {
public void onComplete (Task task) {
try {
boolean result = task.getResult (ApiException.class);
if (rezultat == true) {
// Afiseaza Google ca optiune de plata.
} else {
// Ascundeti Google ca optiune de plata.
}
} Captura (exceptie ApiException) {
}
}
});
}
3. Creati obiectul PaymentDataRequest
private PaymentDataRequest createPaymentDataRequest () {
PaymentDataRequest.Builder request =
PaymentDataRequest.newBuilder ()
.setTransactionInfo (
TransactionInfo.newBuilder ()
.setTotalPriceStatus (WalletConstants.TOTAL_PRICE_STATUS_FIN)
”
” USD ”
.
.addAllowedPaymentMethod (WalletConstants.PAYMENT_METHOD_CARD)
.addAllowedPaymentMethod (WalletConstants.PAYMENT_METHOD_TOKENIZED_CARD)
.setCardRequirements (
CardRequirements.newBuilder ()
.addAllowedCardNetworks (
Arrays.asList (
WalletConstants.CARD_NETWORK_AMEX,
WalletConstants.CARD_NETWORK_DISCOVER,
WalletConstants.CARD_NETWORK_VISA,
WalletConstants.CARD_NETWORK_MASTERCARD))
.build ());
PaymentMethodTokenizationParameters params =
PaymentMethodTokenizationParameters.newBuilder ()
.setPaymentMethodTokenizationType (
WalletConstants.PAYMENT_METHOD_TOKENIZATION_TYPE_PAYMENT_GATEWAY)
.addParameter ( “poarta de acces”, “exemplu”)
.addParameter ( “gatewayMerchantId”, “exampleGatewayMerchantId”)
.build ();
request.setPaymentMethodTokenizationParameters (params);
return request.build ();
}
4. Creati obiectul OnClickListener
findViewById (R.id.buy_button)
.setOnClickListener (
noua View.OnClickListener () {
@Override
public void onClick (View view) {
PaymentDataRequest request = createPaymentDataRequest ();
if (request! = null) {
AutoResolveveve ()
; (cerere),
aceasta,
// LOAD_PAYMENT_DATA_REQUEST_CODE este o valoare constanta
// pe care o definiti.
LOAD_PAYMENT_DATA_REQUEST_CODE);
}
}
});
5. Manevrati obiectul de raspuns PaymentData
@ Suprascriere
onActivityResult public void (int requestCode, resultCode int date Intent) {
comutator (requestCode) {
caz LOAD_PAYMENT_DATA_REQUEST_CODE:
comutator (resultCode) {
caz Activity.RESULT_OK:
PaymentData paymentData = PaymentData.getFromIntent (date);
String token = PaymentData.getPaymentMethodToken (). GetToken ();
pauza;
caz Activitate.RESULT_CANCELED:
pauza;
case AutoResolveHelper.RESULT_ERROR:
Status status = AutoResolveHelper.getStatusFromIntent (date);
// Jurnalizeaza starea pentru depanare.
// In general, nu este necesar sa se afiseze o eroare
// utilizatorului, deoarece API-ul Google Pay va face acest lucru.
pauza;
Mod implicit:
// Nu face nimic.
}
pauza;
implicit:
// Nu faceti nimic.
}
}
Sursa: Dezvoltatori Google
Acesta este un exemplu despre modul in care se poate integra Google Wallet in modulul de chat.
Concluzie
Nu mergeti doar pentru un script de clona si incepeti sa generati monetizarea aplicatiei pe deasupra. In cele din urma, o astfel de afacere este sortita sa esueze. Construirea unei aplicatii care sa adune toate piesele, lectiile si experienta, feedback-urile si rapoartele este modul in care ar trebui sa procedam.
Intotdeauna exista o cerere de inovare. Oamenii adora ceea ce este unic si usor de utilizat.
V-am oferit toate ingredientele necesare pentru a va crea propria aplicatie de intalnire. Tot ce iti trebuie este sa te ridici si sa incepi sa aglomerezi.
Data – Set – Du-te!








