Flutter iOS关键警报权限请求插件flutter_critical_alert_permission_ios的使用

发布于 1周前 作者 caililin 来自 Flutter

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

1 回复

更多关于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 中添加 UIBackgroundModesNSCriticalAlerts 权限)。

希望这个示例对你有帮助!

回到顶部