アンドロイドSDK

Vonage Video API Android SDKを使用すると、Vonage Video APIを使用したビデオセッションを使用できます。 セッションを使用できます。

について Vonage Video API Android SDK リファレンス はオンラインで入手できる。

重要な注意事項

  • Android SDK 2.30.0+は、4KBと16KBの両方のページサイズのデバイスをサポートしています。
  • Android SDK 2.29.1+は許可が必要です。 ACCESS_NETWORK_STATE AndroidのAPIレベル35以上でも許可が必要です。 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.全リストを見る 許可.
  • Android SDK 2.28.0+には、最低24のAndroid APIレベルが必要です。
  • Android SDK 2.24.3+、2.25.4+、2.26.0+には、最低23のAndroid APIレベルが必要です。
  • Android SDK 2.24.0以降では、32ビットx86アーキテクチャがサポートされなくなりました。
  • APIレベル31以上を対象とするアプリケーションでは、許可が必要になりました。 READ_PHONE_STATE.全リストを見る 許可.

クライアントSDKは、ウェブ、iOS、Windows、macOS、Linux、およびReact ネイティブにも対応しています。すべてのクライアントSDKは相互に作用することができます。詳しくは Vonage Videoクライアント、サーバ、セッションなどの基本については ビデオAPIの基礎 ページを参照されたい。

コードサンプル

サンプルコードについては vonage-video-android-sdk-samples repo をGitHubで公開している。

相互運用性

Video Android SDK 2.34.1 を使用して作成されたアプリは、Video Client SDK バージョン 2.32 以降を使用して作成された Vonage Video アプリと相互運用可能です:

  • OpenTok.js
  • iOS SDK
  • Windows SDK
  • macOS SDK
  • Linux SDK
  • リアクト・ネイティブSDK

インストール

Mavenのバージョンは https://search.maven.org/artifact/com.vonage/client-sdk-video.アーティファクトIDは "client-sdk-video".

詳しくは Android SDKを使用して独自のアプリを作成する.

開発者とクライアントの要件

Android SDKは、1つの公開オーディオ・ビデオ・ストリーム、1つのサブスクライブ・オーディオ・ビデオ・ストリーム、および最大5つの追加サブスクライブ・オーディオ専用ストリームを同時にサポートします。

Android SDKを使用してセッションに2つ以上のクライアントを接続するには、Vonage Video Media Routerを使用するセッション(メディアモードがroutedに設定されたセッション)を作成します。以下を参照してください。 Vonage ビデオ・メディア・ルーターとメディア・モード.

SDKは高速Wi-Fiおよび4G LTEネットワークでサポートされている。

Android SDKは以下の環境でサポートされています。 アルメアビV7A, アルメアビ64-V8Aそして x86_64 アーキテクチャーである。

SDKは、バージョン2.30.0以降、4KBと16KBのページサイズデバイスの両方をサポートしています。これにより、機能が保証され、互換性が向上し、クラッシュが防止されます。詳細については このAndroidドキュメントのページサイズ.

Android SDKは、カメラ(ビデオ公開用)を搭載し、十分なCPUとメモリをサポートするAndroid 7.0+デバイス(Nougat、API Level 24)で動作します。

Android SDKを使用して独自のアプリを作成する

Mavenのバージョンは https://search.maven.org/artifact/com.vonage/client-sdk-video.

アーティファクトIDは "client-sdk-video".アプリを修正して、Android SDKを以下からダウンロードします。 https://search.maven.org/artifact/com.vonage/client-sdk-video.例えば:

  1. プロジェクトのbuild.gradleを編集し、以下のコード・スニペットを allprojects/repositories セクションを参照されたい: mavenCentral()
  2. アプリのbuild.gradleファイルを修正し、以下のコード・スニペットを dependencies セクションを参照されたい: implementation 'com.vonage:client-sdk-video:2.34.0'
  3. アプリのbuild.gradleファイルに以下のコード・スニペットが含まれていることを確認する。 android セクションを参照してください(Android Studio 4.1以降、このスニペットは新規プロジェクト作成時に表示されます)。

Android SDKのバージョンが2.28.1より大きい場合:

compileOptions {
      sourceCompatibility JavaVersion.VERSION_17
      targetCompatibility JavaVersion.VERSION_17
}

Android SDKのバージョンが2.22.0から2.28.1の場合:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
}

システム要件

信頼性の高いビデオストリーミングを行うには、お使いのAndroid端末が以下の推奨スペックを満たしていることをご確認ください:

  • CPU最近のデュアルコアプロセッサ;ARM64(ARMv8)クアッドコア以上、2.0GHz以上(例:Qualcomm Snapdragon 600+シリーズ、Samsung Exynos 7シリーズ以上、Google Tensor(Pixelデバイス))。
  • GPU:Adreno 500+シリーズ(クアルコム)、Mali-G71+(ARM)、ハードウェアアクセラレーションによるビデオエンコード/デコード。
  • RAM:グループ通話やマルチタスクのために最低6GBのRAM。
  • ディスプレイより良いユーザーエクスペリエンスのための5"+。
  • バッテリー容量:長時間のビデオ通話に対応する3000mAh以上。
  • ネットワーク信頼性の高いインターネット接続。Wi-Fiまたは携帯電話で動作。

これらの推奨事項により、ビデオストリーミング時の安定した再生、CPU使用率の低下、スムーズなパフォーマンスが保証されます。

カテゴリー別の端末例:Samsung Galaxy A12、Moto G Play、Nokia G10はエントリーレベル、Google Pixel 6a、Samsung Galaxy A52/A53、OnePlus Nordはミッドレンジ、Samsung Galaxy S23/S24、Google Pixel 8 Pro、OnePlus 11はハイエンド。

アクセス許可

Android SDKは以下のパーミッションを使用します:

  • android.permission.ACCESS_NETWORK_STATE -- Vonage Video Android SDKはバージョン2.29.1以降、この許可を必要とします。
  • android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS -- Vonage Video Android SDKは、APIレベル35以上のバージョン2.29.1以降、この許可を必要とします。
  • android.permission.BLUETOOTH_CONNECT -- APIレベル31以上の場合、これを有効にする必要があります。APIレベル31以上をターゲットとするAndroid SDK DefaultAudioDeviceでBluetoothデバイスを使用したい場合は、アプリでランタイムパーミッションを求めるか、アプリの設定で("Nearby devices/Bluetooth")パーミッションを手動で有効にしてください。
  • android.permission.READ_PHONE_STATE -- Vonage Video Android SDKはAPIレベル22以下、31以上でこのパーミッションを要求します。
  • android.permission.CAMERA -- もしあなたのアプリがデフォルトのビデオキャプチャを使用せず、カメラにアクセスしないのであれば、この権限を削除することができます。
  • android.permission.INTERNET -- 必要だ。
  • android.permission.RECORD_AUDIO -- もしあなたのアプリがデフォルトのオーディオデバイスを使用せず、マイクにアクセスしないのであれば、この権限を削除することができます。
  • android.permission.MODIFY_AUDIO_SETTINGS -- もしあなたのアプリがデフォルトのオーディオデバイスを使用せず、マイクにアクセスしないのであれば、この権限を削除することができます。
  • android.permission.BLUETOOTH -- デフォルトのオーディオデバイスはBluetoothオーディオをサポートしています。あなたのアプリがデフォルトのオーディオデバイスを使用せず、Bluetoothを使用しない場合、この権限を削除することができます。
  • android.permission.BROADCAST_STICKY -- このパーミッションはAndroid SDKによって使用されていないと判断しました。

アプリのマニフェストにこれらを追加する必要はありません。Android SDKが自動的に追加します。ただし、API レベル 21 以降では、特定のパーミッションでユーザーにプロンプトを表示する必要があります。

あなたのアプリは、必要ないこれらのパーミッションのいずれかを削除することができます。参照 この投稿 そして このAndroidドキュメント.例えば、これは android.permission.CAMERA を許可した:

<uses-permission android:name="android.permission.CAMERA" tools:node="remove"/>

Vonage Video Android SDKのProGuardルール

ProGuardの推奨構成は以下の通り:

-keeppackagenames
-keep class com.opentok.** { *; }
-keep class com.vonage.** { *; }

Android Studio 3.4またはAndroid Gradleプラグイン3.4.0+を使用している場合、シュリンク、難読化、最適化はデフォルトで自動的に有効になります。 Vonage Video Android SDKの縮小および難読化は推奨されません。.上記の設定により、Vonage Video Android SDKのソースコードは保持され、その他のアプリは縮小されません。Vonage Video Android SDKパッケージ名を保持するには、フラグ -keeppackagenames.コンパイラーは、デフォルトで一連の最適化を自動的に実行する。それ以外の最適化は推奨されないが、プロジェクトのgradle.propertiesファイルに以下を追加することで、実行時の問題を回避するためにProGuardルールを追加する必要があるかもしれない、追加の最適化を有効にすることが可能である:

android.enableR8.fullMode=true

Vonage Video Android SDKの最小化は推奨されません。縮小して Vonage Video Android SDKを縮小および難読化することは推奨されません。 警告が発生します。これらは無効にしてください。

# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn org.bouncycastle.jsse.BCSSLParameters
-dontwarn org.bouncycastle.jsse.BCSSLSocket
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
-dontwarn org.conscrypt.Conscrypt$Version
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.ConscryptHostnameVerifier
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE

参照 このAndroidドキュメント ProGuardの全体的なルールとその機能性をよりよく理解することができます。

Android ConnectionServiceの統合

アンドロイドの 接続サービス を使用して、Android SDKのオーディオ・ビデオ機能を使用するVoIPアプリを作成します。基本的なVoIPアプリを作成するには

  • を登録する。 android.telecom.ConnectionService をAndroidManifest.xmlファイルに追加します。
<service android:name="com.example.package.MyConnectionService"
    android:label="@string/some_label_for_my_connection_service"
    android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
    <intent-filter>
        <action android:name="android.telecom.ConnectionService" />
    </intent-filter>
</service>
  • を継承したクラスを作成する。 android.telecom.ConnectionService クラスのメソッドを実装する。のメソッドを実装する。 ConnectionService クラスを含む onCreateIncomingConnection(), onCreateOutgoingConnection, onCreateIncomingConnectionFailed()そして onCreateOutgoingConnectionFailed().
  • を継承したクラスを作成する。 android.telecom.Connection クラスのメソッドを実装する。のメソッドを実装する。 Connection クラスを含む onAnswer() そして onDisconnect.を実施した。 onAnswer() メソッドを使用すると、Vonage Video セッションに接続し、セッションにストリームを公開し、セッションで作成されたストリームを購読するコードを有効にすることができます。メソッドの実装では onDisconnect() メソッドを呼び出すと、セッションを切断できる(ストリームの公開と購読を停止できる)。
  • Google Firebaseのようなサービスを使って、アプリのプッシュ通知を実装することができる。アプリがバックグラウンドにある時や閉じている時に通知を設定することができる。こうすることで、アプリが閉じている状態でもVoIPコールを受信することができます。

使用時 ConnectionServiceを使用する。 AudioDeviceManager.getAudioFocusManager() メソッドを実装し AudioFocusManager インスタンスを作成し、音声フォーカスの制御をアプリに委譲します。これらは Vonage Android SDK で定義されています:

private AudioDeviceManager audioDeviceManager;
private BaseAudioDevice.AudioFocusManager audioFocusManager;

public void setupAudioFocusManager(Context context) {
    audioDeviceManager = new AudioDeviceManager(context);
    audioFocusManager = audioDeviceManager.getAudioFocusManager();
    audioFocusManager.setRequestAudioFocus(false);
}

public void notifyAudioFocusIsActive() {
    audioFocusManager.audioFocusActivated();
}

public void notifyAudioFocusIsInactive() {
    audioFocusManager.audioFocusDeactivated();
}

オーディオフォーカスをアプリに委譲すると、SDKは自動オーディオルーティングを停止します。代わりに、このルーティング・ロジックは ConnectionServiceこれは、コネクションの CallEndpoint そして CallAudioState API。あなたのアプリは、オーディオデバイスの列挙と選択ロジックのサポートを実装する必要があります。

この権限委譲により、適切なオーディオ・ルーティングとアンドロイド・テレコム・システムとの連携が保証される。

参照 サンプルVOIPアプリ での vonage-video-android-sdk-samples レポを参照。これは ConnectionService クラスを使用して、Android SDKを使用するVoIPアプリを作成します。

フォアグラウンド・サービス

Androidのフォアグラウンド・サービスは、アプリがバックグラウンドにあるときでもカメラやマイク機能にアクセスし続けるために不可欠です。ビデオチャットアプリの場合、これはマルチタスク中でもビデオや音声をキャプチャし続けることができることを意味します。Android 14 (API レベル 34) 以降では、アプリのマニフェストで各フォアグラウンド サービスに対して適切なサービス タイプを宣言する必要があります。 FOREGROUND_SERVICE_CAMERA パーミッションが必要です。さらに、使用中の制限を受けるCAMERAパーミッションなど、必要なランタイムパーミッションをリクエストする必要があります。この設定により、アプリがバックグラウンドでカメラとマイクの機能を操作するために必要な権限を確保し、最新のAndroid要件とベストプラクティスに沿うようになります。

フォアグラウンド・サービスのセットアップ

フォアグラウンド・サービスとは

フォアグラウンド・サービスでは、ユーザーにとって目立つ操作を非同期で実行できます。フォアグラウンド・サービスはステータス・バー通知を表示し、アプリがフォアグラウンドでタスクを実行し、システム・リソースを消費していることをユーザーに知らせます。

フォアグラウンド・サービスを使用するユースケースの例としては、以下のようなものがある:

  • ユーザーが別のアプリを開いても、音声をキャプチャしてピアに送信し続けます。
  • ユーザーがアプリを切り替えながら画面を共有できるようにする。
  • ビデオ通話を聞きながら画面をオフにできる。

フォアグラウンド・サービスの種類

アンドロイド10では android:foregroundServiceType 属性の中に <service> 要素である。この要素のアイデアは、サービスがどのような仕事をするのかを明示的に指定することである。

Android 14では、フォアグラウンド・サービス・タイプの指定が必須となった。これは、フォアグラウンド・サービスの正しい使い方と、デバイス・メーカー間の一貫性を確保するためである。

現在サポートされているタイプは以下の通り:

  • カメラ (Android 11では必須) - ビデオ通話アプリなど、バックグラウンドからカメラにアクセスする場合。
  • コネクテッドデバイス - ブルートゥース・フィットネス機器などの外部機器と相互作用する場合
  • データシンク - データをアップロードまたはダウンロードする際に、DownloadManager、BackupManager、またはWorkManagerのような代替を使用する必要があります。
  • 健康 (アンドロイド14の新機能) - エクササイズ・トラッカーなどのフィットネス・アプリ用
  • 場所 (Android 10では必須) - ナビゲーションなどで位置情報が必要な場合
  • メディア再生 - SpotifyやNetflixなど、バックグラウンドでオーディオやビデオの再生を続ける場合
  • メディアプロジェクション - コンテンツを外部デバイスやスクリーンに投影する場合
  • マイク (Android 11では必須) - アプリの呼び出しなど、バックグラウンドからマイクにアクセスする場合
  • フォンコール - 進行中の通話を継続する場合
  • リモートメッセージ (Android 14の新機能) - テキストメッセージをあるデバイスから別のデバイスに転送する場合
  • ショートサービス - 中断できない重要な仕事を素早く終わらせる必要がある場合、3分程度しか稼働できない
  • 特殊用途 - 他のタイプがユースケースをカバーできない場合
  • システム免除 - システムアプリ用に予約

フォアグラウンド・サービスタイプの宣言

Android 14をサポートする最初のステップは、AndroidManifestファイルのサービス宣言を更新し、正しいフォアグラウンド・サービス・タイプを指定することです。

あなたのサービスが複数のタイプを必要とする場合、次のように|演算子を使用してそれらを組み合わせることができます:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
    <service
        android:name=".MyForegroundService"
        android:foregroundServiceType="microphone|camera"
        android:exported="false">
    </service>
</manifest>

マニフェストでそのタイプを宣言せずにフォアグラウンドサービスを開始しようとすると、システムは MissingForegroundServiceTypeException 電話すると startForeground().

特定のフォアグラウンド・サービスの許可を要求する

Android 9 (API 28)以降では、アプリは以下をリクエストする必要があった。 foreground_service 権限が自動的に付与されました。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

Android 14(API 34)以降、アプリはフォアグラウンド・サービスのタイプに応じて特定のパーミッションを追加要求する必要がある。したがって、あなたのサービスがバックグラウンドからマイクにアクセスし続ける場合、次のように指定する必要があります。 フォアグラウンド・サービス・マイクロフォン.許可はシステムによって自動的に付与される。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"/>

サービスが複数のタイプを必要とする場合、すべてのタイプに対してこのパーミッションを宣言しなければならない。

この2つの許可のどちらかを申告し忘れると、次のようなメッセージが表示されます。 セキュリティ例外 正確な理由とともに。

Android 13 (API 33)以上では、次のように宣言してください。 POST_NOTIFICATIONS そして、フォアグラウンド・サービス通知を確実に表示させる必要がある場合は、実行時にリクエストしてください。このサンプルにはそのフローが含まれています。

フォアグラウンド・サービスを起動する

あなたの Activity その他 ContextAndroidXでサービスを開始し、サポートされているすべてのバージョンで正しいAPIが使用されるようにします。 MainActivity このプロジェクトでは):

import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat

fun startMyForegroundService() {
    val serviceIntent = Intent(this, MyForegroundService::class.java)
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
        == PackageManager.PERMISSION_GRANTED
    ) {
        ContextCompat.startForegroundService(applicationContext, serviceIntent)
    }
}

ContextCompat.startForegroundService() コール startForegroundService() API26+と startService() 古いAPIで。

このコード・スニペットはサービスを起動する。しかし、サービスはまだフォアグラウンドで実行されていません。サービス自体の内部で startForeground() すぐに。AndroidXでは ServiceCompat.startForeground() を渡すことができます。 foregroundServiceType マニフェストと一致するビットマスク ( MyForegroundService このプロジェクトでは):

import android.app.Notification
import android.content.pm.ServiceInfo
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.ServiceCompat

val notification: Notification = NotificationCompat.Builder(this, CHANNEL_ID)
    .setContentTitle("Audio Call in Progress")
    .setContentText("Your microphone is active while the app is in the background.")
    .setPriority(NotificationCompat.PRIORITY_HIGH)
    .setOngoing(true)
    .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)
    .build()

ServiceCompat.startForeground(
    this,
    NOTIFICATION_ID,
    notification,
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE
    } else {
        0
    },
)

を作成する。 NotificationChannel (Android 8.0+)で、通知を作成する前に ForegroundServiceStartNotAllowedException アプリが現在の状態からフォアグラウンド・サービスを開始することを許可されていない場合、API 31+上で。

注: フォアグラウンド・サービス・タイプを startForeground / ServiceCompat.startForeground をスローします。 IllegalArgumentException.

Google Play Consoleでユースケースの詳細を入力してください。

Android 14をターゲットとし、フォアグラウンドサービスタイプを使用するアプリの新バージョンをGoogle Play Consoleにアップロードすると、コンソールに使用状況に関する追加情報を提供するプロンプトが表示されます。

Googleはアプリがフォアグラウンドサービスを適切に使用していることを確認したいため、アプリのコンテンツページ(ポリシー -> アプリのコンテンツ)で新しい宣言を提出する必要があります。

宣言する各フォアグラウンド・サービス・タイプについて、以下を実行する必要がある:

  • そのフォアグラウンドサービスタイプを使用しているアプリの機能を記述する。
  • タスクがシステムによって延期または中断された場合のユーザーへの影響を記述する。
  • 各フォアグラウンド・サービス機能のデモ動画へのリンクを含めること。ビデオでは、ユーザーがアプリ内でその機能をトリガーするために必要な手順を示す必要があります。
  • 各フォアグラウンド・サービス・タイプについて、特定のユースケースを選択してください。あらかじめ設定されているユースケースのリストから選択するか、手動で入力することができます。

サンプルアプリ

参照 ベーシック・ビデオチャット・ウィズ・フォアグラウンド・サービス サンプルの vonage-video-android-sdk-サンプル レポ。

詳しくはアンドロイド フォアグラウンド・サービスの概要 ドキュメンテーション

詳細情報

各Androidメソッドの詳細なドキュメントは リファレンスガイド.

新機能と既知の問題のリストについては リリースノート.