【Flutter】permission_handlerで、許可していてもPermissionStatusがdeniedになってしまう時の対処方法(iOS)

image

はじめに

こんにちは。可茂IT塾のkiichiです。

今回は、個人開発で少しハマったこと、その解決方法を紹介します。

前提知識

PermissionStatus一覧

 Permissionの状態を定義します。詳細はこちらをご覧ください。

denied : 拒否
ユーザーに要求された機能へのアクセスを拒否された状態。
granted : 許可
ユーザーに要求された機能へのアクセスを許可された状態。
restricted : 制限あり
OS に要求された機能へのアクセスを拒否された状態。ユーザーはこのアプリのステータスを変更できません。
limited : 制限あり
ユーザーに要求された機能への制限付きアクセスを許可された状態。 今のところ、これは写真許可にのみ関連しています。(iOS でのみサポートされます)
permanentlyDenied : 永久に拒否
要求された機能への権限は永久に拒否され、この権限を要求しても権限ダイアログは表示されません。ユーザーは設定で権限ステータスを変更できます。
(iOS14+ および Android 14+ でのみサポートされます)

やったこと

 ローカル通知機能を実装し、リマインド機能を設定するために、flutter_local_notifications を使用しました。また、アプリ側での権限状態を確認できるように、permission_handler のパッケージを利用し、iOS 用の設定を追加しました。

ios/Runner/Info.plist

<key>PermissionGroupNotification</key>
<string>ローカル通知をするため</string>

ios/Podfile

<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塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More

タグ

Flutter (108)初心者向け (27)イベント (18)Google Apps Script (15)Nextjs (11)可茂IT塾 (8)Firebase (7)riverpod (6)React (6)ChatGPT (5)デザイン (5)新卒 (4)就活 (4)vscode (4)Figma (4)Dart (4)JavaScript (4)お知らせ (4)FlutterWeb (3)Prisma (3)NestJS (3)Slack (3)TypeScript (3)ワーケーション (3)インターン (3)設計 (2)線型計画法 (2)事例 (2)Image (2)File (2)Material Design (2)画像 (2)iOS (2)アプリ開発 (2)React Hooks (2)tailwindcss (2)社会人 (2)大学生 (2)RSS (1)Google (1)Web (1)CodeRunner (1)個人開発 (1)Android (1)Unity (1)WebView (1)Twitter (1)フルリモート (1)TextScaler (1)textScaleFactor (1)学生向け (1)supabase (1)Java (1)Spring Boot (1)shell script (1)正規表現 (1)パワーポイント (1)趣味 (1)モンスターボール (1)CSS (1)SCSS (1)Cupertino (1)ListView (1)就活浪人 (1)既卒 (1)保守性 (1)iPad (1)シェアハウス (1)スクレイピング (1)PageView (1)画面遷移 (1)flutter_hooks (1)Gmail (1)GoogleWorkspace (1)ShaderMask (1)google map (1)Google Places API (1)GCPコンソール (1)Google_ML_Kit (1)Vercel (1)Google Domains (1)DeepLeaning (1)深層学習 (1)Google Colab (1)Git (1)オンラインオフィス (1)オブジェクト指向 (1)クラスの継承 (1)ポリモーフィズム (1)LINE (1)Bitcoin (1)bitFlyer (1)コミュニティー (1)文系エンジニア (1)Freezed (1)permission_handler (1)flutter_local_notifications (1)markdown (1)GlobalKey (1)ValueKey (1)Key (1)アイコン (1)go_router (1)debug (1)datetime_picker (1)Apple Store Connect (1)FlutterGen (1)デバッグ (1)Widget Inspector (1)検索機能 (1)Shader (1)Navigator (1)メール送信 (1)Firebase App Distribution (1)Fastlane (1)Dio (1)CustomClipper (1)ClipPath (1)カスタム認証 (1)アニメーション (1)Arduino (1)ESP32 (1)経験談 (1)フリーランス (1)mac (1)csv (1)docker (1)GithubActions (1)Dialog (1)BI (1)LifeHack (1)ショートカット (1)Chrome (1)高校生 (1)キャリア教育 (1)非同期処理 (1)生体認証 (1)BackdropFilter (1)レビュー (1)getAuth (1)Algolia (1)コンサルティング (1)Symbol (1)

お知らせ

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!

可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。

Read More
U30可茂ITインターンハッカソン

U30可茂ITインターンハッカソン

12月28,29日開催。2日間でアプリ開発の企画から完成までを目指す!U30可茂ITインターンハッカソンを開催します。

Read More