Ionic3 - Перенаправление с локальным уведомлением - PullRequest
0 голосов
/ 12 марта 2019

Так что в основном я использую 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'.

Я надеюсь, что вы, ребята, можете мне помочь, с фоновым уведомлением, которое может перенаправить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...