---
title: Kotlin APIリファレンス
description: OpenTester Android SDK 0.1.0の設定、関数、データモデル、エラー型です。
---

# Kotlin APIリファレンス {#kotlin-api-reference}

パッケージは`dev.opentester.sdk`です。SDK `0.1.0`を対象とします。

## OpenTesterConfig {#opentesterconfig}

```kotlin
data class OpenTesterConfig(
    val appId: String,
    val apiBaseUrl: String,
    val webBaseUrl: String,
    val redirectUri: String,
    val allowInsecureLocalhost: Boolean = false,
    val languageTag: String = "en",
)
```

| フィールド | 説明 |
| --- | --- |
| `appId` | コンソールで発行したアプリID。サーバーはUUIDを要求 |
| `apiBaseUrl` | APIオリジン。例: `https://api.opentester.app`。SDKが`/api/v1`を追加 |
| `webBaseUrl` | Webオリジン。SDKがログイン用の`/sdk/authorize`を追加 |
| `redirectUri` | 登録済みHTTPS App Link。query、fragment、ユーザー情報は不可 |
| `allowInsecureLocalhost` | 開発用ローカルHTTPとサンプルコールバックを許可。既定は`false` |
| `languageTag` | SDKメッセージ、APIの`Accept-Language`、ブラウザー認証の言語。既定は`en` |

オリジンにパス、認証情報、query、fragmentは含めません。通常はHTTPSが必須です。`allowInsecureLocalhost = true`の場合、HTTPは`localhost`、`127.0.0.1`、`10.0.2.2`、`[::1]`のみ許可します。Androidの平文通信ポリシーも別途設定します。

開発用カスタムschemeは`opentester-sample`のみ許可します。配布時は検証済みHTTPS App Linksを使います。不正な設定はコンストラクターで例外になります。

SDKの対応言語は英語、韓国語、日本語、ドイツ語、フランス語、ヒンディー語、ブラジルポルトガル語、トルコ語、インドネシア語です。例: `ko-KR`、`ja-JP`、`pt-BR`。未対応言語は英語にフォールバックします。ユーザーが書いた報告は翻訳しません。

## OpenTester {#opentester}

```kotlin
class OpenTester(val config: OpenTesterConfig)
```

Activity再生成後も1つのインスタンスを保持します。通信関数は`Dispatchers.IO`を使い、接続タイムアウトは10秒、読み取りは15秒です。HTTPリダイレクトには追従しません。

| 関数 | 戻り値 | 動作 |
| --- | --- | --- |
| `authenticate(activity: Activity)` | `Unit` | 新規認証を開始し、ブラウザーのCustom Tabを開く。メインスレッドで呼ぶ |
| `createAuthenticationUri()` | `Uri` | 独自のシステムブラウザー起動処理に渡す新規認証URIを作成 |
| `suspend handleCallback(callback: Uri)` | `AccessGrant` | コールバック検証、コード交換、SDKセッション保存 |
| `suspend checkAccess()` | `AccessGrant` | サーバーで現在の参加権限を確認 |
| `suspend submitBug(report: BugReport)` | `SubmittedIssue` | バグを送信 |
| `suspend submitFeedback(report: FeedbackReport)` | `SubmittedIssue` | 改善意見を送信 |
| `logout()` | `Unit` | メモリ内トークンと進行中の認証を削除 |

`authenticate()`と`createAuthenticationUri()`は既存SDKセッションを初期化します。`logout()`はブラウザーセッションを終了しません。[認証ガイド](/ja/sdk/authentication)を参照してください。

## AccessGrantとTester {#accessgrant-and-tester}

```kotlin
data class Tester(
    val id: String,
    val name: String,
    val email: String,
)

data class AccessGrant(
    val appId: String,
    val campaignId: String,
    val user: Tester,
)
```

`AccessGrant`は認証・権限確認時点の承認結果です。`campaignId`はアプリのテストキャンペーンIDです。トークンはSDKメモリ内に保持され、このモデルには含まれません。メールなどのテスター情報を不要にログへ残さないでください。

## BugReport {#bugreport}

```kotlin
data class BugReport(
    val title: String,
    val description: String,
    val steps: String = "",
    val expected: String = "",
    val actual: String = "",
    val appVersion: String,
    val deviceInfo: String,
    val clientRequestId: String = UUID.randomUUID().toString(),
)
```

`appVersion`と`deviceInfo`には既定値がありません。端末情報を送らない場合は`""`を指定します。`clientRequestId`は`java.util.UUID`で生成され、再試行時も同じ値を使います。

## FeedbackReport {#feedbackreport}

```kotlin
data class FeedbackReport(
    val title: String,
    val description: String,
    val appVersion: String,
    val deviceInfo: String = "",
    val clientRequestId: String = UUID.randomUUID().toString(),
)
```

改善意見には`steps`、`expected`、`actual`がありません。両モデルの制限と重複処理は[入力制限](/ja/sdk/feedback#input-limits)を参照してください。

## SubmittedIssue {#submittedissue}

```kotlin
data class SubmittedIssue(
    val id: String,
    val title: String,
    val status: String,
)
```

新規報告は`open`です。重複リクエストには既存報告の現在の状態を返す場合があります。文字列として`open`、`confirmed`、`fixed`、`closed`を返します。

## OpenTesterException {#opentesterexception}

以下の型はすべて`OpenTesterException`を継承します。

| 型 | 追加フィールド | 意味と対処 |
| --- | --- | --- |
| `NotAuthenticated` | なし | SDKセッションなし・期限切れ。ログインを開始 |
| `InvalidCallback` | なし | 認証なし・期限切れ・コールバックやstateの不一致。新規ログイン |
| `Api` | `statusCode: Int` | HTTP失敗。`400`は入力確認、`401`は再ログイン、`403`は参加確認 |
| `Network` | 原因例外 | 接続失敗・タイムアウト。同じUUIDで報告を再試行 |
| `InvalidResponse` | 原因例外 | JSONやモデルの解析失敗。サーバーURLとバージョンを確認 |

不正な設定や空のタイトル・説明は、この階層以外の入力検証例外になる場合があります。ホストアプリのエラーとコルーチンのキャンセルも別途処理します。
