Flutter iOS关键警报权限请求插件flutter_critical_alert_permission_ios的使用
Flutter iOS关键警报权限请求插件flutter_critical_alert_permission_ios的使用
目的
此插件旨在让您从您的Flutter应用程序中请求iOS的关键警报权限。
什么是关键警报
关键警报是iOS独有的功能,自iOS 12引入。该功能允许应用程序发送关键警报(这些可以被视为特殊通知),即使“勿扰模式”开启或手机静音。
先决条件
并非所有应用程序都可以使用此功能;您需要首先从Apple获取相应的许可。 要获取此类许可,您需要提交一个请求(例如,使用此表单)指定您的应用程序范围,将要发送的关键警报类型,频率以及应用程序需要此功能的原因。
NB: 此过程也可能需要几个月才能被批准,拥有测试版的应用程序可以在Testflight上加速此过程。
NB: 截至2021年4月21日,许可似乎适用于同一开发者帐户中的所有应用程序,而仅限于请求许可的应用程序。
一旦您获得了许可,您只需生成包含它的新证书配置文件并使用它来签名/验证应用程序即可。
插件状态
该插件涵盖了非常具体的应用场景,并且故意如此。 在缺少许可的情况下,它将退回到向用户请求通知权限。
贡献
该插件以MIT许可证发布,欢迎对这个插件进行贡献。
可能的改进领域:
- Swift代码中的边缘情况处理(在
SwiftFlutterCriticalAlertPermissionIosPlugin
中) - Dart代码中的更多场景处理(例如,已请求权限,权限拒绝,忽略如果运行在Android等)
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_critical_alert_permission_ios/flutter_critical_alert_permission_ios.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息异步,因此我们在异步方法中初始化。
Future<void> initPlatformState() async {
// 平台消息可能会失败,所以我们使用try/catch PlatformException。
// 如果 widget 被从树中移除,而异步平台消息正在飞行时,我们希望丢弃回复而不是调用 setState 来更新我们的非存在的外观。
if (!mounted) return;
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
children: [
TextButton(
onPressed: () {
FlutterCriticalAlertPermissionIos.requestCriticalAlertPermission();
},
child: Text('request critical alert permission'),
)
],
),
),
),
);
}
}
更多关于Flutter iOS关键警报权限请求插件flutter_critical_alert_permission_ios的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter iOS关键警报权限请求插件flutter_critical_alert_permission_ios的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_critical_alert_permission_ios
插件在 Flutter 应用中请求 iOS 关键警报权限的代码示例。这个插件允许你的应用在用户设备处于“勿扰模式”时显示关键警报。
首先,你需要在 pubspec.yaml
文件中添加该插件依赖:
dependencies:
flutter:
sdk: flutter
flutter_critical_alert_permission_ios: ^x.y.z # 替换为最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 项目中,你可以按照以下步骤请求和使用关键警报权限。
1. 导入插件
在你的 Dart 文件中导入插件:
import 'package:flutter_critical_alert_permission_ios/flutter_critical_alert_permission_ios.dart';
2. 请求关键警报权限
在需要请求权限的地方(比如应用启动时或某个功能触发时),使用以下代码:
void requestCriticalAlertPermission() async {
bool hasPermission = await FlutterCriticalAlertPermissionIos.requestPermission;
if (hasPermission) {
print("Critical alert permission granted.");
// 在这里执行需要关键警报权限的操作
} else {
print("Critical alert permission denied.");
// 处理权限被拒绝的情况
}
}
3. 检查权限状态
你也可以检查当前的关键警报权限状态,而无需直接请求权限:
void checkCriticalAlertPermission() async {
CriticalAlertPermissionStatus status = await FlutterCriticalAlertPermissionIos.checkPermissionStatus;
switch (status) {
case CriticalAlertPermissionStatus.granted:
print("Critical alert permission is granted.");
break;
case CriticalAlertPermissionStatus.denied:
print("Critical alert permission is denied.");
break;
case CriticalAlertPermissionStatus.notDetermined:
print("Critical alert permission has not been determined yet.");
break;
case CriticalAlertPermissionStatus.restricted:
print("Critical alert permission is restricted (e.g., by parental controls).");
break;
case CriticalAlertPermissionStatus.unknown:
print("Unknown permission status.");
break;
}
}
4. 完整示例
以下是一个完整的示例,展示如何在 Flutter 应用中请求和使用关键警报权限:
import 'package:flutter/material.dart';
import 'package:flutter_critical_alert_permission_ios/flutter_critical_alert_permission_ios.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Critical Alert Permission Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 检查权限状态
CriticalAlertPermissionStatus status = await FlutterCriticalAlertPermissionIos.checkPermissionStatus;
if (status == CriticalAlertPermissionStatus.notDetermined) {
// 请求权限
bool hasPermission = await FlutterCriticalAlertPermissionIos.requestPermission;
if (hasPermission) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Permission granted')));
} else {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Permission denied')));
}
} else {
// 显示当前权限状态
String message;
switch (status) {
case CriticalAlertPermissionStatus.granted:
message = 'Permission is granted.';
break;
case CriticalAlertPermissionStatus.denied:
message = 'Permission is denied.';
break;
case CriticalAlertPermissionStatus.restricted:
message = 'Permission is restricted.';
break;
case CriticalAlertPermissionStatus.unknown:
message = 'Unknown permission status.';
break;
}
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
}
},
child: Text('Check/Request Permission'),
),
),
),
);
}
}
这个示例应用包含一个按钮,点击按钮时会检查关键警报权限状态,如果权限尚未确定,则请求权限,并根据结果显示相应的提示信息。
请确保你的 iOS 项目已经正确配置了必要的权限和背景模式(在 Info.plist
中添加 UIBackgroundModes
和 NSCriticalAlerts
权限)。
希望这个示例对你有帮助!