Zum Hauptinhalt springen
Anleitung

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

Learn how to integrate push notifications in your Ionic Capacitor app using Firebase, with step-by-step instructions for both Android and iOS platforms.

Martin Donadieu

Martin Donadieu

Inhaltsmarketer

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

In this tutorial, we will integrate push notifications in an Ionic Capacitor app using Firebase. For a maintained Capacitor plugin with Firebase Cloud Messaging support, see @capgo/capacitor-firebase-messaging@ionic-capacitor/firebase-messaging

Zuerst erstellen wir eine Ionic-App mit Capacitor aktiviert und legen unsere Paket-ID, die eindeutige Identifikationsnummer für Ihre App ist. Dann bauen wir die App und fügen die nativen Plattformen hinzu.

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

Wenn Sie bereits eine App haben, können Sie die capacitor.config.json anpassen, um Ihre appIdeinzufügen. Allerdings müssen Sie, wenn Ihre native Ordner bereits existieren, den ID-Wert in allen Dateien ersetzen, in denen er erscheint, da Capacitor nur den Ordner einmal erstellt und den ID-Wert selbst nicht aktualisiert. In der__CAPGO_KEEP_0__.config.json capacitor.config.json, you can also specify options like updating the badge count, playing sound on push, and showing an alert when a notification arrives.

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

Jetzt konfigurieren wir Push-Benachrichtigungen außerhalb der App.

Firebase-Konfiguration

Beginnen Sie damit eine neue Firebase-Projekt zu erstellen oder ein bestehendes zu verwenden. Geben Sie einen Namen und Standardoptionen für ein neues Projekt an.

Wenn Sie ein neues App haben, sollten Sie sehen “Get started by adding Firebase to your app” in Ihrem App-Dashboard. Ansonsten klicken Sie auf das Zahnrad-Symbol und gehen Sie zu Projekt-Einstellungen um eine App hinzuzufügen.

Das Dialogfeld für beide iOS und Android sieht ähnlich aus, und das Wichtige ist, dass Sie Ihren Paket-Id verwenden für die Apps.

firebase-app-setup-ios

Nach dem ersten Schritt laden Sie die folgenden Dateien her:

  • google-services.json Datei für Android
  • GoogleService-info.plist Datei für iOS

Als Nächstes konfigurieren Sie die Plattformen.

Android Push Vorbereitung

Für Android verschieben Sie die google-services.json Datei, die Sie heruntergeladen haben in das android/app/ Ordner.

android-push-file

Das ist alles für Android. Jetzt konfigurieren wir iOS.

iOS-Push-Vorbereitung

Dieser Teil ist komplizierter. Zuerst Erstellen Sie ein App-ID für Ihre App innerhalb der Identifikationsliste Ihrer Apple-Entwicklerkonto. Stellen Sie sicher, dass Sie die Push-Benachrichtigungsfähigkeit aus der Liste auswählen.

ionic-ios-push-id

Das Bundle-ID should be the same as your App ID within Capacitor and Firebase.

Jetzt, erstellen Sie eine Schlüssel und aktivieren Sie die Apple Push-Benachrichtigungen-Dienst (APNs)Wenn Sie die maximale Anzahl von Schlüsseln erreicht haben, können Sie einen bestehenden Schlüssel oder eine Zertifizierung verwenden, aber der Prozess ist komplexer.

ios-developer-push-key

Nach dem Herunterladen des .p8 Dateien, laden Sie sie in Firebase hoch. Öffnen Sie die Cloud Messaging Registerkarte in Ihren Firebase-Projekt-Einstellungen, laden Sie das Datei hoch und geben Sie die Details für die Key-ID und Ihre Team-ID von iOS ein.

firebase-upload-ios-key

Machen Sie nun Änderungen an Ihrem Xcode-Projekt, indem Sie Folgendes ausführen:

npx cap open ios

Kopieren Sie die GoogleService-Info.plist Datei, die Sie von Firebase heruntergeladen haben, in Ihr iOS-Projekt. Ziehen Sie die Datei in das Xcode-Projekt innerhalb der app/app-Folder und wählen Sie Wenn erforderlich kopieren.

Als Nächstes fügen Sie eine neue Pod für die Firebase-Abhängigkeit in der ios/App/Podfile:

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

Aktualisieren Sie die native Plattform mit diesem Befehl:

npx cap update ios

Ändern Sie die native Swift code in ios/App/App/AppDelegate.swift um sich bei Firebase anzumelden und den richtigen Token an Ihre App zurückzugeben.

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)
            }
        }
    }
}

Fügen Sie schließlich die Fähigkeit für Push-Benachrichtigungen innerhalb Ihres Xcode-Projekts hinzu.

capacitor-xcode-fähigkeit

Bauen Sie nun Ihre App und integrieren Sie Push-Benachrichtigungen.

Ionic-Integration von Push-Benachrichtigungen

Erstellen Sie einen Dienst und eine neue Seite in Ihrem Ionic-Projekt:

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

Aktualisieren Sie die Routen in app/app-routing.module.ts um die neue Seite mit einem dynamischen ID einzubeziehen:

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 { }

Erstellen Sie einen Dienst zum Handhaben von Push-Benachrichtigungen in services/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}`);
        }
      }
    );
  }
}

Rufen Sie die initPush() Funktion 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();
    });
  }
}

Die Informationen auf der Details-Seite 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();
  }

}

Die Details 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>

Bauen Sie die App, synchronisieren Sie Ihre Änderungen und deployen Sie sie auf Ihrem Gerät.

ionic build
npx cap sync

Jetzt können Sie mit Firebase Push-Benachrichtigungen senden.

Push-Benachrichtigungen mit Firebase senden

Es gibt mehrere Möglichkeiten, Push-Benachrichtigungen mit Firebase zu senden.

Spezifische Geräte-Test

Nachdem Sie Ihre App auf einem Gerät bereitgestellt haben, können Sie die Konsole-Protokolle überprüfen, um den Token nach der Registrierung zu sehen. Verwenden Sie diesen Token, um eine gezielte Test-Benachrichtigung zu senden, um Ihre Integration zu überprüfen. In Firebase gehen Sie zu Cloud Messaging und wählen Senden Sie eine Testnachricht. Fügen Sie den Gerätekennungswert aus den Protokollen hinzu.

firebase-test-push

Wenn alles korrekt eingerichtet ist, sollten Sie auf Ihrem Gerät eine Push-Nachricht sehen.

Push-Nachricht mit Payload

Um eine Push-Nachricht mit zusätzlichen Informationen zu testen, folgen Sie dem Assistenten auf derselben Seite, um allgemeine Informationen anzugeben und die Plattform auszuwählen, auf die Sie zielen möchten. Fügen Sie zusätzliche Optionen hinzu, um eine Payload mit Ihrer Push-Nachricht zu senden.

firebase-push-payload

Im Erweiterte Optionen Sektion, fügen Sie eine Eigene Daten Eigenschafts-Wert-Paar. Zum Beispiel können Sie die Eigenschaft detailsId und einen Wert Ihrer Wahl verwenden. Diese Daten werden im App verwendet, um zur Details-Seite mit der angegebenen ID zu navigieren.

Nach dem Versand der Push-Benachrichtigung sollte Ihre App sie empfangen und die Details-Seite mit der angegebenen ID anzeigen, wenn die Benachrichtigung angeklickt wird.

Mit Firebase API

Sie können auch Push-Benachrichtigungen programmatisch mithilfe von Firebase API senden. Dazu müssen Sie die Server-Schlüssel aus Ihren Firebase-Projekt-Einstellungen unter der Cloud Messaging Registerkarte erhalten.

Mit der Server-Schlüssel können Sie einen POST-Antrag an die Firebase API senden, mit dem erforderlichen Payload. Hier ist ein Beispiel mit Node.js und der request Bibliothek:

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);
  }
});

Ersetzen YOUR_SERVER_KEY und YOUR_DEVICE_TOKEN Ersetzen Sie mit Ihrem tatsächlichen Server-Schlüssel und Geräte-Token. Führen Sie das Skript aus, und Ihr Gerät sollte die Push-Benachrichtigung mit dem benutzerdefinierten Payload erhalten.

Das ist es! Sie haben erfolgreich Push-Benachrichtigungen in Ihrem Ionic Capacitor-App mit Firebase integriert. Jetzt können Sie Push-Benachrichtigungen an Ihre Benutzer auf beiden Android- und iOS-Plattformen senden.

Weitermachen Sie mit Ionic Capacitor Push-Benachrichtigungen mit Firebase: Eine Schritt-für-Schritt-Anleitung

Wenn Sie Ionic __CAPGO_KEEP_0__ Push-Benachrichtigungen mit Firebase verwenden Ionic Capacitor Push-Benachrichtigungen mit Firebase: Eine Schritt-für-Schritt-Anleitung um die Migration und die Unternehmensoperationen zu planen, verbinden Sie es mit Capgo Enterprise für das Produktworkflow in Capgo Enterprise, Alternativen zum Ionic Enterprise Plugin Alternativen für den Produktworkflow in Alternativen zum Ionic Enterprise Plugin Capgo Alternativen Alternativen für den Produktworkflow in Capgo Alternativen Capgo Consulting Alternativen für den Produktworkflow in Capgo Consulting und Capgo Premium Support Alternativen für den Produktworkflow in Capgo Premium Support.

Live-Updates für Capacitor-Apps

Wenn ein Fehler im Web-Schicht lebt, schicken Sie die Reparatur über Capgo anstatt Tage zu warten, bis die App-Store-Zulassung genehmigt ist. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Hilfe von Martin

Loslegen

Neueste aus unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle mobile App zu erstellen.