Error al registrar un dispositivo en Azure Hub Notifications

Si tu aplicación ha dejado de recibir notificaciones y estás haciendo uso del componente Microsoft.Azure.Mobile.Client para registrar un dispositivo y además la versión del sistema operativo sobre la que está corriendo tu app es Android 9 o superior es recomendable que dediques unos minutos a este post.

Aún descargando la última versión de Nuget del componente Microsoft.Azure.Mobile.Client, los problemas siguen sin solucionarse, al intentar hacer un registro del dispositivo en el Hub Notification de Azure, obtenemos el siguiente error:

java.lang.NoClassDefFoundError:failed resolution of :Lorg/apache/http/ProtocolVersion

El código para reproducir el error sería algo así:

try {
    var hub = new WindowsAzure.Messaging.NotificationHub(Constants.AzureHubName,
                                                         Constants.AzureKey,
                                                         MainActivity.Instance);
    var tags = new List() { "hola@micorreo.com" };
    hub.Register(deviceToken, tags.ToArray());
}
catch (Exception ex)
{
    Log.Error(TAG_REGISTER_DEVICE_TOKEN, ex.Message);
}


Al intentar realizar el registro: hub.Register es cuando obtenemos el error.

¿Por qué ocurre esto?

El componente Microsoft.Azure.Mobile.Client hace uso de la biblioteca org.apache.http.legacy y
a partir de la versión de Android 9, esa biblioteca deja de existir en bootclasspath y no se encuentra disponible de manera predeterminada para las apps (según nota oficial en Android Developers).

Solución

Para solucionarlo basta con abrir el archivo de manifiesto del proyecto AndroidManifest.xml situado dentro de la carpeta Properties y añadir el siguiente tag dentro de la sección <application>

<uses-library android:name="org.apache.http.legacy" android:required="false" />

Mas información sobre el error:
https://issuetracker.google.com/issues/79478779#comment11
https://github.com/Azure/azure-notificationhubs-android/issues/9
https://developer.android.com/about/versions/pie/android-9.0-changes-28?hl=es-419

Image by Tumisu from Pixabay 

Comentarios

Entradas populares de este blog

Qué necesito para ser desarrollador de aplicaciones móviles (2ª parte)

Qué necesito para ser desarrollador de aplicaciones móviles (1ª parte)

Distribución de aplicaciones iOS en App Store mediante Visual Studio 2019