matrix-org / matrix-android-sdk

BuildkiteQuality GateSårbarhederBugs

Dette SDK er forældet, og kerneholdet arbejder ikke længere på det.

Vi anbefaler kraftigt, at nye projekter bruger det nye Android Matrix SDK.

Vi kan dog yde bedst mulig støtte til eksisterende projekter, der stadig bruger dette SDK.

matrix-android-sdk

SdK’et til Android omslutter Matrix REST API-opkald i asynkrone Java-metoder og giver grundlæggende strukturer til lagring og håndtering af data.

Det er et Android Studio (gradle)-projekt, der indeholder SDK-modulet.https://github.com/vector-im/riot-android er den prøveapp, der bruger dette SDK.

Oversigt

Matrix-API’erne er opdelt i flere kategorier (se ).Den grundlæggende brug er:

  1. Log ind eller registrer dig på en hjemmeserver -> få brugerens legitimationsoplysninger
  2. Start en session med legitimationsoplysningerne
  3. Start lytning til hændelsesstrømmen
  4. Før matrix-API-opkald

Fejl / anmodninger om funktioner

Mener du, at du har fundet en fejl? Kontroller venligst, om der ikke findes en issuedoes endnu, og hvis ikke, så åbn et problem på denne Github repo. Hvis et problem allerede eksisterer, er du velkommen til at upvote for det.

Bidrage

Vil du rette en fejl eller tilføje en ny funktion? Tjek, om der er et tilsvarende åbent problem.Hvis ingen arbejder aktivt på problemet, skal du vælge develop-grenen, når du skriver din rettelse, og åbne en pull request, når du er klar. Baser ikke dine pull-forespørgsler på master.

Log ind

For at logge ind skal du bruge en instans af login API-klienten.

HomeServerConnectionConfig hsConfig = new HomeServerConnectionConfig.Builder() .withHomeServerUri(Uri.parse("https://matrix.org")) .build();new LoginRestClient(hsConfig).loginWithUser(username, password, new SimpleApiCallback<Credentials>());

Hvis det lykkes, vil callbacken give de brugeroplysninger, der skal bruges fra nu af.

Start af matrixsession

Sessionen repræsenterer en brugers session med en bestemt hjemmeserver. Der kan potentielt være flere sessioner til håndtering af flere konti.

MXSession session = new MXSession.Builder(hsConfig, new MXDataHandler(store, credentials), getApplicationContext()) .build();

Opretter en session til at interagere med hjemmeserveren.

Sessionen giver adgang til de forskellige API’er via REST-klienterne:

session.getEventsApiClient() for hændelses-API’en

session.getProfileApiClient() for profil-API’en

session.getPresenceApiClient() for tilstedeværelses-API’en

session.getRoomsApiClient() for rum-API’en

For den komplette liste over metoder henvises til .

EksempelHentning af listen over medlemmer af et chatrum ville se nogenlunde sådan ud:

session.getRoomsApiClient().getRoomMembers(<roomId>, callback);

Det samme sessionsobjekt skal bruges til hver anmodning. Dette kan kræve brug af en singleton, se Matrix singleton i app modulet for et eksempel.

Hændelsesstrømmen

En vigtig del af enhver Matrix-aktiveret app vil være at lytte til hændelsesstrømmen, den levende strøm af begivenheder (meddelelser, tilstandsændringer osv.).Dette gøres ved hjælp af:

session.startEventStream();

Dette starter hændelsestråden og indstiller den til at sende hændelser til en standardlytter.Det kan være nyttigt at bruge dette sammen med en Android Service til at styre, om hændelsesstrømmen kører i baggrunden eller ej.

Datahåndteringen

Datahåndteringen giver et lag, der hjælper med at håndtere data fra hændelsesstrømmen. Selv om det er muligt at skrive en app med nodata-handler og manuelt foretage API-opkald, anbefales det stærkt at bruge en sådan til de fleste anvendelser. Databehandleren :

  • Håndterer hændelser fra hændelsesstrømmen
  • Lagerer dataene i sit lagringslag
  • Giver en app mulighed for at få callbacks for hændelser
  • Giver og vedligeholder rumobjekter til rumspecifikke operationer (få meddelelser, deltage, sparke, invitere osv.)
MXDataHandler dataHandler = new MXDataHandler(new MXMemoryStore());

skaber en datahåndtering med standardimplementeringen af in-memory storage.

Registrering af en lytter

For at blive informeret om begivenheder skal appen implementere en hændelseslytter.

session.getDataHandler().addListener(eventListener);

Denne lytter bør underklasses MXEventListener og overskrive metoderne efter behov:

onPresenceUpdate(event, user) Triggeres, når en brugers tilstedeværelse er blevet opdateret.

onLiveEvent(event, roomState) Triggeres, når en livehændelse er kommet ned i hændelsesstrømmen.

onBackEvent(event, roomState) Triggeres, når en gammel begivenhed (fra historikken) eller en tilbagevendende begivenhed er blevet returneret efter en anmodning om mere historik.

onInitialSyncComplete() Triggeres, når den indledende synkroniseringsproces er afsluttet. Den indledende synkronisering er det første kald, som hændelsesstrømmen foretager for at initialisere tilstanden for alle kendte rum, brugere osv.

Rumobjektet

Rumobjektet indeholder metoder til at interagere med et rum (hente beskedhistorik, tilslutte sig osv.).

Room room = session.getDataHandler().getRoom(roomId);

Henter (eller opretter) rumobjektet, der er knyttet til det givne rum-ID.

Room state

RoomState-objektet repræsenterer rummets tilstand på et bestemt tidspunkt: dets navn, emne, synlighed (offentlig/privat), medlemmer osv. onLiveEvent og onBackEvent callbacks (se Registrering af en lytter) returnerer hændelsen, men også rummets tilstand på tidspunktet for hændelsen for at tjene som kontekst for opbygning af visningen (f.eks. brugerens visningsnavn på tidspunktet for deres besked). Den tilstand, der leveres, er den tilstand, der var før behandlingen af hændelsen, hvis hændelsen tilfældigvis ændrer rummets tilstand.

Rumhistorik

Når man går ind i et rum, ønsker en app normalt at vise de seneste meddelelser. Dette gøres ved at kalde

room.requestHistory();

Hændelserne returneres derefter via onBackEvent(event, roomState) callback i omvendt rækkefølge (den seneste først).

Dette udløser ikke, at hele rummets historik returneres, men kun ca. 15 meddelelser. Ved at kalde requestHistory() igen hentes derefter de næste (tidligere) 15 eller deromkring, og så videre. For at begynde at anmode om historik fra den aktuelle livetilstand (f.eks. ved åbning eller genåbning af et rum) skal

room.initHistory();

kaldes før historikanmodningerne.

Indholdsadministrator

Matrix-hjemmeservere tilbyder en indholds-API til downloading og upload af indhold (billeder, videoer, filer osv.).Indholdsforvalteren leverer indpakningen omkring denne API.

session.getContentManager();

henter den indholdsforvalter, der er tilknyttet den givne session.

Download af indhold

Indhold, der er hostet af en hjemmeserver, identificeres (i begivenheder, avatar-URL’er osv.) ved en URI med et mxc-schema (f.eks. mxc://matrix.org/xxxx).For at få den underliggende HTTP-URI til hentning af indholdet skal du bruge

contentManager.getDownloadableUrl(contentUrl);

hvor contentUrl er mxc://-URL’en for indhold.

For billeder findes der en ekstra metode til returnering af miniaturebilleder i stedet for billeder i fuld størrelse:

contentManager.getDownloadableThumbnailUrl(contentUrl, width, height, method);

som giver dig mulighed for at anmode om en specifik bredde, højde og skaleringsmetode (mellem scale og crop).

Opload af indhold

For at uploade indhold fra en fil, skal du bruge

contentManager.uploadContent(filePath, callback);

som angiver filens sti og en callback-metode, som returnerer et objekt ved afslutning, der indeholder den mxc-style URI, hvor det uploadede indhold nu kan findes.

Se prøveappen og Javadoc for flere detaljer.