概要
Android Pieは最新のAndroid OSであり、2018年8月6日に正式にリリースされました。機能の詳細については、 Android Pie 機能のドキュメントを参照してください。Androidパイには、いくつかの動作の変更が含まれています。それらのほとんどは Android Pie (API レベル 28) をターゲットとするアプリに影響しますが、Android Pie デバイスで実行されている古いバージョンの Android をターゲットとするアプリでも問題が発生する可能性があります。
Android 版 Brightcove SDK を使用するときに注意すべき変更がいくつかあります。
アプリの動作変更の全リストについては、「すべてのアプリの動作の変更」ドキュメントを参照してください。Android Pie をターゲットとする場合の排他的な動作の変更については、API 28 以降の動作の変更を参照してください。
TLS はデフォルトで有効になっています
トランスポート層セキュリティ (TLS) は、コンピュータネットワーク上で安全な通信を提供するためのプロトコルです。TLS は HTTP の上に実装され、HTTPS を介した暗号化通信が可能です。
Google が Android マシュマロ(API レベル 23)をリリースしたとき、クリアテキストトラフィックを無効にする設定が提供され、アプリがクリアな HTTP リクエストを行うのを防ぐことができます。Android Pie(API レベル 28)のリリースでは、クリアテキストトラフィックはデフォルトで無効になっています。
クリアテキストトラフィックがデフォルトで無効になっている場合、アプリケーションがクリア HTTP 要求を実行しようとすると、IOException がスローされ、次のメッセージが表示されます。
Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
詳細については、Googleのウェブサイトをご覧ください:フレームワークのセキュリティの変更そしてネットワークセキュリティ構成。
アプリが Android Pie(API レベル 28)以上を対象とする場合、アプリが期待どおりに動作するように、この動作の変更を処理する必要があります。このオプションには次の3つがあります。
HTTPSのみ
1 つのオプションは、すべてのネットワークリクエストが HTTPS を使用していることを確認することです。これを行うには、次の手順を実行します。
-
安全な通信のために CDN を有効にします。
- Video Cloud のお客様は(自社の CDN または指定の CDN のいずれを使用している場合でも)、Brightcoveのアカウントマネージャに連絡して、アカウントが HTTPS 経由で配信されるように設定されていることを確認する必要があります。
-
リモートアセットを使用している場合は、CDN を適切に設定する必要があります。
-
セキュリティで保護された通信を使用してメディアコンテンツを配信します。これには、動画、広告、キャプション、ポスター画像、サムネイル、その他のサードパーティの API 接続が含まれます。
-
ビデオクラウドのお客様:Playback API を使用して、各アセットの安全なプロトコルを取得します。Android 版 Brightcove SDK では、利用可能な場合、デフォルトで HTTPS が選択されます。
- Brightcoveプレーヤーのお客様:メディアコンテンツが HTTPS 経由で配信されていることを確認します。
-
すべてのドメインの HTTP
アプリでは、すべてのドメインでクリアな HTTP トラフィックを使用できます。ここでは、これを行う方法の 2 つの例を挙げます。
アプリケーショントグを更新する
-
これを有効にするには、 AndroidManifest ファイルを開き、
application
タグに次の行を追加します。例は次のとおりです。<application android:name="mypackage.MyApplication" android:usesCleartextTraffic="true"> … </application>
ネットワークセキュリティ設定ファイルを追加する
-
network-security-config.xml などの xml ファイルを作成し、 res/xml ディレクトリに追加します。クリアトラフィックを許可する方法については、次の例を参照してください。
<network-security-config> <base-config cleartextTrafficPermitted="true"/> </network-security-config>
-
以下に示すように、あなたのAndroidマニフェストにファイル名を設定します。
<application android:name="mypackage.MyApplication" android:networkSecurityConfig="@xml/network_security_config"> … </application>
詳細については、Android のネットワークセキュリティ設定ドキュメントを参照してください。
特定のドメインの HTTP
クリア HTTP 要求の使用を許可する特定のドメインを指定できます。これを行うには、次の手順を実行します。
-
network-security-config.xml などの xml ファイルを作成し、 res/xml ディレクトリに追加します。ドメインの設定方法については、次の例を参照してください。
<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>
-
以下に示すように、あなたのAndroidマニフェストにファイル名を設定します。
<application android:name="mypackage.MyApplication" android:networkSecurityConfig="@xml/network_security_config"> … </application>
詳細については、Android のネットワークセキュリティ設定ドキュメントを参照してください。
Apache HTTP クライアントの非推奨
Android パイでは、Apache HTTP クライアントのサポートが削除されました。これは、Android Pie 以上を対象とするアプリに影響します。非標準を使用している場合、古いバージョンの Android をターゲットとするアプリにも影響する可能性がありますClassLoader
。実行時に、が Android Pie に Apache HTTP ClassLoader
クライアントクラスをロードしようとすると、がスローされますNoClassDefFoundError
。詳細については、Google の以下のページをご覧ください。Apache HTTP クライアントの非推奨ドキュメント。
アプリで Brightcove FreeWheel プラグインを使用している場合、この問題が発生し、次に示すように例外が発生します。
java.lang.NoClassDefFoundError: tv.freewheel.utils.URLLoader
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/BasicCookieStore;
この問題を解決するには、アプリのマニフェストファイルに次の行を含めます。
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
廃止された定数
ConnectivityManager クラスでは廃止された定数がいくつかあります。これらの定数の一部は、現在、Brightcove SDK、特にオフライン再生およびオフライン分析機能によって使用されています。ここにリストがあります:
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
これは、上記の機能の機能には影響しませんが、これらの定数は将来のAndroid OSバージョンで削除される可能性があることに注意してください。これは、Brightcoveのネイティブ SDK にも適用されます。