Я могу получить уведомление для отображения, но мне не удалось получить звук для воспроизведения с ним.
Я использую Firebase для отправки уведомлений вручную (я убедился, что я включилзвук на консоли)
Вот плагины, которые я использую для обработки push-уведомлений.
https://ionicframework.com/docs/v3/native/push/ https://ionicframework.com/docs/v3/native/firebase/
Я не тестировалв IOS, поскольку я не могу получить доступ к порталу разработчика и изменить необходимые настройки.
Я что-то пропустил?За исключением звука, все работает как положено.
Вот мой провайдер FCM
constructor(
public http: HttpClient,
public firebaseNative: Firebase,
public afs: AngularFirestore,
private platform: Platform
) { }
async getToken() {
let token = await this.firebaseNative.getToken();
if (this.platform.is('ios')) {
const perm = await this.firebaseNative.grantPermission();
}
return await this.saveToken(token);
}
async saveToken(token: string) {
if (!token) return;
// alert(token)
//save to firebase
const devicesRef = this.afs.collection('devices');
const docData = {
token,
userId: 'testUser'
};
return await devicesRef.doc(token).set(docData);
//save to php - todo
}
listenToNotifications(): Observable<any> {
return this.firebaseNative.onNotificationOpen();
}
}
Вот мой код, использованный в моем компоненте
readonly projectNotificationName: string = "ProjectPushNotifications";
constructor(
private platform: Platform,
private statusBar: StatusBar,
private splashScreen: SplashScreen,
private fcm: FcmProvider,
private push: Push,
private toastCtrl: ToastController) {
this.platform.ready().then(() => {
if (this.platform.is('android')) {
this.handleAndroidNotificationChannel();
} else {
this.initiateConfig();
}
});
}
async handleAndroidNotificationChannel() {
let created: boolean = false;
try {
// var res = await this.push.hasPermission();
//get token and save
await this.fcm.getToken();
var channels = await this.push.listChannels();
created = channels.findIndex(c => c.id == this.projectNotificationName) !== -1;
// Create a channel (Android O and above). You'll need to provide the id, description and importance properties.
if (!created) {
let channel: Channel = {
id: this.projectNotificationName,
description: "New project notifications",
// The importance property goes from 1 = Lowest, 2 = Low, 3 = Normal, 4 = High and 5 = Highest.
importance: 4,
}
await this.push.createChannel(channel);
}
this.initiateConfig();
// to initialize push notifications
} catch (error) {
alert(error);
}
}
async initiateConfig() {
var channels = await this.push.listChannels();
//test what chnnels exist - debug reasons only
channels.forEach(c => alert(JSON.stringify(c)))
const options: PushOptions = {
android: {
forceShow: true,
vibrate: true,
sound: true
},
ios: {
alert: 'true',
badge: true,
sound: 'false'
},
windows: {},
browser: {
// pushServiceURL: 'http://push.api.phonegap.com/v1/push'
}
};
const pushObject: PushObject = this.push.init(options);
this.subscribeToPushNotifications();
}
subscribeToPushNotifications() {
this.fcm.listenToNotifications().pipe(
tap(msg => {
const toast = this.toastCtrl.create({
position: 'top',
message: msg.body,
duration: 3000
})
toast.present();
})
).subscribe();
}
Вот чтоНастройки уведомлений эмулятора выглядят как для созданного канала уведомлений