文章底部有更新
今天,做好了一个功能,就是在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',