因此,基本上,我使用 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);
}
本教程中的 收听传入消息 部分。
推送通知仅在应用程序为后台时才起作用。积极使用该应用程序时,开发人员有责任通知用户。
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();
这部分是,如果发送了通知,则显示警报。此警报显示标题和消息,您还有两个选项(“ Sluiten”和“ Bekijken”)。
这不是很重要,但是我认为最好告诉您。
我真正想要的
我想要的是,如果应用程序在后台并且您收到通知。您单击通知,该应用程序将在特定页面上打开。
然后我尝试使用的单击功能
this.localNotifications.on('click').subscribe((notification) => {
// Insert your logic here
console.log("notification Clicked");
this.nav.setRoot(BerichtenPage);
this.activePage = BerichtenPage;
});
我尝试了上面的代码但没有成功。什么也没发生,我没有Console.log,也没有移到“ BerichtenPage”。
希望大家能通过可重定向的后台通知来帮助我!