ponshu-room-lite/docs/DISTRIBUTION_API_KEY_SETUP.md

195 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 配布用 Gemini API キー設定ガイド
このガイドは、知人配布用 APK に埋め込む **専用 Gemini API キー** を発行・設定する手順書です。
## なぜ専用キーが必要か
開発用キー(`lib/secrets.local.dart` に設定済み)をそのまま配布 APK に使うと:
- APK を逆コンパイルすれば誰でもキーを抽出できる
- あなたのクォータ(無料枠)を知らない第三者に使い尽くされる可能性がある
- キーを無効化すると開発環境も壊れる
**解決策**: 配布専用キーを発行し、Androidパッケージ名で制限する。
---
## 手順
### 1. Google Cloud Console で新しい API キーを発行
1. [Google AI Studio](https://aistudio.google.com/) にアクセス
2. 右上のメニューから「Get API key」→「Create API key in new project」
- または既存プロジェクトに追加: 「Create API key」→ プロジェクト選択
3. 発行されたキーをメモ(`AIzaSy...` 形式)
### 2. API キーに制限を設定
[Google Cloud Console API 認証情報ページ](https://console.cloud.google.com/apis/credentials) にアクセス:
1. 作成したキーをクリック → 「キーを編集」
2. **API の制限**:
- 「キーを制限する」を選択
- 「Generative Language API」のみ選択
3. **アプリケーションの制限**:
- 「Android アプリ」を選択
- 「アイテムを追加」をクリック
- パッケージ名: `com.posimai.ponshu_room_lite`
- SHA-1 証明書フィンガープリント: (後述)
4. 保存
### 3. リリース署名の SHA-1 フィンガープリントを取得
配布 APK はリリースキーストアで署名する必要があります。
**キーストアが未作成の場合Windowsコマンドプロンプト:**
```cmd
keytool -genkeypair -v -keystore android\app\ponshu_release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ponshu_key
```
パスワードを設定し、組織情報を入力。
> ⚠️ **パスワードは安全な場所に記録してください。紛失するとアプリの更新ができなくなります。**
**SHA-1 の取得Windowsコマンドプロンプト:**
```cmd
keytool -list -v -keystore android\app\ponshu_release.jks -alias ponshu_key
```
出力の `SHA1:` 行をコピーして Google Cloud Console に貼り付ける。
### 4. key.properties にパスワードを設定
`android/key.properties` を新規作成(このファイルは .gitignore に含まれています):
```properties
storePassword=あなたが設定したパスワード
keyPassword=あなたが設定したパスワード
keyAlias=ponshu_key
storeFile=ponshu_release.jks
```
### 5. build.gradle.kts にリリース署名を設定
`android/app/build.gradle.kts` を以下のように変更:
```kotlin
import java.util.Properties
// key.properties からリリース署名情報を読み込み
val keyPropertiesFile = rootProject.file("key.properties")
val keyProperties = Properties()
if (keyPropertiesFile.exists()) {
keyProperties.load(keyPropertiesFile.inputStream())
}
android {
// ... 既存設定 ...
signingConfigs {
if (keyPropertiesFile.exists()) {
create("release") {
keyAlias = keyProperties["keyAlias"] as String
keyPassword = keyProperties["keyPassword"] as String
storeFile = file(keyProperties["storeFile"] as String)
storePassword = keyProperties["storePassword"] as String
}
}
}
buildTypes {
getByName("release") {
signingConfig = if (keyPropertiesFile.exists()) {
signingConfigs.getByName("release")
} else {
signingConfigs.getByName("debug")
}
isMinifyEnabled = false
isShrinkResources = false
}
}
}
```
> key.properties が存在しない場合は自動的に debug 署名にフォールバックします。
### 6. 配布 APK のビルド
```cmd
flutter build apk --release ^
--dart-define=GEMINI_API_KEY=AIzaSy...(配布用キー) ^
--obfuscate ^
--split-debug-info=build\debug-info
```
- `--obfuscate`: クラスや関数名を難読化し、逆コンパイル時に解析されにくくする
- `--split-debug-info`: デバッグシンボルを APK 本体から分離して保存APK サイズ削減)
- `build\debug-info` フォルダは git 管理外でよい(ローカルに保持しておく)
出力ファイル: `build\app\outputs\flutter-apk\app-release.apk`
> 難読化なしの簡易ビルド(動作確認用):
> ```cmd
> flutter build apk --release --dart-define=GEMINI_API_KEY=AIzaSy...(配布用キー)
> ```
### 7. Pro版のビルドオプション
Pro版機能を有効化したAPKをビルドする場合パッケージ名は `com.posimai.ponshu_room_lite` のまま変わりません):
```cmd
flutter build apk --release ^
--dart-define=GEMINI_API_KEY=AIzaSy...(配布用キー) ^
--dart-define=IS_PRO_VERSION=true ^
--obfuscate ^
--split-debug-info=build\debug-info
```
---
## 配布方法
### Google Drive 経由(推奨)
1. `app-release.apk` を Google Drive にアップロード
2. 共有リンクを知人に送付
3. 受信者は Android の「設定 > セキュリティ > 提供元不明のアプリ」を有効化してインストール
### LINE で直接送信
1. APKファイルをLINEのトーク画面にドラッグドロップ
2. 受信者がファイルをタップしてインストール
### adb 直接転送(テスト時)
```cmd
adb install build\app\outputs\flutter-apk\app-release.apk
```
---
## API クォータ管理
| 設定 | 推奨値 | 説明 |
|------|--------|------|
| 1日あたりのリクエスト上限 | 100〜200 | Google Cloud Console → API → クォータで設定 |
| 無料枠 | 1,500回/日 | Gemini 2.5 Flash 無料枠 |
Google Cloud Console で **アラート** を設定しておくことを推奨:
- 「APIs & Services」→「Gemini API」→「クォータ」→「アラートの設定」
---
## チェックリスト
- [ ] 配布用 API キーを Google AI Studio で発行
- [ ] API 制限: Generative Language API のみ
- [ ] アプリ制限: `com.posimai.ponshu_room_lite` の SHA-1
- [ ] リリースキーストア(`ponshu_release.jks`)を作成
- [ ] `android/key.properties` にパスワードを設定
- [ ] キーストアと key.properties が `.gitignore` に含まれていることを確認
- [ ] `flutter build apk --release --dart-define=GEMINI_API_KEY=<配布用キー> --obfuscate --split-debug-info=build\debug-info` で APK ビルド
- [ ] テスト端末でインストール・動作確認
---
**Last Updated**: 2026-02-16