

# IVS Android Broadcast SDK の開始方法 \$1 Real-Time Streaming
<a name="broadcast-android-getting-started"></a>

このドキュメントでは、IVS Real-Time Streaming Android Broadcast SDK の使用を開始するためのステップについて説明します。

## ライブラリのインストール
<a name="broadcast-android-install"></a>

Amazon IVS Android ブロードキャストライブラリを Android 開発環境に追加する方法は以下のようにいくつかあります。Gradle を直接使用する、Gradle バージョンカタログを使用する、または SDK を手動でインストールする。

**Gradle を直接使用する**: 次のように、ライブラリをモジュールの `build.gradle` ファイルに追加します (IVS Broadcast SDK の最新バージョンの場合)。

```
repositories {
    mavenCentral()
}
 
dependencies {
     implementation 'com.amazonaws:ivs-broadcast:1.40.0:stages@aar'
}
```

**Gradle バージョンカタログを使用する**: まず、以下をモジュールの `build.gradle` ファイルに含めます。

```
implementation(libs.ivs){
   artifact {
      classifier = "stages"
      type = "aar"
   }
}
```

次に、`libs.version.toml` ファイルに以下を含めます (IVS Broadcast SDK の最新バージョンの場合)。

```
[versions]
ivs="1.40.0"

[libraries]
ivs = {module = "com.amazonaws:ivs-broadcast", version.ref = "ivs"}
```

**SDK を手動でインストールする**: 次の場所から最新バージョンをダウンロードします。

[https://search.maven.org/artifact/com.amazonaws/ivs-broadcast](https://search.maven.org/artifact/com.amazonaws/ivs-broadcast)

必ず `-stages` が付いた `aar` をダウンロードしてください。

**また、スピーカーフォンに対する SDK コントロールも許可**します。どのインストール方法を選択しても、次のアクセス許可をマニフェストに追加して、SDK がスピーカーフォンを有効または無効にできるようにします。

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

## デバッグ情報を含む SDK の使用
<a name="broadcast-android-using-debug-symbols-rt"></a>

また、デバッグ情報を含む Android Broadcast SDK のバージョンも公開しています。このバージョンを使用すると、IVS Broadcast SDK (つまり、`libbroadcastcore.so` ) でクラッシュした場合、Firebase Crashlytics のデバッグレポート (スタックトレース) の品質を向上させることができます。これらのクラッシュを IVS SDK チームに報告すると、高品質のスタックトレースにより、問題の修正が容易になります。

このバージョンの SDK を使用するには、Gradle ビルドファイルに以下を含めます。

```
implementation "com.amazonaws:ivs-broadcast:$version:stages-unstripped@aar"
```

以下の代わりに上記の行を使用します。

```
implementation "com.amazonaws:ivs-broadcast:$version:stages@aar"
```

### Firebase Crashlytics へのシンボルのアップロード
<a name="android-debug-symbols-rt-firebase-crashlytics"></a>

Gradle ビルドファイルが Firebase Crashlytics 用に設定されていることを確認します。以下の Google の指示に従ってください。

[https://firebase.google.com/docs/crashlytics/ndk-reports](https://firebase.google.com/docs/crashlytics/ndk-reports)

`com.google.firebase:firebase-crashlytics-ndk` を依存関係として必ず含めてください。

リリース用にアプリを構築する場合、Firebase Crashlytics プラグインは情報を自動的にアップロードするはずです。情報を手動でアップロードするには、次のいずれかを実行します。

```
gradle uploadCrashlyticsSymbolFileRelease
```

```
./gradlew uploadCrashlyticsSymbolFileRelease
```

(情報が自動と手動の両方で 2 回アップロードされても問題ありません)。

### Release .apk の肥大化を防ぐ
<a name="android-debug-symbols-rt-sizing-apk"></a>

リリース `.apk` ファイルをパッケージ化する前に、Android Gradle Plugin は共有ライブラリ (IVS Broadcast SDK の `libbroadcastcore.so` ライブラリを含む) からデバッグ情報を自動的に削除しようとします。ただし、これはときに動作しないことがあります。その結果、`.apk` ファイルが肥大化し、Android Gradle プラグインから、「デバッグ情報を削除できず、そのまま `.so` ファイルをパッケージ化している」という警告メッセージが表示される可能性があります。このような場合は、以下のことを試してみます。
+ Android NDK をインストールします。すべての最新バージョンが機能します。
+ `ndkVersion <your_installed_ndk_version_number>` をアプリケーションの `build.gradle` ファイルに追加します。アプリケーション自体にネイティブコードが含まれていない場合でも、これを行います。

詳細については、「[問題レポート](https://issuetracker.google.com/issues/353554169)」を参照してください。

## 必要なアクセス許可
<a name="broadcast-android-permissions"></a>

アプリはユーザーのカメラとマイクへのアクセス許可を要求する必要があります。(これは、Amazon IVS に特有なものではなく、カメラやマイクにアクセスする必要があるアプリケーションには必須です。)

ここでは、ユーザーがすでにアクセス許可を付与しているかどうかを確認し、付与していない場合は、許可を求めます。

```
final String[] requiredPermissions =
         { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO };

for (String permission : requiredPermissions) {
    if (ContextCompat.checkSelfPermission(this, permission) 
                != PackageManager.PERMISSION_GRANTED) {
        // If any permissions are missing we want to just request them all.
        ActivityCompat.requestPermissions(this, requiredPermissions, 0x100);
        break;
    }
}
```

ここでは、ユーザーの応答を取得します。

```
@Override
public void onRequestPermissionsResult(int requestCode, 
                                      @NonNull String[] permissions,
                                      @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode,
               permissions, grantResults);
    if (requestCode == 0x100) {
        for (int result : grantResults) {
            if (result == PackageManager.PERMISSION_DENIED) {
                return;
            }
        }
        setupBroadcastSession();
    }
}
```