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:
repositories {
google()
mavenCentral()
maven { url = uri("https://mediquo.jfrog.io/artifactory/android-sdk") }
}
2. Plugins no build.gradle de projeto¶
3. Dependências no build.gradle do módulo¶
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¶
[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 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:
<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.
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.
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:
Logout¶
Encerra a sessão do paciente no SDK.
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:
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¶
<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+)¶
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:
<!-- 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 res → New > Android resource directory → tipo Font.
Adicione três arquivos (.otf ou .ttf) com os nomes exatos:
mediquo_boldmediquo_mediummediquo_regular
ProGuard¶
Se o seu projeto usa minificação, adicione as seguintes regras ao proguard-rules.pro:
-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¶
- SDK Overview — fluxo completo de integração
- Widget Web — integração para aplicações web
- iOS SDK — integração para iOS