You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何实现用户禁用Firebase推送通知功能?

Flutter 集成 OneSignal 推送通知及禁用功能实现

一、前期准备

  • 注册OneSignal账号并创建应用,获取专属APP_ID
  • 在项目的pubspec.yaml中添加依赖:
    dependencies:
      onesignal_flutter: ^5.0.0 # 建议使用最新版本
    
  • 执行flutter pub get完成依赖安装

二、平台配置

Android 端

  1. 修改android/app/build.gradle,确保minSdkVersion不低于21:
    defaultConfig {
        minSdkVersion 21
        // 其他原有配置保留
    }
    
  2. 确认android/app/src/main/AndroidManifest.xml中包含必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    

iOS 端

  1. 在ios/Runner/Info.plist中添加推送权限说明与后台模式配置:
    <key>NSUserNotificationUsageDescription</key>
    <string>推送通知将为你发送重要的应用更新消息</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>remote-notification</string>
    </array>
    
  2. 打开Xcode,进入项目Signing & Capabilities面板,添加Push Notifications能力,并在Background Modes中勾选Remote notifications

三、初始化 OneSignal

在项目入口文件(如main.dart)中完成初始化:

import 'package:flutter/material.dart';
import 'package:onesignal_flutter/onesignal_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 填入你的OneSignal APP_ID
  await OneSignal.shared.setAppId("你的_APP_ID");
  
  // 主动请求用户推送权限
  await OneSignal.shared.promptUserForPushNotificationPermission();
  
  runApp(const MyApp());
}

四、实现推送禁用/启用功能

1. 检查当前推送状态

Future<void> _checkPushStatus() async {
  final state = await OneSignal.shared.getPermissionSubscriptionState();
  // 判断推送是否被禁用
  bool isDisabled = state.permissionStatus.disabled;
  // 更新UI状态
  setState(() {
    _isPushEnabled = !isDisabled;
  });
}

2. 切换推送状态

通过按钮或开关触发状态切换:

bool _isPushEnabled = true;

void _togglePush(bool value) async {
  // 传入true为禁用,false为启用
  await OneSignal.shared.disablePush(!value);
  setState(() {
    _isPushEnabled = value;
  });
}

3. UI 示例

在页面中添加一个开关组件让用户操作:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: const Text("推送设置")),
    body: ListTile(
      title: const Text("启用推送通知"),
      trailing: Switch(
        value: _isPushEnabled,
        onChanged: _togglePush,
        activeColor: Colors.blue,
      ),
    ),
  );
}

内容的提问来源于stack exchange,提问作者Teknoville

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:51:41