Так что в основном я использую firebase для отправки сообщений, если приложение на фоне получает уведомление, и если вы щелкнете по уведомлению, перенаправьте на другую страницу в приложении.
Как отправлять уведомления
Для уведомлений я использую Firebase, если быть точным, я следовал учебнику: https://angularfirebase.com/lessons/ionic-native-with-firebase-fcm-push-notifications-ios-android/.
Фактическая отправка уведомлений с помощью PHP
В PHP я отправляю сообщение через firebase.
function setMessage($id, $title, $body, $l){
// Message that gets send with the notification
$message = array (
'body' => "Klik hier voor volledig bericht",
'title' => $title,
'vibrate' => 1,
);
$data = array(
'recordID' => $id,
'message' => $body,
);
// Get naar welke persoon je de notification wilt sturen
$db = new FirestoreClient(); // Maak Firestore Client aan
$devicesRef = $db->collection('devices'); // Get Devices tabel uit Firestore
$query = $devicesRef->where('userId', '==', strtolower($l)); // Zoek in Devices Tabel waar userId gelijk staat aan Ontvanger
$documents = $query->documents(); // Maak Query
foreach ($documents as $document) { // Voor elk document
if ($document->exists()) { // Als document bestaat
sendMessage($document['token'], $message, $data); // Roep SendMessage Functie aan
} else { // Als Doccument NIET bestaat
// printf('Document %s does not exist!' . PHP_EOL, $snapshot->id());
}
}
}
function sendMessage($id, $message, $data) {
//FCM API end-point
$url = 'https://fcm.googleapis.com/fcm/send';
//api_key in Firebase Console -> Project Settings -> CLOUD MESSAGING -> Server key
$server_key = 'mykey;
$fields = array (
'to' => $id,
'notification' => $message,
'data' => $data
);
//header with content_type api key
$headers = array (
'Content-Type:application/json',
'Authorization:key='.$server_key
);
//CURL request to route notification to FCM connection server (provided by Google)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$results = curl_exec($ch);
if ($results === FALSE) {
die('Oops! FCM Send Error: ' . curl_error($ch));
}
curl_close($ch);
}
Часть Прослушивание входящих сообщений в учебном пособии.
Push-уведомления предназначены для работы только в том случае, если приложение является фоновым.Когда приложение активно используется, разработчик обязан уведомить пользователя.
listenToNotifications() {
return this.firebaseNative.onNotificationOpen()
}
В фоновом режиме Я просто получаю уведомление.
На переднем плане Я использую оповещение, если пользователь получает уведомление.
this.FSB.listenToNotifications().pipe(tap(msg => {
this.preloadMessages();
// this.presentAlert(msg);
console.log(JSON.stringify(msg));
if (msg.body != null){
const confirmAlert = this.alertCtrl.create({
title: msg.title,
message: msg.body,
buttons: [{
text: 'Sluiten',
role: 'cancel'
}, {
text: 'Bekijken',
handler: () => {
//TODO: Your logic here
this.nav.setRoot(HomePage);
this.activePage = HomePage;
this.checkActive(HomePage);
this.preloadMessages();
}
}]
});
this.preloadMessages();
confirmAlert.present();
}
})).subscribe();
Эта часть заключается в том, что, если уведомление отправлено, отображается предупреждение.Это предупреждение показывает заголовок и сообщение, у вас также есть 2 варианта («Sluiten» и «Bekijken»).
- «Bekijken» - перенаправляет на страницу
- «Sluiten» - закрываетсяalert
Это не так важно, но я подумал, что было бы хорошо рассказать.
Что я на самом деле хочу
Что яхотите, если приложение находится в фоновом режиме и вы получаете уведомление.Вы нажимаете на уведомление, приложение открывается на определенной странице.
Затем функция "При нажатии" я попробовал использовать
this.localNotifications.on('click').subscribe((notification) => {
// Insert your logic here
console.log("notification Clicked");
this.nav.setRoot(BerichtenPage);
this.activePage = BerichtenPage;
});
Я попробовал код выше, но безуспешно,Ничего не происходит, я не получаю Console.log, и я не перемещен в 'BerichtenPage'.
Я надеюсь, что вы, ребята, можете мне помочь, с фоновым уведомлением, которое может перенаправить!