こんにちは。可茂IT塾のkiichiです。
今回は、個人開発で少しハマったこと、その解決方法を紹介します。
Permissionの状態を定義します。詳細はこちらをご覧ください。
denied : 拒否
ユーザーに要求された機能へのアクセスを拒否された状態。
granted : 許可
ユーザーに要求された機能へのアクセスを許可された状態。
restricted : 制限あり
OS に要求された機能へのアクセスを拒否された状態。ユーザーはこのアプリのステータスを変更できません。
limited : 制限あり
ユーザーに要求された機能への制限付きアクセスを許可された状態。 今のところ、これは写真許可にのみ関連しています。(iOS
でのみサポートされます)
permanentlyDenied : 永久に拒否
要求された機能への権限は永久に拒否され、この権限を要求しても権限ダイアログは表示されません。ユーザーは設定で権限ステータスを変更できます。
(iOS14+
およびAndroid 14+
でのみサポートされます)
ローカル通知機能を実装し、リマインド機能を設定するために、flutter_local_notifications を使用しました。また、アプリ側での権限状態を確認できるように、permission_handler のパッケージを利用し、iOS
用の設定を追加しました。
<key>PermissionGroupNotification</key>
<string>ローカル通知をするため</string>
<key>PermissionGroupNotification</key>
<string>ローカル通知をするため</string>
これらの設定を追加後に pod install
してからビルドしました。
permission_handlerを使用して、デバッグ時に権限状態を確認したところ、デバイスの設定では許可されているにもかかわらず、状態が反映されず、ずっと denied が返ってくる現象が発生しました。以下のコードでデバッグを行いました。
Future<void> checkNotificationPermission() async {
PermissionStatus permissionStatus = await Permission.notification.status;
print('permissionStatus: $permissionStatus');
}
同じ問題に直面している人を探してみたところ、パッケージのReadmeに記載されている iOS のセットアップ手順にある Clean & Rebuild を実行し忘れたことが原因だったという方がいました。
私もすっかり忘れていたため、以下の手順を実行しました。
flutter clean
flutter pub get
cd ios
pod install
これを実行し再ビルドしたところ、権限状態が反映され、granted
が返ってきました。
「Info.plist」や「Podfile」の設定を変更したら、Clean & Rebuild をしっかり行うことが重要だと改めて認識しました。
今回は通知権限の設定を追加しましたが、写真やカメラなど他の権限設定を追加する際にも、Clean & Rebuild の手順を忘れないようにしたいと思います。
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More