我正在尝试让我的应用程序向用户发送通知,该通知将以默认通知声音提醒用户。
到目前为止,我正在使用具有以下代码的插件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发送消息并在选项中启用声音,则声音和触觉会起作用,我只是无法弄清楚如何使用此框架。
答案 0 :(得分:2)
也许为时已晚。 但是我一直在为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
};
答案 1 :(得分:1)
我假设您正在使用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);
}