all
Business
data science
design
development
our journey
Strategy Pattern
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Joao Rodrigues

Februar 23, 2024

Min Read

SnapTrash: slippe af med plastaffald med din telefon

En lille app med et godt formål. Det er den bedste måde at beskrive SnapTrash, et af vores seneste projekter og et af de første, vi udvikler, siden vi har lavet skift fra Ruby on Rails til en fuld JavaScript-stak. Her lærer du denne iOS-app at kende såvel som udviklingsprocessen på basis af dens første version, der snart vil være tilgængelig i App Store.

blue arrow to the left
Imaginary Cloud logo

Hvad er SnapTrash, og hvorfor er det relevant

SnapTrash Interface

SnapTrash er en iOS-app, der giver dig mulighed for at rapportere plastikaffald, der kan findes på strande ved kun at bruge din telefons kamera og

GPS. Hvert foto uploades til en database, der er tilgængelig fra appen og indeholder fotoplaceringen, dets koordinater og brugernavnet på uploaderen.

Denne database vil blive brugt til at organisere regelmæssige plastsamlinger, hvilket hjælper med at holde strandene rene og havet plastfrit. Dens relevans er lige så stor som dens formål, da otte millioner tons plastik kommer ind i havet hvert år og er ansvarlig for døden af flere marine dyrelivsarter, der indtager det dagligt.

Brugeren vil være i stand til at få et globalt overblik over alle rapporterede fotos på et kort, der er integreret i appen gennem et sæt intuitive ikoner. Selvom appens hovedmål er at organisere samlinger af store mængder plast, opfordres brugeren også til selv at handle, når det er muligt.

Designet med enkelhed i tankerne

Designudfordringen med SnapTrash var at gøre det så enkelt og intuitivt som muligt uden at spilde for meget tid på detaljer, der ikke ville tilføje nogen værdi til det. Af denne grund er grænsefladen så enkel og ren som muligt, hvilket gør det meget nemt at opnå de ønskede opgaver. Efter login tager det kun et par klik at rapportere ethvert foto, noget der er så simpelt som at dele medier på Instagram eller Snapchat.

Affaldsposer på kortet repræsenterer et galleri med fotos på et givet sted, og hvis du zoomer det, vil du se dem spredt ud i hvert enkelt foto. De resterende ikoner og knapper tager ikke meget plads på skærmen og er designet til at holde brugerens opmærksomhed på SnapTrashs hovedformål: at holde havet plastfrit.

SnapTrash User Experience
blue arrow to the left
Imaginary Cloud logo

Udvikling af SnapTrash

Fra starten var min opgave at bygge en mobilapp, hvor brugerne kunne logge ind via Facebook og tage billeder af plastik og offentliggøre dem på et kort. På det tidspunkt eksperimenterede jeg stadig med Strapie (Du kan finde det gennemgået her) og det syntes at være egnet til denne opgave. For at udvikle selve appen gik jeg med React Native.

Serversiden: Strapi

For at kunne holde billederne synlige i appen, var jeg nødt til at finde en måde at gemme dem på en server sammen med alle de relevante oplysninger om hver enkelt. På dette tidspunkt er serversiden ikke synlig for brugerne generelt og fungerer kun som datalagring.

For at opnå dette virkede Strapi som et godt værktøj til jobbet med kun en begrænsning: det er rettet mod udvikling af webapps. Derfor fungerer SDK'en ikke fuldt ud i React Native, og lader dig heller ikke bruge SDK'en til indbygget Facebook-login. Under alle omstændigheder er Strapi Facebook-login nu brudt, da Facebook gjorde HTTPS-tilbagekald obligatorisk, og Strapi kun genererer tilbagekaldelseswebadresser med HTTP.

Til sidst uploades billedfilerne til Strapi-serveren gennem /upload endepunktet, og fotomodellen refererer til den fil. Derudover gemmer den placeringen, hvor billedet blev taget, og loginoplysningerne fra Facebook (token, bruger-e-mail og brugernavn). Det var alt, hvad jeg havde brug for fra serversiden.

IOS-appen: React Native

Med hensyn til selve appen var min første opgave simpelthen at vise et kort, hvilket lød let nok. Men hvis du går bare med React Native CLI-værktøjet, har du store problemer. Instruktionerne til opsætning af react-native-maps er uforståelige for nogen, der ikke har erfaring med at udvikle til Native. Heldigvis, den Tænd CLI har et plugin, der gør det meget nemt at tilføje kort til din app.

For at få billedets placering var jeg nødt til at spore brugerens aktuelle placering, hvilket måske er lettere sagt end gjort i betragtning af den tilgængelige dokumentation. Her du finder dårlig dokumentation om, hvordan du gør det. Men i begge tilfælde får de det til at virke meget mere intuitivt, end det faktisk er.

Efter at jeg fik kortet i gang, havde jeg et par flere problemer, som jeg var nødt til at løse for at have SnapTrash klar til test:

  • C ++ undtagelse (ikke Objective-C eller en Swift-fejl, C ++!) : Da jeg først forsøgte at tilføje markører med skraldespandsikonerne til kortet med react-native-maps, oplevede jeg et par uvelkomne problemer. Løsningen, som jeg har fundet, var at tilføje billederne to gange til visningen. Første gang var før kortvisningen (som derefter vil blive skjult bag kortet) og anden gang på markørkomponenterne.

  • Klyngning: Når det kom til gruppering af billeder i grupper, som var repræsenteret af en enkelt skraldespand, var den bedste løsning at bruge react-native-maps-super-cluster. Jeg prøvede både react-native-clustering og react-native-cluster før og fandt dem meget sværere at installere eller have dokumentation, der ikke var særlig klar.

  • Overlejring: Overlayet er det, der muliggør fuldskærmvisning over kortet, og det var her, jeg stod over for endnu et problem, da jeg ikke kunne finde ud af, hvordan man placerede to visninger med position:absolut oven på hinanden (overlay over kort). Jeg var nødt til at tjekke en betaversion af react-native-elements, hvor jeg fandt en overlay-komponent, som jeg kunne bruge som base for fotoskyderen, hvilket fører mig til næste nummer.

  • Foto Slider: Jeg var nødt til at ændre overlayet for at fjerne TouchableWithoutFeedback-komponenterne, da de fangede de begivenheder, som skyderen har brug for for at rulle. Når du brugte debuggeren, fungerede skyderen godt, men når den var slukket, var TouchableWithoutFeedback-komponenterne et problem. Med react-native-carousel var jeg i stand til at få skyderen til at gøre præcis, hvad designeren havde planlagt til appen.

I stedet for:


Løsningen er at skubbe positionen: absolut visning uden for Touchable:


  • Styling: Jeg forsøgte at oprette kameraoptagelsesknappen med to visninger: en ydre visning med opacitet 0,5 og en indre visning med opacitet 1. På denne måde tilsidesætter den ydre opacitet imidlertid den indre opacitet. Til sidst fandt jeg ud af, at der var et arbejde omkring det ved at eksportere billederne fra Sketch.

At finde de bedste løsninger på disse problemer var en af de bedste dele af udviklingen af SnapTrash, da jeg kunne forstå præcis, hvorfor det var afgørende at få alt til at køre så glat som muligt. Brugeroplevelsen bør ikke ødelægges af mindre problemer, der ville distancere appen fra dens mål.

blue arrow to the left
Imaginary Cloud logo

Afsluttende bemærkninger

SnapTrash var et fantastisk projekt at arbejde på, og det er en app med et meget vigtigt formål, da det løser et af de mest alvorlige problemer, som vi står over for i øjeblikket på globalt plan. Med hensyn til udviklingen var det spændende at arbejde med et par nye værktøjer, da dette var en af de første mobilapp-udviklinger, jeg har lavet. Følgende er de vigtigste takeaways, som jeg har holdt fra dette projekt.

  • Vær forsigtig, når du bruger Strapi. Selvom det efter min erfaring var simpelt nok, var der stadig et par spørgsmål at rapportere. Det understøtter ikke godkendelsesudbydere, der bruger HTTPS, og den nuværende SDK understøtter heller ikke React Native. I sit forsvar er Strapi stadig i alfa (jeg brugte alfa-14), og der er endnu meget plads at forbedre.

  • Med hensyn til React Native vil du have det dårligt, hvis du aldrig har udviklet nativt, noget der, i betragtning af manglen på dokumentation, antages fra starten. Dette vil medføre, at du har et par fejl fra den oprindelige side, og du har ingen anelse om, hvordan du løser dem med det samme.

  • Nogle pakker, som react-native-maps, er et rod at tilføje til dit projekt, da de kræver, at du blander dig i oprindelige konfigurationsfiler og tilføjer pakker manuelt til den oprindelige side. Heldigvis er nogle af disse smerter allerede løst af tændkedelpladerne.

  • Stylingen ligner CSS, bortset fra at den ikke er det. For eksempel, for at sætte to divs med absolute:position oven på hinanden, var jeg nødt til at bruge en overlay-komponent fra react-native-elements. Det kan ikke sammenlignes med ren indbygget ydeevne, men selv under hensyntagen til det tager navigationen nogle gange for lang tid. For eksempel, hvis man kunne trykke på kameraknappen hurtigt nok, ville det skubbe to kameraskærme til navigationsstakken.

Alt i alt er disse problemer langt bagud nu, og SnapTrash frigives snart. Oplevelsen af at udvikle det var fantastisk, men jeg er overbevist om, at resultatet bliver endnu større.

Hvis du leder efter hjælp til udvikling af mobil- eller webapps, ser vores team frem til at møde dig! Send os en linje her!

Ready for a UX Audit? Book a free call

Fandt du denne artikel nyttig? Du kan måske også lide disse!

blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
Joao Rodrigues
Joao Rodrigues

Full-stack udvikler, vært for frokostafstemninger og stolt af at have en meget specifik og sjælden sans for humor, der misforstås. Og det er mine frokostafstemninger som regel også.

Read more posts by this author

People who read this post, also found these interesting:

arrow left
arrow to the right
Dropdown caret icon