Saltare al contenuto principale
Guida pratica

Ionic Capacitor Notifiche Push con Firebase: Una Guida Passo dopo Passo

Scopri come integrare le notifiche push nel tuo app Ionic Capacitor utilizzando Firebase, con istruzioni passo dopo passo per entrambi i piattaforme Android e iOS.

Crediti dell'articolo

Martino Donadieu

Scrittore

Valeria

Valutatore

Jordan

Curatore

Ionic Capacitor Notifiche Push con Firebase: Una Guida Passo dopo Passo

In questo tutorial, integreremo le notifiche push in un'app Ionic Capacitor utilizzando Firebase. Per un plugin mantenuto Capacitor con supporto per Firebase Cloud Messaging, vedere @capgo/capacitor-messaging-firebase. Non è necessario un servizio specifico per questo, ma è necessario configurare diverse cose in anticipo. Firebase è un'ottima scelta poiché è richiesto per Android, e puoi facilmente utilizzarlo per inviare notifiche senza utilizzare il database.

Prima, creeremo un'app Ionic con Capacitor abilitato e specificheremo le nostre package idche è l'identificatore univoco per la tua app. Successivamente, costruiremo l'app e aggiungeremo le piattaforme native.

ionic start pushApp blank --type=angular --capacitor --package-id=com.appdactic.devpush
cd ./pushApp
ionic build
npx cap add ios
npx cap add android

Se già hai un'app, puoi modificare il capacitor.config.json per includere il tuo appId. Tuttavia, se i cartelle native già esistono, dovrai sostituire l'id in tutti i file in cui compare, poiché Capacitor crea la cartella una volta sola e non aggiorna l'id stesso. Nella capacitor.config.json, puoi specificare anche opzioni come aggiornare il conteggio del badge, riprodurre un suono al push e mostrare un avviso quando arriva una notifica.

{
  "appId": "com.appdactic.devpush",
  "appName": "pushApp",
  "bundledWebRuntime": false,
  "npmClient": "npm",
  "webDir": "www",
  "plugins": {
    "SplashScreen": {
      "launchShowDuration": 0
    },
    "PushNotifications": {
      "presentationOptions": ["badge", "sound", "alert"]
    }
  },
  "cordova": {}
}

Ora, configuriamo le notifiche push al di fuori dell'app.

Configurazione Firebase

Inizia con creare un nuovo progetto Firebase o utilizzare uno esistente. Fornisci un nome e opzioni predefinite per un nuovo progetto.

Se hai un nuovo app, dovresti vedere “Inizia con l'aggiunta di Firebase alla tua app” nel pannello di controllo della tua app. Altrimenti, clicca l'icona del clessidra e vai a impostazioni del progetto per aggiungere un'app.

Il dialogo per entrambi iOS e Android assomiglia, e l'importante è utilizzare il tuo ID del pacchetto per gli app.

firebase-app-setup-ios

Dopo lo step iniziale, scarica i seguenti file:

  • google-services.json file per Android
  • GoogleService-info.plist file per iOS

Successivamente, configura le piattaforme.

Preparazione dei Push per Android

Per Android, sposta il google-services.json file che hai scaricato nella android/app/ cartella.

file-push-android

Ecco tutto per Android. Ora configuriamo iOS.

Preparazione delle notifiche push per iOS

Questa parte è più complessa. In primo luogo, crea un ID App per la tua app nella lista degli identificatori del tuo account di sviluppatore Apple. Assicurati di selezionare la capacità delle notifiche push dalla lista. ID push iOS

L'ID del bundle

The ID della raccolta Deve essere lo stesso del tuo ID App all'interno di Capacitor e Firebase.

Ora, crea una Chiave e abilita il servizio di notifiche push per Apple (APNs). Se hai raggiunto il numero massimo di chiavi, puoi utilizzare una chiave esistente o un certificato al suo posto, ma il processo è più complesso.

ios-developer-push-key

Dopo aver scaricato il .p8 file, caricalo su Firebase. Apri la scheda Messaggistica Cloud nelle impostazioni del tuo progetto Firebase, caricalo e inserisci i dettagli per la Chiave ID e il tuo ID Team da iOS.

firebase-upload-ios-key

Esegui le modifiche al tuo progetto Xcode eseguendo:

npx cap open ios

Copia il GoogleService-Info.plist dragga il file che hai scaricato da Firebase nel tuo progetto iOS. Trascina il file nel progetto Xcode all'interno della cartella app/app, e seleziona Copia gli elementi se necessario.

Aggiungi quindi un nuovo Pod per la dipendenza Firebase nel ios/App/Podfile:

target 'App' do
  capacitor_pods
  # Add your Pods here
  pod 'Firebase/Messaging'
end

Aggiorna la piattaforma nativa con questo comando:

npx cap update ios

Modifica il nativo Swift code in Modifica la piattaforma nativa Swift __CAPGO_KEEP_0__ in registrare con Firebase e restituire il token corretto al tuo app.

import UIKit
import Capacitor
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    return true
  }

  // All the existing functions
  // ...

  // Update this one:
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Messaging.messaging().apnsToken = deviceToken
        InstanceID.instanceID().instanceID { (result, error) in
            if let error = error {
                NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidFailToRegisterForRemoteNotificationsWithError.name()), object: error)
            } else if let result = result {
                NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidRegisterForRemoteNotificationsWithDeviceToken.name()), object: result.token)
            }
        }
    }
}

Infine, aggiungi la Capacità per le Notifiche Push nel tuo progetto Xcode.

capacitor-capacità-xcode

Ora, costruisci l'app e integra le notifiche push.

Integrazione delle Notifiche Push di Ionic

Crea un servizio e una nuova pagina nel tuo progetto Ionic:

ionic g service services/fcm
ionic g page pages/details

Aggiorna la navigazione in app/app-routing.module.ts per includere la nuova pagina con un id dinamico:

import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';

const routes: Routes = [
  {
    path: 'home',
    loadChildren: () => import('./home/home.module').then( m => m.HomePageModule)
  },
  {
    path: '',
    redirectTo: 'home',
    pathMatch: 'full'
  },
  {
    path: 'home/:id',
    loadChildren: () => import('./pages/details/details.module').then( m => m.DetailsPageModule)
  },
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Crea un servizio per gestire le notifiche push in servizi/fcm.service.ts:

import { Injectable } from '@angular/core';
import {
  Plugins,
  PushNotification,
  PushNotificationToken,
  PushNotificationActionPerformed,
  Capacitor
} from '@capacitor/core';
import { Router } from '@angular/router';

const { PushNotifications } = Plugins;

@Injectable({
  providedIn: 'root'
})
export class FcmService {

  constructor(private router: Router) { }

  initPush() {
    if (Capacitor.platform !== 'web') {
      this.registerPush();
    }
  }

  private registerPush() {
    PushNotifications.requestPermission().then((permission) => {
      if (permission.granted) {
        // Register with Apple / Google to receive push via APNS/FCM
        PushNotifications.register();
      } else {
        // No permission for push granted
      }
    });

    PushNotifications.addListener(
      'registration',
      (token: PushNotificationToken) => {
        console.log('My token: ' + JSON.stringify(token));
      }
    );

    PushNotifications.addListener('registrationError', (error: any) => {
      console.log('Error: ' + JSON.stringify(error));
    });

    PushNotifications.addListener(
      'pushNotificationReceived',
      async (notification: PushNotification) => {
        console.log('Push received: ' + JSON.stringify(notification));
      }
    );

    PushNotifications.addListener(
      'pushNotificationActionPerformed',
      async (notification: PushNotificationActionPerformed) => {
        const data = notification.notification.data;
        console.log('Action performed: ' + JSON.stringify(notification.notification));
        if (data.detailsId) {
          this.router.navigateByUrl(`/home/${data.detailsId}`);
        }
      }
    );
  }
}

Chiamare la initPush() funzione in app/app.component.ts:

import { Component } from '@angular/core';

import { Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { FcmService } from './services/fcm.service';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss']
})
export class AppComponent {
  constructor(
    private platform: Platform,
    private splashScreen: SplashScreen,
    private statusBar: StatusBar,
    private fcmService: FcmService
  ) {
    this.initializeApp();
  }

  initializeApp() {
    this.platform.ready().then(() => {
      this.statusBar.styleDefault();
      this.splashScreen.hide();

      // Trigger the push setup
      this.fcmService.initPush();
    });
  }
}

Gestisci le informazioni sulla pagina dei dettagli in pages/details/details.page.ts:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Plugins } from '@capacitor/core';
const { PushNotifications } = Plugins;

@Component({
  selector: 'app-details',
  templateUrl: './details.page.html',
  styleUrls: ['./details.page.scss'],
})
export class DetailsPage implements OnInit {
  id = null;

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {
    this.route.paramMap.subscribe(params => {
      this.id = params.get('id');
    });
  }

  resetBadgeCount() {
    PushNotifications.removeAllDeliveredNotifications();
  }

}

Visualizza i dettagli in pages/details/details.page.html:

<ion-header>
  <ion-toolbar>
    <ion-buttons slot="start">
      <ion-back-button defaultHref="/"></ion-back-button>
    </ion-buttons>
    <ion-title>Details</ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>
  My Id from push: {{ id }}

  <ion-button (click)="resetBadgeCount()" expand="block">
    Reset Badge Count
  </ion-button>
</ion-content>

Costruisci l'applicazione, sincronizza le tue modifiche e distribuiscila sul tuo dispositivo.

ionic build
npx cap sync

Ora, puoi inviare notifiche push con Firebase.

Invio di Notifiche Push con Firebase

Ci sono diversi modi per inviare notifiche push con Firebase.

Test di dispositivo specifico

Dopo aver distribuito la tua applicazione su un dispositivo, puoi controllare i log del console per vedere il token dopo la registrazione. Utilizza questo token per inviare un test di notifica mirata per confermare che la tua integrazione funziona. In Firebase, vai a Messaggistica Cloud e seleziona Invia messaggio di prova. Aggiungi il token dispositivo dai log.

firebase-test-push

Se tutto è configurato correttamente, dovresti vedere una notifica push sul tuo dispositivo.

Messaggio di push con payload

Per testare una notifica push con informazioni aggiuntive, segui il wizard sulla stessa pagina per specificare informazioni generali e selezionare la piattaforma che desideri raggiungere. Aggiungi opzioni aggiuntive per inviare una payload con la tua notifica push.

firebase-push-payload

Nel Opzioni avanzate Sezione, aggiungi una Dati personalizzati chiave-valore. Ad esempio, puoi utilizzare la chiave detailsId e un valore di tua scelta. Questi dati verranno utilizzati nell'app per navigare alla pagina dei dettagli con l'id specificato.

Dopo aver inviato la notifica push, l'app dovrebbe riceverla e visualizzare la pagina dei dettagli con l'id specificato quando la notifica viene selezionata.

Utilizzando Firebase API

È anche possibile inviare notifiche push in modo programmatico utilizzando il Firebase API. Per farlo, è necessario ottenere la Chiave del server dal tuo progetto Firebase impostazioni sotto la Messaggistica Cloud tabella.

Con la chiave del server, puoi inviare una richiesta POST al Firebase API con il payload richiesto. Ecco un esempio utilizzando Node.js e il request biblioteca:

const request = require('request');

const serverKey = 'YOUR_SERVER_KEY';
const deviceToken = 'YOUR_DEVICE_TOKEN';

const options = {
  method: 'POST',
  url: 'https://fcm.googleapis.com/fcm/send',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'key=' + serverKey
  },
  body: JSON.stringify({
    to: deviceToken,
    notification: {
      title: 'Test Push',
      body: 'This is a test push notification with custom data'
    },
    data: {
      detailsId: '123'
    }
  })
};

request(options, (error, response, body) => {
  if (error) {
    console.error('Error sending push:', error);
  } else {
    console.log('Push sent successfully:', body);
  }
});

Sostituisci YOUR_SERVER_KEY e YOUR_DEVICE_TOKEN con la tua chiave server reale e il token dispositivo. Eseguire lo script e il tuo dispositivo dovrebbe ricevere la notifica push con il payload personalizzato.

È tutto! Hai integrato con successo le notifiche push nel tuo app Ionic Capacitor utilizzando Firebase. Ora puoi inviare notifiche push ai tuoi utenti su entrambi i piattaforme Android e iOS.

Continua da qui: Ionic Capacitor Push Notifications with Firebase: A Step-by-Step Guide

Se stai utilizzando Ionic Capacitor Notifiche Push con Firebase: Una Guida Passo dopo Passo per pianificare la migrazione e le operazioni aziendali, connettilo con Capgo Enterprise per il flusso di lavoro del prodotto in Capgo Enterprise Alternativi per Plugin Enterprise Ionic per il workflow del prodotto in Alternatives per Ionic Enterprise Plugin Alternative di Capgo per il workflow del prodotto in Capgo Alternatives Consulenza Capgo per il workflow del prodotto in Capgo Consulting, e Capgo Supporto Premium per il workflow del prodotto in Capgo Supporto Premium.

Aggiornamenti in tempo reale per Capacitor app

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Ultimi articoli del nostro Blog

Capgo gives you the best insights you need to create a truly professional mobile app.