2023/09/13

[Vite] マルチページを作成した際は rewrite を正しく設定しなければならない

[Vite](https://vitejs.dev/) では、以下のように `rollupOptions.input` を指定することでマルチページアプリケーションを作ることが可能です。

```js
`title: "vite.config.ts"
export default defineConfig({
  // 省略
  build: {
    rollupOptions: {
      input: {
        main: resolve(__dirname, 'src/main/index.html'),
        admin: resolve(__dirname, 'src/admin/index.html'),
        user: resolve(__dirname, 'src/user/index.html'),
      },
    },
  },
});
```

参考
[Build Options | Vite](https://rollupjs.org/configuration-options/#input)
場合によっては便利なのですが、この設定をした上で [Vue Router](https://router.vuejs.org/) のようなルーティング機能を使うと問題がおこるので注意しなければなりません。 例えば `main` 以下に `/main/users/1200` のようなサブページを作りたい場合、ルーターの設定をしただけでは動かないはずです。 この場合、サーバーは `/main/users/1200` などというページが存在しないので、特定のページに rewrite します。 これが、 Vite の dev server の場合、デフォルトで `/index.html` なのです。つまり、そんなページは存在しないとエラーを吐かれてしまいます。 これを、 `/main.html` に rewrite するよう、設定を変更しなければなりません。
2023/01/05

Android の権限ダイアログで2度「許可しない」が選択されたことを検知する方法

Android 6.0 (API Level 23) 以降、マイクの使用許可などプライバシーに関わるような権限はアプリの中から個別に許可を求めなければいけなくなりました。具体的には以下のようなコードを実行すると上記のようなダイアログが表示されます`AndroidManifest.xml` に `uses-permission` の記述も必要。(`permissionLauncher` の実装は後半を参照) ```kotlin val granted = ContextCompat.checkSelfPermission( requireContext(), Manifest.permission.RECORD_AUDIO ) if (granted != PackageManager.PERMISSION_GRANTED) { permissionLauncher.launch(Manifest.permission.RECORD_AUDIO) } ``` 以前は毎回このコードを実行することでダイアログを表示することが出来ていたのですが、Android 11 (API Level 30) 以降、ユーザーが2度「許可しない」を選択すると、次からはダイアログが表示されなくなってしまいました。