

# IVS Android Broadcast SDK 시작하기 \$1 실시간 스트리밍
<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>

Firebase Crashlytics에 Gradle 빌드 파일이 설정되어 있는지 확인합니다. 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
```

(기호를 자동 및 수동으로 두 번 업로드해도 문제가 되지 않습니다.)

### 릴리스 .apk가 커지지 않도록 방지
<a name="android-debug-symbols-rt-sizing-apk"></a>

릴리스 `.apk` 파일을 패키징하기 전에 Android Gradle 플러그인에서는 공유 라이브러리(IVS Broadcast SDK의 `libbroadcastcore.so` 라이브러리 포함)에서 디버그 정보를 자동으로 제거하려고 시도합니다. 그러나 가끔은 이 상황이 발생하지 않습니다. 따라서 `.apk` 파일이 커질 수 있으며, 디버그 기호를 제거할 수 없고 `.so` 파일을 그대로 패키징하고 있다는 Android Gradle 플러그인의 경고 메시지가 표시될 수 있습니다. 이 상황이 발생하면 다음과 같은 작업을 수행합니다.
+ Android NDK를 설치합니다. 최신 버전이 작동합니다.
+ 애플리케이션의 `build.gradle` 파일에 `ndkVersion <your_installed_ndk_version_number>`를 추가합니다. 애플리케이션 자체에 네이티브 코드가 없더라도 이 작업을 수행합니다.

자세한 내용은 이 [문제 보고서](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();
    }
}
```