Getting started¶
Instalación¶
Include dependency in build.gradle. Use the latest published version, available in Maven Central:
dependencies {
// Replace 1.x.x with the latest published version (see the Maven Central badge above)
implementation "org.hisp.dhis:android-core:1.x.x"
...
}
Adicionalmente, debe incluir este repositorio en su archivo root gradle si aún no está allí:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Check compatibility here.
Inicialización D2¶
Para comenzar a usar el SDK, el primer paso es inicializar un objeto D2. La clase auxiliar D2Manager ofrece métodos estáticos para configurar e inicializar la instanciaD2. Además, asegura que D2 sea un singleton en toda la aplicación.
La configuración mínima que debe pasarse al D2Manager es la siguiente:
D2Configuration configuration = D2Configuration.builder()
.context(context)
.build();
Usando la configuración puede instanciar D2.
Single<D2> d2Single = D2Manager.instantiateD2(configuration);
Una vez completado el Single, puede acceder a D2 con el siguiente método:
D2 d2 = D2Manager.getD2();
Si no está utilizando RxJava, puede crear una instancia D2 en forma de bloqueo:
D2 d2 = D2Manager.blockingInstantiateD2(configuration);
El objeto D2Configuration tiene muchos campos para configurar el comportamiento del SDK.
| Atributo | Requerido | Descripción | Predeterminado |
|---|---|---|---|
| contexto | verdadero | Contexto de la aplicación | - |
| appName | falso | Utilizar para crear la cabecera "user-agent" | Desde Android Manifest |
| appVersion | falso | Utilizar para crear la cabecera "user-agent" | Desde Android Manifest |
| readTimeoutInSeconds | falso | Tiempo límite de lectura para consultas http | 30 segundos |
| connectTimeoutInSeconds | falso | Tiempo límite de conexión para consultas http | 30 segundos |
| writeTimeoutInSeconds | falso | Tiempo límite de escritura para consultas http | 30 segundos |
| interceptores | falso | Interceptores para OkHttpClient | Ninguno |
| networkInterceptors | falso | NetworkInterceptors para OkHttpClient | Ninguno |
Google Play Services Support¶
The Google play services have been completely removed to make the SDK work on devices where the play services are not allowed; the SDK was using the ProviderInstaller present in the play service dependency to update the security provider to be protected against SSL exploits
If you're using a SDK version without google play services support, you have two options to update the security provider against SSL exploits, you can use an open-source solution called conscrypt to target devices without the google play services support or you can use play-services-safetynet dependency that's not open-source and required the google play services.
1. Play services Safetynet Dependency¶
If you're targeting devices that support the google play services, the best option is to use the ProviderInstaller included in the play-services-SafetyNet dependency by following steps.
dependencies {
implementation "com.google.android.gms:play-services-safetynet:<version>"
...
}
After adding the play-services-safetynet dependency just create a method that you can used to install the security provider
public static void initialize(Context context){
try {
// ....
ProviderInstaller.installIfNeeded(context.getApplicationContext());
// ....
} catch (GooglePlayServicesRepairableException e) {
Log.e(TAG, e.toString());
} catch (GooglePlayServicesNotAvailableException e) {
Log.e(TAG, e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, e.toString());
}
}
For more information about play-services-safetynet, check the official documentation link
2. Open-source solution¶
If you're not targeting devices with the google play services, conscrypt is an alternative to the play-services-safetynet dependency that can be used to update security provider against SSL exploits
dependencies {
implementation 'org.conscrypt:conscrypt-android:<conscrypt-version>'
...
}
Setting up conscrypt is similar to the Google’s provider like in the following code :
public static void initialize(){
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch(Exception e) {
Log.e(TAG, e.toString());
} catch (NoSuchAlgorithmException e) {
Log.e(TAG, e.toString());
}
}
For more information about conscrypt, check the official github repository on this link