Pular para conteúdo
Postman

Android SDK

Guia de integração do SDK MediQuo para aplicações Android nativas.

Importante: Cadastro de Pacientes

O cadastro de pacientes deve ser feito através da API ID MediQuo (nosso portal de gestão de licenças). O SDK é exclusivamente para integração frontend após o paciente já estar cadastrado.

Consulte: Pacientes - ID MediQuo


Pré-requisitos

Item Versão mínima
minSdkVersion 29
targetSdk / compileSdkVersion 35 (recomendado)
Android Studio Ladybug ou superior
Gradle 8.7
Kotlin 2.2.0
Compose BOM 2024.06.00
Firebase BOM 32.1.1
Java compatibility 17

Dependências adicionais necessárias:


Instalação

1. Repositório Maven

No settings.gradle.kts (ou build.gradle de nível de projeto), adicione o repositório:

Kotlin
repositories {
    google()
    mavenCentral()
    maven { url = uri("https://mediquo.jfrog.io/artifactory/android-sdk") }
}

2. Plugins no build.gradle de projeto

Kotlin
plugins {
    alias(libs.plugins.hilt.android) apply false
    alias(libs.plugins.ksp) apply false
}

3. Dependências no build.gradle do módulo

Kotlin
plugins {
    alias(libs.plugins.hilt.android)
    alias(libs.plugins.ksp)
    alias(libs.plugins.kotlin.compose)
}

android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

dependencies {
    implementation(libs.hiltAndroid)
    ksp(libs.hiltCompiler)
    implementation(libs.mediquo.sdk)
}

4. libs.versions.toml

TOML
[versions]
mediquoSdk = "[LAST-VERSION]"
kotlin = "2.2.0"
hiltVersion = "2.54"
kspVersion = "2.2.0-2.0.2"

[libraries]
hiltAndroid = { group = "com.google.dagger", name = "hilt-android", version.ref = "hiltVersion" }
hiltCompiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hiltVersion" }
mediquo-sdk = { group = "com.mediquo", name = "mediquo-sdk", version.ref = "mediquoSdk" }

[plugins]
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hiltVersion" }
ksp = { id = "com.google.devtools.ksp", version.ref = "kspVersion" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }

Substitua [LAST-VERSION] pela versão mais recente disponível no repositório.

5. FileProvider (anexos)

A partir do Android 11, é necessário o arquivo res/xml/file_paths.xml para que o envio de anexos funcione corretamente. Substitua your.package.name pelo package real do app:

XML
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/[your.package.name]/files/Pictures" />
    <external-path name="downloads" path="Android/data/[your.package.name]/files/Download" />
</paths>

Referencie esse arquivo no AndroidManifest.xml:

XML
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="[your.package.name]"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

Inicialização

Chame MediquoSDK.initialize() dentro do Application.onCreate(), usando a API_KEY fornecida pela MediQuo. Nenhum outro método do SDK deve ser chamado antes de receber o callback onSuccess.

Kotlin
class App : Application() {

    private val mediQuoInitListener = object : MediquoInitListener {
        override fun onSuccess() {
            /* Inicialização bem-sucedida */
        }
        override fun onFailure(message: String?) {
            /* Falha na inicialização */
        }
    }

    override fun onCreate() {
        super.onCreate()
        MediquoSDK.initialize(this, API_KEY, mediQuoInitListener)
    }
}

Autenticação

Após a inicialização, autentique o paciente com o CPF (CLIENT_CODE). Isso deve ser chamado após o login do usuário no seu sistema.

Kotlin
private val mediQuoAuthenticateListener = object : MediquoAuthenticateListener {
    override fun onSuccess() {
        /* Autenticação bem-sucedida — o SDK está pronto para uso */
    }
    override fun onFailure(message: String?) {
        /* Falha na autenticação */
    }
}

MediquoSDK.authenticate(CLIENT_CODE, mediQuoAuthenticateListener)

CLIENT_CODE é o CPF do paciente (somente números), conforme cadastrado na API ID MediQuo.

Abrir a interface do SDK

Após autenticação bem-sucedida, abra a tela principal do SDK:

Kotlin
MediquoSDK.getInstance()?.openProfessionalListActivity(this)

Logout

Encerra a sessão do paciente no SDK.

Kotlin
private val mediquoDeAuthenticateListener = object : MediquoDeAuthenticateListener {
    override fun onSuccess() {
        /* Logout bem-sucedido */
    }
    override fun onFailure(message: String?) {
        /* Falha no logout */
    }
}

MediquoSDK.deAuthenticate(mediquoDeAuthenticateListener)

Push Notifications

Configuração no Application.onCreate()

Após a inicialização, inicialize o Firebase e registre o token no SDK:

Kotlin
if (FirebaseApp.getApps(this).isEmpty()) {
    FirebaseApp.initializeApp(this)
}

FirebaseMessaging.getInstance().token
    .addOnCompleteListener { task ->
        if (!task.isSuccessful) return@addOnCompleteListener
        val token = task.result
        MediquoSDK.getInstance()?.registerPushToken(token)
    }

AndroidManifest.xml

XML
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<application>
    ...
    <service
        android:name="com.mediquo.chat.fcm.MediquoFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
</application>

Permissão em runtime (Android 13+)

Kotlin
private fun askForNotificationPermissions() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(
                this, Manifest.permission.POST_NOTIFICATIONS
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.POST_NOTIFICATIONS),
                REQUEST_CODE_NOTIFICATION
            )
        }
    }
}

Personalização

Cores

Declare as variáveis no arquivo res/values/colors.xml do seu projeto:

XML
<!-- Cores principais -->
<color name="mediquo_primary_color">#000000</color>
<color name="mediquo_primary_contrast_color">#000000</color>
<color name="mediquo_secondary_color">#000000</color>
<color name="mediquo_accent_color">#000000</color>
<color name="mediquo_notification_color">#000000</color>

<!-- Cores do chat -->
<color name="mediquo_message_text_color_mine">#000000</color>
<color name="mediquo_message_background_color_mine">#000000</color>
<color name="mediquo_message_text_color_their">#000000</color>
<color name="mediquo_message_background_color_their">#000000</color>
<color name="mediquo_message_text_color_alert">#000000</color>
<color name="mediquo_message_background_color_alert">#000000</color>
Variável Uso
mediquo_primary_color Fundo das toolbars e ícones do histórico médico
mediquo_primary_contrast_color Texto e ícone de voltar nas toolbars
mediquo_secondary_color Label de especialidade e fundo do perfil do profissional
mediquo_accent_color Badge de mensagens não lidas e ícone de cadeado
mediquo_notification_color Cor de destaque nas push notifications
mediquo_message_text_color_mine Cor do texto das suas mensagens
mediquo_message_background_color_mine Fundo das suas mensagens
mediquo_message_text_color_their Cor do texto das mensagens recebidas
mediquo_message_background_color_their Fundo das mensagens recebidas
mediquo_message_text_color_alert Cor do texto de mensagens de alerta
mediquo_message_background_color_alert Fundo de mensagens de alerta

Fontes

Crie um diretório de fontes: clique com o botão direito na pasta resNew > Android resource directory → tipo Font.

Adicione três arquivos (.otf ou .ttf) com os nomes exatos:

  • mediquo_bold
  • mediquo_medium
  • mediquo_regular

ProGuard

Se o seu projeto usa minificação, adicione as seguintes regras ao proguard-rules.pro:

Text Only
-keep class com.opentok.** { *; }
-keep class org.webrtc.** { *; }
-keep class com.mediquo.ophiuchus.videocall.** { *; }
-keep class org.otwebrtc.** { *; }
-dontwarn com.opentok.**
-dontwarn org.webrtc.**
-dontwarn com.mediquo.ophiuchus.videocall.**
-dontwarn com.google.api.client.**
-dontwarn org.joda.time.Instant

Próximos Passos