Getting started¶
Instalace¶
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"
...
}
Kromě toho musíte toto úložiště zahrnout do souboru root gradle, pokud tam ještě není:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Zkontrolujte kompatibilitu zde.
Inicializace D2¶
Aby bylo možné začít používat SDK, je prvním krokem inicializace objektu D2. Pomocná třída D2Manager nabízí statické metody pro nastavení a inicializaci instanceD2. Rovněž zajišťuje, že D2 je v aplikaci singleton.
Minimální konfigurace, která musí být předána do D2Manager, je následující:
D2Configuration configuration = D2Configuration.builder()
.context(context)
.build();
Pomocí konfigurace můžete vytvořit instanci D2.
Single<D2> d2Single = D2Manager.instantiateD2(configuration);
Po dokončení Single můžete přistupovat k D2 následující metodou:
D2 d2 = D2Manager.getD2();
Pokud nepoužíváte RxJava, můžete instanci D2 vytvořit blokujícím způsobem:
D2 d2 = D2Manager.blockingInstantiateD2(configuration);
Objekt D2Configuration má mnoho polí pro konfiguraci chování SDK.
| Atribut | Požadované | Popis | Výchozí |
|---|---|---|---|
| kontext | true | Kontext aplikace | - |
| appName | false | Slouží k vytvoření záhlaví „user-agent“ | Z manifestu pro Android |
| appVersion | false | Slouží k vytvoření záhlaví „user-agent“ | Z manifestu pro Android |
| readTimeoutInSeconds | false | Časový limit čtení pro dotazy HTTP | 30 sekund |
| connectTimeoutInSeconds | false | Časový limit připojení pro dotazy http | 30 sekund |
| writeTimeoutInSeconds | false | Časový limit zápisu pro dotazy HTTP | 30 sekund |
| interceptors | false | Interceptory pro OkHttpClient | Žádný |
| networkInterceptors | false | NetworkInterceptors pro OkHttpClient | Žádný |
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