Как я могу отправлять уведомления, когда мое приложение закрыто в Ionic? - PullRequest
0 голосов
/ 20 марта 2019

Я использую Ionic для мобильных устройств, на самом деле я использую LocalNotifications

Каждые 5 минут я проверяю свой сервер, если у меня есть новый вопрос:

this.checkQuestions();
this.IntervalId = setInterval(() => {
  this.checkQuestions();
}, 300000);

Моя функция checkQuestions() сделать for() с данными моего сервера:

  for (var i = 0; i < res.data.notificar.questions.length; i++) {
    this.localNotifications.schedule({
      id: i, 
      priority: 2,
      text: 'Produto: ' + res.data.notificar.questions[i].produto.substring(0, 20) + '...',
      title: 'Nova pergunta, conta: ' + res.data.notificar.questions[i].conta,
      smallIcon: 'res://notification',
      foreground: true,
    });
  }

Проблема в том, что когда мое приложение закрыто, эта логика не запускается, и мои клиенты не получают уведомления. В Ionic есть альтернатива для отправки уведомления, когда мое приложение закрыто?

Мне нужно проверять каждые 5 минут на моем сервере, даже если приложение закрыто.

1 Ответ

0 голосов
/ 20 марта 2019

Если ваш пользователь убил приложение, вы не можете убедиться, что ваш пользователь поддерживает его активным. Но если вы действительно хотите попробовать, вы можете использовать это .

Наиболее эффективным является использование Push-уведомлений . Ваш сервер может отправлять уведомления в ваше приложение, когда новые данные будут сохранены.

РЕДАКТИРОВАТЬ

На стороне сервера вы можете запустить функцию отправки push-уведомлений примерно так:

function sendGCM($message, $id) {


    $url = 'https://fcm.googleapis.com/fcm/send';

    $fields = array (
            'registration_ids' => array (
                    $id
            ),
            'data' => array (
                    "message" => $message
            )
    );
    $fields = json_encode ( $fields );

    $headers = array (
            'Authorization: key=' . "YOUR_KEY_HERE",
            'Content-Type: application/json'
    );

    $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_POSTFIELDS, $fields );

    $result = curl_exec ( $ch );
    echo $result;
    curl_close ( $ch );
}

?>

Запускайте эту функцию каждые 5 минут в php, если хотите, но лучше, когда сохраняются новые данные.

ИСТОЧНИК

И, с другой стороны, вы можете выполнить функцию для получения ваших данных, когда вы ловите push-уведомление. Примерно так:

import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar, Splashscreen } from 'ionic-native';

import { HomePage } from '../pages/home/home';
import {
  Push,
  PushToken
} from '@ionic/cloud-angular';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  rootPage = HomePage;

  constructor(platform: Platform, public push: Push) {
    platform.ready().then(() => {
      StatusBar.styleDefault();
      Splashscreen.hide();

      this.push.register().then((t: PushToken) => {
        return this.push.saveToken(t);
      }).then((t: PushToken) => {
        console.log('Token saved:', t.token);
      });

      this.push.rx.notification()
      .subscribe((msg) => {
        // CALL SERVE TO GET DATA
      });
    });
  }
}

ИСТОЧНИК

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