Compatibilidad con Android Pie con el SDK nativo para Android

En este tema, aprenderá a usar Android Pie con Brightcove Native SDK para Android.

Resumen

Android Pie es el sistema operativo Android más nuevo y se lanzó oficialmente el 6 de agosto de 2018. Para obtener detalles sobre las funciones, consulte la Funciones de Android Pie documento. Android Pie incluye varios cambios de comportamiento. La mayoría de ellos afectan a aplicaciones que se dirigen a Android Pie (nivel de API 28), pero también puede encontrar problemas con aplicaciones que se dirigen a una versión anterior de Android, que se ejecuta en un dispositivo Android Pie.

Android 9 Pie
Android 9 Pie

Hay un par de cambios que debe tener en cuenta al utilizar Brightcove SDK para Android:

Para obtener una lista completa de los cambios de comportamiento de sus aplicaciones, consulte la Cambios de comportamiento para todas las aplicaciones documento. Para cambios de comportamiento exclusivos al apuntar a Android Pie, consulte el Cambios de comportamiento para API 28+ documento.

TLS habilitado de forma predeterminada

Transport Layer Security (TLS) es un protocolo para proporcionar comunicaciones seguras a través de una red informática. TLS se implementa sobre HTTP, lo que permite la comunicación cifrada a través de HTTPS.

Cuando Google lanzó Android Marshmallow (API nivel 23), proporcionó una configuración para deshabilitar el tráfico de texto sin cifrar, lo que evitaría que su aplicación hiciera solicitudes HTTP claras. Con el lanzamiento de Android Pie (API nivel 28), el tráfico de texto sin cifrar está deshabilitado de forma predeterminada.

Con el tráfico de texto sin cifrar deshabilitado de forma predeterminada, si su aplicación intenta realizar una solicitud HTTP clara, se lanza una IOException con el siguiente mensaje:

Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted

Para obtener más información, visite el sitio web de Google: Cambios en la seguridad del marco y Configuración de seguridad de la red.

Si su aplicación apunta a Android Pie (API nivel 28) o superior, debe manejar este cambio de comportamiento para que su aplicación funcione como se espera. Tienes tres opciones:

Solo HTTPS

Una opción es asegurarse de que todas sus solicitudes de red utilicen HTTPS. Para hacerlo, siga estos pasos:

  1. Habilite su CDN para una comunicación segura.

    • Los clientes de Video Cloud (ya sea que utilicen la CDN propia o una CDN con nombre) deben comunicarse con sus administradores de cuentas de Brightcove para asegurarse de que las cuentas estén configuradas para entregar a través de HTTPS.
    • Para aquellos que usan activos remotos, es posible que deba configurar su CDN de manera adecuada.

  2. Utilice una comunicación segura para entregar su contenido multimedia. Esto incluye videos, anuncios, subtítulos, imágenes de carteles, miniaturas y otras conexiones API de terceros.

    • Clientes de Video Cloud: Utilice la API de reproducción para recuperar el protocolo seguro para cada uno de sus activos. Brightcove SDK para Android selecciona HTTPS de forma predeterminada cuando está disponible.

    • Clientes de Brightcove Player: Asegúrese de que su contenido multimedia se entregue a través de HTTPS.

HTTP para todos los dominios

Su aplicación puede utilizar tráfico HTTP claro para todos los dominios. Aquí hay dos ejemplos de cómo puede hacer esto:

Actualizar la etiqueta de la aplicación

  1. Para habilitar esto, abra el AndroidManifest archivo y agregue la siguiente línea en el application etiqueta. Por ejemplo:

    <application
       android:name="mypackage.MyApplication"
       android:usesCleartextTraffic="true">
    …
    </application>

Agregar un archivo de configuración de seguridad de red

  1. Cree un archivo xml, por ejemplo network-security-config.xml y agréguelo al res / xml directorio. Vea el siguiente ejemplo para saber cómo permitir tráfico despejado:

    <network-security-config>
       <base-config cleartextTrafficPermitted="true"/>
    </network-security-config>
  2. Establezca el nombre del archivo en su AndroidManifest Como se muestra abajo:

    <application
     android:name="mypackage.MyApplication"
     android:networkSecurityConfig="@xml/network_security_config">
    …
    </application>

    Para obtener más detalles, consulte la Configuración de seguridad de la red documento.

HTTP para dominios específicos

Puede especificar que ciertos dominios puedan utilizar solicitudes HTTP claras. Para ello, sigue estos pasos:

  1. Cree un archivo xml, por ejemplo network-security-config.xml y agréguelo al res / xml directorio. Vea el siguiente ejemplo para saber cómo configurar sus dominios:

    <network-security-config>
     <domain-config cleartextTrafficPermitted="true">
         <domain includeSubdomains="true">c.brightcove.com</domain>
         <domain includeSubdomains="true">solutions.brightcove.com</domain>
     </domain-config>
    </network-security-config>
  2. Establezca el nombre del archivo en su AndroidManifest Como se muestra abajo:

    <application
     android:name="mypackage.MyApplication"
     android:networkSecurityConfig="@xml/network_security_config">
    …
    </application>

    Para obtener más detalles, consulte la Configuración de seguridad de la red documento.

Desactivación del cliente HTTP Apache

Con Android Pie, se ha eliminado la compatibilidad con el cliente HTTP Apache. Esto afecta a las aplicaciones orientadas a Android Pie o superior. También podría afectar a las aplicaciones que se dirigen a versiones anteriores de Android cuando se usa un ClassLoader. En tiempo de ejecución, si el ClassLoader intenta cargar una clase de cliente HTTP Apache en Android Pie, arrojará un NoClassDefFoundError. Para obtener más información, consulte Google: Desactivación del cliente HTTP Apache documento.

Si su aplicación utiliza el complemento Brightcove FreeWheel, experimentará este problema y obtendrá una excepción como se muestra aquí:

java.lang.NoClassDefFoundError: tv.freewheel.utils.URLLoader
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/BasicCookieStore;

Para solucionar este problema, incluya la siguiente línea en el archivo de manifiesto de su aplicación:

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

Constantes obsoletas

Hay varias constantes que quedaron obsoletas en el Administrador de conectividad clase. Algunas de estas constantes son utilizadas actualmente por Brightcove SDK, específicamente por las funciones Offline Playback y Offline Analytics. Aquí está la lista:

  • android.net.ConnectivityManager.TYPE_BLUETOOTH
  • android.net.ConnectivityManager.TYPE_ETHERNET
  • android.net.ConnectivityManager.TYPE_MOBILE
  • android.net.ConnectivityManager.TYPE_VPN
  • android.net.ConnectivityManager.TYPE_WIFI
  • android.net.ConnectivityManager.TYPE_WIMAX

Esto no afecta a ninguna funcionalidad de las características mencionadas, pero tenga en cuenta que estas constantes pueden eliminarse en una futura versión del sistema operativo Android. Esto también se aplica al SDK nativo de Brightcove.