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í:
Al intentar realizar el registro: hub.Register es cuando obtenemos el error.
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).
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
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);
}
¿Por qué ocurre esto?
El componente Microsoft.Azure.Mobile.Client hace uso de la biblioteca org.apache.http.legacy ya 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
Publicar un comentario