Flutter的permission_handler插件检查iOS的通知权限不准确

文章底部有更新

今天,做好了一个功能,就是在app内检查用户有没有给当前APP打开通知权限,

如果没打开,就展示一个 banner ,让用户去点击banner去打开权限 。

android上测试得非常顺利,

结果,

在iOS 上就是不行,不管怎么打开关闭通知,使用 

Permission.notification.status 获取到的结果一直是: PermissionStatus.denied

我去,这也太坑了, 通过咨询AI大神,得出结论: 

这这这,  不准确也不解决一下吗? 真的无语了。 

解决办法:

  Future<bool> checkIOSNotificationsStatus() async {
    final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();
    final bool? granted = await flutterLocalNotificationsPlugin
        .resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()
        ?.requestPermissions(alert: true, badge: true, sound: true);
    return granted ?? false;
  }

只能先这样解决了, 我判断如果是iOS平台,就用我写的这个方法 checkIOSNotificationsStatus 来判断权限的状态。 

你们说为什么 permission_handler 插件没有发现这个问题? 也不及时更新解决一下。 

-------------------------------- 分隔线 ------------------------------------ 

今天偶然发现了这个问题的真正的解决方法, 就需要把下面这些用到的权限,宏定义设置为1. 

比如我把 PERMISSION_LOCATION 设置为0 ,那么 

var result = await Permission.location.request();

无论如何也是请求不到权限弹窗的,所以其它权限的 request 也是一样的情况 。 

这个是很容易忽略的点。 

config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
  '$(inherited)',

  ## dart: PermissionGroup.calendar
  'PERMISSION_EVENTS=1',
  
  ## dart: PermissionGroup.calendarFullAccess
  'PERMISSION_EVENTS_FULL_ACCESS=1',

  ## dart: PermissionGroup.reminders
  'PERMISSION_REMINDERS=1',

  ## dart: PermissionGroup.contacts
  'PERMISSION_CONTACTS=1',

  ## dart: PermissionGroup.camera
  'PERMISSION_CAMERA=1',

  ## dart: PermissionGroup.microphone
  'PERMISSION_MICROPHONE=1',

  ## dart: PermissionGroup.speech
  'PERMISSION_SPEECH_RECOGNIZER=1',

  ## dart: PermissionGroup.photos
  'PERMISSION_PHOTOS=1',

  ## The 'PERMISSION_LOCATION' macro enables the `locationWhenInUse` and `locationAlways` permission. If
  ## the application only requires `locationWhenInUse`, only specify the `PERMISSION_LOCATION_WHENINUSE`
  ## macro.
  ##
  ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
  'PERMISSION_LOCATION=1',
  'PERMISSION_LOCATION_WHENINUSE=0',

  ## dart: PermissionGroup.notification
  'PERMISSION_NOTIFICATIONS=1',

  ## dart: PermissionGroup.mediaLibrary
  'PERMISSION_MEDIA_LIBRARY=1',

  ## dart: PermissionGroup.sensors
  'PERMISSION_SENSORS=1',

  ## dart: PermissionGroup.bluetooth
  'PERMISSION_BLUETOOTH=1',

  ## dart: PermissionGroup.appTrackingTransparency
  'PERMISSION_APP_TRACKING_TRANSPARENCY=1',

  ## dart: PermissionGroup.criticalAlerts
  'PERMISSION_CRITICAL_ALERTS=1',

  ## dart: PermissionGroup.criticalAlerts
  'PERMISSION_ASSISTANT=1',
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值