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

Flutter项目iOS端后台通知无震动问题求助

iOS后台状态下FCM通知无震动问题解决

问题根源

iOS对后台进程权限管控严格,后台环境下无法通过Vibration.vibrate()这类第三方插件API触发震动,必须依赖iOS系统通知的原生配置来触发震动逻辑。你当前在_firebaseMessagingBackgroundHandler中调用震动API的方式,在iOS后台完全不生效。

解决方案

1. 调整FCM消息Payload配置

发送FCM消息时,必须在aps字段中指定sound参数,让iOS系统自动处理震动(前提是用户设备已开启该App的通知震动权限):

{
  "to": "你的设备Token",
  "notification": {
    "title": "通知标题",
    "body": "通知内容"
  },
  "data": {
    // 自定义业务数据
  },
  "aps": {
    "sound": "default", // 启用系统默认震动+声音
    "content-available": 1 // 用于触发后台handler(如需处理数据)
  }
}

如果需要自定义震动模式,可将sound设为打包到App中的自定义震动音频文件名(如custom_vibration.wav),需确保文件已添加到iOS项目资源中。

2. 移除后台Handler中的手动震动调用

直接删除await Vibration.vibrate(duration: 500);代码,后台环境下该调用不生效,还会占用不必要资源。

3. 配置本地通知的震动参数

若通过本地通知组件展示FCM消息,需在创建通知时指定iOS震动配置:

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

void showFlutterNotification(RemoteMessage message) {
  final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
  // iOS通知配置
  final iOSDetails = IOSNotificationDetails(
    sound: 'default', // 启用系统震动
  );
  final notificationDetails = NotificationDetails(iOS: iOSDetails);
  
  flutterLocalNotificationsPlugin.show(
    message.messageId.hashCode,
    message.notification?.title,
    message.notification?.body,
    notificationDetails,
    payload: message.data.toString(),
  );
}

4. 检查系统权限

确保用户设备已开启以下设置:

  • 进入设置 > 通知 > 你的App,开启「允许通知」
  • 同一页面开启「震动」选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:15:39