Prise en charge d'Android Pie avec le SDK natif pour Android

Dans cette rubrique, vous apprendrez comment utiliser Android Pie avec le SDK natif Brightcove pour Android.

Aperçu

Android Pie est le dernier système d'exploitation Android et a été officiellement publié le 6 août 2018. Pour plus de détails sur les fonctionnalités, consultez le Caractéristiques de la tarte Android document. Android Pie inclut plusieurs changements de comportement. La plupart d'entre eux affectent les applications qui ciblent Android Pie (niveau API 28), mais vous pouvez également rencontrer des problèmes avec les applications ciblant une ancienne version d'Android, s'exécutant sur un appareil Android Pie.

Tarte Android 9
Tarte Android 9

Il y a quelques changements à prendre en compte lors de l'utilisation du Brightcove SDK pour Android :

Pour une liste complète des changements de comportement pour vos applications, consultez le Changements de comportement pour toutes les applications document. Pour les changements de comportement exclusifs lors du ciblage d'Android Pie, consultez le Changements de comportement pour l'API 28+ document.

TLS activé par défaut

Transport Layer Security (TLS) est un protocole permettant de sécuriser les communications sur un réseau informatique. TLS est implémenté au-dessus de HTTP, permettant une communication cryptée sur HTTPS.

Lorsque Google a publié Android Marshmallow (API niveau 23), il a fourni une configuration pour désactiver le trafic en texte clair, ce qui empêcherait votre application de faire des requêtes HTTP claires. Avec la sortie d'Android Pie (API niveau 28), le trafic en texte clair est désactivé par défaut.

Avec le trafic de texte en clair désactivé par défaut, si votre application tente d'effectuer une requête HTTP en clair, une exception IOException est levée avec le message suivant :

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

Pour plus d'informations, visitez le site de google : Modifications de la sécurité du cadre et Paramétrage de la sécurité réseau.

Si votre application cible Android Pie (niveau API 28) ou supérieur, vous devez gérer ce changement de comportement afin que votre application fonctionne comme prévu. Vous avez trois options :

HTTPS uniquement

Une option consiste à vous assurer que toutes vos requêtes réseau utilisent HTTPS. Pour ce faire, suivez ces étapes :

  1. Activez votre CDN pour une communication sécurisée.

    • Les clients de Video Cloud (que vous utilisiez le CDN maison ou un CDN nommé) doivent contacter leurs responsables de compte Brightcove pour s'assurer que les comptes sont configurés pour fournir via HTTPS.
    • Pour ceux qui utilisent des ressources distantes, vous devrez peut-être configurer votre CDN de manière appropriée.

  2. Utilisez une communication sécurisée pour diffuser votre contenu multimédia. Cela inclut les vidéos, les publicités, les légendes, les images d'affiches, les vignettes et d'autres connexions API tierces.

    • Clients de Video Cloud : Utilisez l'API Playback pour récupérer le protocole sécurisé pour chacun de vos actifs. Le Brightcove SDK pour Android sélectionne HTTPS par défaut lorsqu'il est disponible.

    • Clients Brightcove Player : Assurez-vous que votre contenu multimédia est diffusé via HTTPS.

HTTP pour tous les domaines

Votre application peut utiliser un trafic HTTP clair pour tous les domaines. Voici deux exemples de la façon dont vous pouvez procéder :

Mettre à jour la balise de l'application

  1. Pour l'activer, ouvrez le AndroidManifeste fichier et ajoutez la ligne suivante dans le application étiqueter. Par exemple :

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

Ajouter un fichier de configuration de sécurité réseau

  1. Créer un fichier xml, par exemple network-security-config.xml , et l'ajouter au res/xml annuaire. Consultez l'exemple suivant pour savoir comment autoriser un trafic clair :

    <network-security-config>
       <base-config cleartextTrafficPermitted="true"/>
    </network-security-config>
  2. Définissez le nom du fichier dans votre AndroidManifeste comme indiqué ci-dessous:

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

    Pour plus de détails, voir Android Paramétrage de la sécurité réseau document.

HTTP pour des domaines spécifiques

Vous pouvez spécifier certains domaines à autoriser à utiliser des requêtes HTTP claires. Pour ce faire, procédez comme suit :

  1. Créer un fichier xml, par exemple network-security-config.xml , et l'ajouter au res/xml annuaire. Consultez l'exemple suivant pour savoir comment définir vos domaines :

    <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. Définissez le nom du fichier dans votre AndroidManifeste comme indiqué ci-dessous:

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

    Pour plus de détails, voir Android Paramétrage de la sécurité réseau document.

Abandon du client HTTP Apache

Avec Android Pie, la prise en charge du client HTTP Apache a été supprimée. Cela affecte les applications qui ciblent Android Pie ou supérieur. Cela peut également affecter les applications qui ciblent les anciennes versions d'Android lors de l'utilisation d'un ClassLoader. Au moment de l'exécution, si le ClassLoader tente de charger une classe client HTTP Apache sur Android Pie, il lancera un NoClassDefFoundError. Pour plus d'informations, consultez Google : Abandon du client HTTP Apache document.

Si votre application utilise le plugin Brightcove FreeWheel, vous rencontrerez ce problème et obtiendrez une exception comme indiqué ici :

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

Afin de résoudre ce problème, incluez la ligne suivante dans le fichier manifeste de votre application :

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

Constantes déconseillées

Il y a plusieurs constantes qui ont été dépréciées dans le Gestionnaire de connectivité classer. Certaines de ces constantes sont actuellement utilisées par le Brightcove SDK, en particulier par les fonctionnalités de lecture hors ligne et d'analyse hors ligne. Voici la liste :

  • 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

Cela n'affecte aucune fonctionnalité sur les fonctionnalités mentionnées, mais sachez que ces constantes pourraient être supprimées dans une future version du système d'exploitation Android. Cela s'applique également au Brightcove Native SDK.