使用颤振 firebase_messaging 插件发送通知声音

Posted

技术标签:

【中文标题】使用颤振 firebase_messaging 插件发送通知声音【英文标题】:Sending notification sound with flutter firebase_messaging plugin 【发布时间】:2019-05-31 01:29:49 【问题描述】:

我正在尝试让我的应用程序向用户发送通知,该通知将用他们的默认通知声音提醒他们。

到目前为止,我正在使用插件firebase_messaging,代码如下:

Message firebaseMessage = Message()
..to = token
..body = body
..title = title;
firebaseCloudMessage.send(firebaseMessage);

这允许我向选定的用户发送通知并将其显示在他们的主屏幕上。唯一的问题是,它在发送通知时不会在 ios 上播放声音或给 Apple Watch 提供触觉。

如何使用 firebase_messaging 框架播放声音?

如果有帮助,这是我的配置:

_firebaseMessaging.requestNotificationPermissions(
  IosNotificationSettings(
    sound: true,
    badge: true,
    alert: true
  )
);

如果我直接从 firebase 发送消息并在选项中启用声音,声音和触觉就可以工作,我只是不知道如何使用这个框架来做到这一点。

【问题讨论】:

我如何直接从 firebase 执行此操作将转到云消息传递 > 撰写通知 > 完成第 1 步和第 2 步。然后我跳到第 5 阶段(附加选项)并从那里启用声音。这是来自 Firebase 控制台。 【参考方案1】:

也许为时已晚。 但我在 iOS 中遇到了通知声音。 问题是我使用 Firebase 发送通知并且它使用最新的 API,所以我必须在通知消息中添加“apns”部分:

     const payload = 
                      notification: 
                          title: "title",
                          body: "message",

                      ,
                      data: 
                          info: "any data",
                          click_action: "FLUTTER_NOTIFICATION_CLICK",
                        ,
                      apns:
                        payload:
                            aps:
                             sound:"default"
                            
                        
                     ,
                      condition:condition //if using topics
                 ;

【讨论】:

【参考方案2】:

我假设您使用的是 fcm_push 包。您需要在消息中添加一个附加标签。试试:

firebaseMessage.data = [Tuple2('sound', 'default')];

这适用于 android。您可能需要弄清楚如何让fcm_push 为 APNS 消息发送正确的有效负载。请参阅API documentation 和APNS payload reference。

(我自己不使用fcm_push - 我发现使用 HTTP 直接写入 FCM API 一样容易。例如...)

final String url = 'https://fcm.googleapis.com/fcm/send';

Map<String, dynamic> notification = 
  'body': 'some body',
  'title': 'some title',
;

Map<String, dynamic> data = 
  //'click_action': 'FLUTTER_NOTIFICATION_CLICK',
  'someKey': 'someValue',
  'sound': 'default',
;

Map<String, dynamic> message = 
  'notification': notification,
  'priority': 'high',
  'data': data,
  'to': '', // this is optional - used to send to one device
;

Map<String, String> headers = 
  'authorization': auth,
  'content-type': 'application/json',
;

void sendNotification() async 
  message['to'] = testToken; // todo - set the relevant values
  http.Response r =
      await http.post(url, headers: headers, body: json.encode(message));
  print(r.statusCode);
  print(r.body);

【讨论】:

我在哪里可以获得我的身份验证令牌?还有正文和标题去哪里了? 您从 Firebase 控制台/项目概述/设置/云消息传递页面获取身份验证令牌 - 查找服务器密钥。查看正文和标题的更新答案。 我很忙,忘记回复了。手动发送时,我没有收到任何 iOS 通知。我没有测试 Android,因为它只是一个个人应用程序,所以它只能是 iOS。 在最初的问题中,您说您收到了通知,但没有声音。您是否能够使用 FCM API 添加声音? 抱歉不清楚。我的意思是当我像你一样尝试手动使用 API 时,我根本收不到通知。这可能是因为我需要注册以不同的方式接收通知?

以上是关于使用颤振 firebase_messaging 插件发送通知声音的主要内容,如果未能解决你的问题,请参考以下文章

如果处理后台消息,firebase_messaging 颤振插件在启动时崩溃

firebase_messaging :没有通知通过

使用 firebase_messaging 自定义通知(Android 和 IOS)

FCM 和颤振(Node Js 后端)中的前景和背景问题

Flutter 推送通知仅在应用程序处于后台时有效

Flutter 推送通知应用背景:firebase_messaging