SMS module¶
SMS modul lze použít jako záložní metodu pro nahrávání dat, když není k dispozici připojení k internetu. Vyžaduje další nastavení na serveru: Aby bylo možné přijímat SMS, musí být na serveru nakonfigurována brána SMS; volitelně může mít server schopnost odesílat SMS zpět klientům s odpovědí.
V závislosti na poskytovateli mobilních služeb může zasílání SMS znamenat dodatečné náklady. Z tohoto důvodu je modul SMS určen pouze pro odesílání podrobných dat. Nepoužívá se pro stahování metadat nebo hromadné stahování / nahrávání dat. Data jsou navíc komprimována pomocí [knihovna komprese SMS] (https://github.com/dhis2/sms-compression), aby se obsah vešel do nižšího počtu zpráv. Tato knihovna je sdílena s back-endem.
Pro účely testování můžete použít DHIS2 Android SMS Gateway.
V SDK je k modulu SMS přístup z D2.
d2.smsModule()
Tento modul je ve výchozím nastavení zakázán a musí být výslovně povolen a nakonfigurován. Obsahuje tři komponenty, které umožňují přístup k funkcím modulu.
- ConfigCase: it is used to set initial data that is common for all sms sending tasks like gateway numbers, timeout, execute downloading of metadata ids object.
- SmsSubmitCase. it is used to convert the DHIS2 data that will be sent by the Sdk, to send it by SMS and to check the progress of the submission and his result.
- QrCodeCase: it is used to convert DHIS2 data to String. This String is a compressed representation of the DHIS2 data. This is useful to avoid send large content on SMSes.
Typický pracovní postup pro použití modulu SMS by vypadal takto:
- Povolte modul SMS.
- Synchronizujte metadata. Modul SMS stáhne ze serveru další metadata, takže tento krok je nutné provést, když je k dispozici připojení k internetu a potom je modul povolen.
- Odesílejte data pomocí modulu SMS.
Toto je příklad kódu typického pracovního postupu (pro jednoduchost kódu použil blokovací metody):
// Enable SMS Module
d2.smsModule().configCase().setModuleEnabled(true).blockingAwait();
// Sync SMS Module metadata using SMS Module
d2.smsModule().configCase().refreshMetadataIds().blockingAwait();
// or using metadata module
d2.metadataModule().blockingDownload();
// Configure, at least, the gateway number. See ConfigCase for more parameters
d2.smsModule().configCase().setGatewayNumber("gateway-number").blockingAwait();
// Send data. For example a tracker event:
SmsSubmitCase case = d2.smsModule().smsSubmitCase();
Integer numSMSs = case.convertTrackerEvent("event-uid").blockingGet();
case.send().blockingSubscribe();
SMS verze¶
SMS jsou odesílány v komprimovaném formátu z / na server. Tuto úlohu provádí knihovna komprese SMS, která je zodpovědná za převod mezi prostým textem a komprimovaným formátem.
Sada SDK obsahuje nejnovější dostupnou verzi komprimační knihovny, ale není zaručeno, že ji server také používá. Z tohoto důvodu je nutné zkontrolovat verzi serveru, aby bylo možné povolit / zakázat některé funkce. Verzi SMS na serveru lze zkontrolovat pomocí:
d2.systemInfoModule().versionManager().getSmsVersion()
Přehled verzí - funkce:
Verze 1:
- Agregovaná data.
- Data trasovače / události, ale existují některé známé chyby. Doporučujeme nepovolovat synchronizaci sledovacích SMS ve verzi 1.
Verze 2:
- Přidejte podporu pro prázdné seznamy.
- Přidejte podporu pro geometrii v událostech (POINT).
- Přidejte chybějící vlastnosti v událostech (data události, datum splatnosti) a registrace (datum provedení, datum incidentu).
- Přidejte podporu pro odesílání registrace + událostí ve stejném případě odeslání SMS.
Další informace najdete v úložišti komprese SMS.
ConfigCase¶
d2.smsModule().configCase()
Tento případ použijte ke konfiguraci modulu SMS před jeho použitím. Je vyžadováno alespoň:
- Povolte modul.
- Nastavte číslo brány.
- Stáhněte si ID metadat.
Existují další volitelné parametry ke kontrole, zda má sada SDK čekat na odpověď ze serveru nebo ne, a časový limit odpovědi. Je také možné určit číslo odesílatele, takže zprávy přijaté od ostatních odesílatelů jsou ignorovány.
SmsSubmitCase¶
V tomto případě použijte k vytvoření nového odeslání. Případy odeslání nelze opakovaně použít a lze je odeslat pouze jednou. Chcete-li vytvořit nový případ odeslání, zavolejte metodu:
SmsSubmitCase case = d2.smsModule().smsSubmitCase();
There are two options to send a SMS: ask for permissions and send the SMS directly inside the application; or get the compressed message and use an external app to send the SMS.
Sending SMS within the application¶
Přihláška zahrnuje následující kroky:
- Určete údaje, které chcete odeslat. To znamená zavolat metodu jako
convert*(). - Odeslat zprávu.
- Volitelně zkontrolujte potvrzovací SMS.
Například odeslání události trasovače bude vypadat takto:
SmsSubmitCase case = d2.smsModule().smsSubmitCase();
Integer numSMSs = case.convertTrackerEvent("event-uid").blockingGet();
case.send().blockingSubscribe();
Důležité
Aplikace je zodpovědná za vyžádání oprávnění od uživatelů (READ_PHONE_STATE, SEND_SMS, READ_SMS, RECEIVE_SMS). Jinak modul SMS selže.
The next methods can be used to set the DHIS2 data to send:
convertSimpleEvent(). Nastavit jednoduchou událost.convertTrackerEvent(). Nastavení události sledovače.convertEnrollment(). Pro nastavení zápisu.convertDataSet(). Nastavení sady dat.convertRelationship(). Nastavit vztah.convertDeletion(). Odstranění události.
The methods above returns a single with the number of messages that the items takes up. An example of the use of these methods is shown in the next snippet.
Single<Integer> convertTask = d2.smsModule().smsSubmitCase()
.convertEnrollment("enrollment_uid")
To send the data converted earlier the Sdk provides a send() method that returns a stream of the current states. Also it is possible to get the submission id by calling the method getSubmissionId().
d2.smsModule().smsSubmitCase().send()
It is also possible to wait for the SMS result by calling the checkConfirmationSms() method. It returns a Completable object where completion means that the SMS was received successfully. In case that the result cannot be found, it returns an error. The date accepted is the minimum date for which confirmation is going to be checked, this is used to skip old messages that may have the same submission id.
d2.smsModule().smsSubmitCase().checkConfirmationSms(new Date());
These methods can fail and return a PreconditionFailed object if some conditions are not satisfied. The preconditions errors are:
NO_NETWORK.NO_CHECK_NETWORK_PERMISSION.NO_RECEIVE_SMS_PERMISSION.NO_SEND_SMS_PERMISSION.NO_GATEWAY_NUMBER_SET.NO_USER_LOGGED_IN.NO_METADATA_DOWNLOADED.SMS_MODULE_DISABLED.
Sending SMS using an external application¶
A submission using an external application involves the following steps:
- Specify the data to submit and get the compress message. This means to call a method like
compress*(). - Send the message using an external app.
- Optionally mark as SENT_VIA_SMS if you know the message has been sent.
- Volitelně zkontrolujte potvrzovací SMS.
Například odeslání události trasovače bude vypadat takto:
SmsSubmitCase case = d2.smsModule().smsSubmitCase();
String message = case.compressTrackerEvent("event-uid").blockingGet();
// Use an external application to send the SMS
// Optionally mark the case as SENT_VIA_SMS
case.markAsSentViaSMS();
// If you get a response from the server, you can check if the message corresponds to the case or not.
boolean isResponseMessage = case.isConfirmationMessage("sender_number", "message").blockingGet();
QrCodeCase¶
d2.smsModule().qrCodeCase()
Tuto metodu použijte k získání komprimované reprezentace dat.
QrCodeCase can convert the next type of DHIS2 objects:
- Jednoduché události. Pomocí metody
generate_impleEventCode()a předáním uid události. - Události trasovače. Použití metody
generateTrackerEventCode()a předání události uid. - Zápisy. Pomocí metody
generateEnrollmentCode()a předáním uid zápisu. - Vztahy. Pomocí metody
generateRelationshipCode()a předáním vztahu uid. - Sady dat. Použití metody
generateDataSetCode()a předání uid datové sady, uid organizační jednotky, kombinace možností atributů a ID období.
Je také možné získat komprimované řetězce, které lze použít k odstranění událostí:
- Smazání. Pomocí metody
generateDeletionCode()a předáním UID události.
Tyto metody vrací hodnotu Single s komprimovanými daty. Následující fragment kódu ukazuje příklad toho, jak jej lze použít.
Single<String> convertTask = d2.smsModule().qrCodeCase().generateEnrollmentCode(enrollmentUid);