Ionic3-使用本地通知重定向

时间:2019-03-12 10:54:31

标签: firebase ionic-framework localnotification

因此,基本上,我使用 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”)。

  • 'Bekijken'-重定向至页面
  • 'Sluiten'-关闭警报

这不是很重要,但是我认为最好告诉您。

我真正想要的

我想要的是,如果应用程序在后台并且您收到通知。您单击通知,该应用程序将在特定页面上打开。

然后我尝试使用的单击功能

 this.localNotifications.on('click').subscribe((notification) => {
    // Insert your logic here
    console.log("notification Clicked");
    this.nav.setRoot(BerichtenPage);
    this.activePage = BerichtenPage;
  });

我尝试了上面的代码但没有成功。什么也没发生,我没有Console.log,也没有移到“ BerichtenPage”。

希望大家能通过可重定向的后台通知来帮助我!

0 个答案:

没有答案