Flutter ios 设备不会从 FCM 通知触发 onMessage。实施 APN 时 Sendtodevice 失败
Posted
技术标签:
【中文标题】Flutter ios 设备不会从 FCM 通知触发 onMessage。实施 APN 时 Sendtodevice 失败【英文标题】:Flutter ios device doesn't trigger onMessage from FCM notification. Sendtodevice fails when implementing APNs 【发布时间】:2020-12-18 01:29:03 【问题描述】:在我的 fcm 云功能中向其他玩家发送通知,当我添加 apns 层时发送失败。移除 apns 层后,通知会出现在 android 上,但对于 ios,通知会在前端收到,但无法触发 onMessage 函数显示警报对话框。
var payload =
data:
click_action: "FLUTTER_NOTIFICATION_CLICK",
notificationType: "friendsRequest",
fromUsername: fromUsername,
fromProfilePic: fromProfilePic,
fromColorIndex: fromColorIndex,
type: type
,
;
此有效负载返回“崩溃”的服务器响应
【问题讨论】:
【参考方案1】:要为 iOS 启用通知,您需要先为 iOS 设置 FCM: 正如您所说,您已经生成了 APN。只需确认您是否将 apn 与 firebase 项目相关联。之后在 Xcode 中打开您的项目 ios 模块并在 AppDelegate 中进行以下更改
if #available(iOS 10.0, *)
UNUserNotificationCenter.current().delegate = self as?
UNUserNotificationCenterDelegate
在颤振方面进行更改(我在启动画面中使用此代码):
初始化
FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
initState() 中的代码
var initializationSettingsAndroid =
new AndroidInitializationSettings('@mipmap/ic_launcher'); //replace with your app icon file
var initializationSettingsIOS = new IOSInitializationSettings();
var initializationSettings = new InitializationSettings(
initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: onSelectNotification);
FirebaseNotifications().setUpFirebase(_firebaseMessaging);
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async
showNotification(
message['notification']['title'], message['notification']['body']);
print("onMessage: $message");
,
onLaunch: (Map<String, dynamic> message) async
print("onLaunch: $message");
,
onResume: (Map<String, dynamic> message) async
print("onResume: $message");
,
);
通知方式:
void showNotification(String title, String body) async
await _demoNotification(title, body);
Future<void> _demoNotification(String title, String body) async
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'channel_ID', 'channel name', 'channel description',
importance: Importance.Max,
playSound: true,
sound: 'sound',
showProgress: true,
icon: 'notification_icon',
color: AppTheme.secondaryaccent,
priority: Priority.High,
ticker: 'test ticker');
var iOSChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(
androidPlatformChannelSpecifics, iOSChannelSpecifics);
await flutterLocalNotificationsPlugin
.show(0, title, body, platformChannelSpecifics, payload: 'test');
【讨论】:
我确实设置了这个应用程序。我将包括我采取的其他步骤。希望你能发现我的错误。我也没有使用颤振本地通知。我在 onMessage 中有一个函数,它使用从通知中收到的数据来触发警报对话框。 在这种情况下我的通知发送失败。 您是否从应用订阅以获取通知..? 我获得了应用注册令牌并请求发送通知。以上是关于Flutter ios 设备不会从 FCM 通知触发 onMessage。实施 APN 时 Sendtodevice 失败的主要内容,如果未能解决你的问题,请参考以下文章
FCM 将消息从 php 复制到 iOS Flutter 应用程序
iOS 上的 Flutter FCM 不调用 onMessage 和 onResume