使用颤振 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 颤振插件在启动时崩溃