SDK-Integrationsleitfaden: HarmonyOS Push-Benachrichtigungen mit EngageLab
Hinweise zur Nutzung
Dieser Leitfaden beschreibt die Standardintegration des EngageLab HarmonyOS SDK und richtet sich an Entwickler:innen, die bereits mit den Grundlagen von DevEco Studio sowie der HarmonyOS-Programmierung vertraut sind.
Die Anleitung gilt für EngageLab HarmonyOS SDK Version 1.0.0 und alle nachfolgenden Versionen.
- Aktuell werden HarmonyOS API 12 und höher unterstützt.
Produktfunktionsbeschreibung
EngageLab Push (engagelab) ist ein End-to-End-Push-Service, der es ermöglicht, Nachrichten vom Server zeitnah an die Endgeräte der Nutzer:innen zu senden. So können Sie die Verbindung zu Ihren Nutzer:innen aufrechterhalten, die Nutzeraktivität steigern und die App-Retention erhöhen. Der EngageLab Push-Client unterstützt Android, iOS, HarmonyOS und QuickApp.
Das HarmonyOS SDK erleichtert es Entwickler:innen, Push-Benachrichtigungen schnell und unkompliziert in HarmonyOS-Apps zu integrieren.
Hauptfunktionen
- Aufbau und Aufrechterhaltung einer dauerhaften Verbindung zum Server, damit Push-Benachrichtigungen sofort an den Client übermittelt werden können
- Empfang von Push-Benachrichtigungen und Weiterleitung relevanter Informationen an die Entwickler-App
Hauptmerkmale
- Ressourcenschonende und energieeffiziente Verbindung auf dem Client
- Vielfältige SDK-Schnittstellen, anpassbare Benachrichtigungsstile
- Leistungsfähiger und stabiler Serverbetrieb
Integrationsmethoden
Automatische Integration
har-Abhängigkeit
Hinweis: Fügen Sie im oh-package.json5 des entry-Moduls folgende Zeile hinzu:
"dependencies": {
"@engagelab/push": "x.x.x" // Gewünschte Version eintragen, z. B.: "@engagelab/push": "1.0.0"
}
Hinweis 2: Da die har-Datei nun als Bytecode vorliegt, stellen Sie sicher, dass Ihre IDE auf Version 5.0.3.500 oder höher aktualisiert ist. Aktivieren Sie im projektweiten build-profile.json5 die Option "useNormalizedOHMUrl": true:
"products": [
{
"buildOption": {
"strictMode": {
"useNormalizedOHMUrl": true // aktivieren
}
},
"name": "default",
"signingConfig": "default",
"compileSdkVersion": "5.0.0(12)",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS"
}
]
Manuelle Integration
Download-Link für das Integrationspaket: Jetzt herunterladen.
Das Integrationspaket enthält folgende Komponenten:
Inhalt des engagelab-hmos-x.x.x-release.zip
- engagelab-hmos-x.x.x-release.har
- Hauptbibliothek für die EngageLab-Entwicklerdienste
- doc
- Dokumentation
- entry
- HMOS-Demo-Projekt, das die grundlegende Nutzung des EngageLab SDK demonstriert und als Referenz dient
Integration der har-Datei
- Entpacken Sie das Archiv
engagelab-hmos-x.x.x-release.zip. - Kopieren Sie
engagelab-hmos-x.x.x-release.harin das Verzeichnisentry/hars/Ihres Projekts (der Ordnername kann angepasst werden).
Hinweis: Um die har-Datei zu referenzieren, fügen Sie im oh-package.json5 des entry-Moduls Folgendes hinzu:
"dependencies": {
"jg_harmony_har": "./hars/engagelab-hmos-x.x.x-release.har" // Pfad zur har-Datei anpassen
}
Hinweis 2: Da die har-Datei nun als Bytecode vorliegt, stellen Sie sicher, dass Ihre IDE auf Version 5.0.3.500 oder höher aktualisiert ist. Aktivieren Sie im projektweiten build-profile.json5 die Option "useNormalizedOHMUrl": true:
"products": [
{
"buildOption": {
"strictMode": {
"useNormalizedOHMUrl": true // aktivieren
}
},
"name": "default",
"signingConfig": "default",
"compileSdkVersion": "5.0.0(12)",
"compatibleSdkVersion": "5.0.0(12)",
"runtimeOS": "HarmonyOS"
}
]
Konfiguration der HMOS-Plattforminformationen
Für die Push-Funktionalität müssen HarmonyOS-Plattforminformationen konfiguriert werden.
Erforderliche Schritte:
Ermitteln Sie die
client_idder jeweiligen App im HMOS-Projekt (Achtung: Es ist nicht dieclient_iddes Projekts!)
Wichtig: Nach dem Erstellen der HarmonyOS-App muss der SHA256-Zertifikats-/Public-Key-Fingerprint konfiguriert werden: Klicken Sie auf „SHA256证书/公钥指纹“ und dann auf „添加公钥指纹(HarmonyOS API 9及以上)“. Details siehe „Konfiguration der Signatur“.
Push-Service auf der HMOS-Plattform aktivieren
Die
client_idwird wie folgt in dermodule.json5des entry-Moduls eingetragen:"module": { "metadata": [ { "name": "client_id", "value": "IhreID" } ] }"module": { "metadata": [ { "name": "client_id", "value": "IhreID" } ] }Diesen Codeblock im schwebenden Fenster anzeigenSignatur konfigurieren
Schritt 1: Signaturdatei vorbereiten
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-publish-app-0000001053223745-V5#section793484619307Schritt 2: Release-Zertifikat beantragen
https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-releasecert-0000001946273961Schritt 3: Release-Profile beantragen, Format .p7b
https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-releaseprofile-0000001914714796Schritt 4: Signatur im lokalen Projekt konfigurieren

Konfiguration der EngageLab-Plattforminformationen
Nach Abschluss der obigen Schritte müssen Sie noch die EngageLab-Plattforminformationen konfigurieren.
Hauptschritte:
- Erstellen Sie eine App auf der EngageLab-Plattform und stellen Sie sicher, dass Paketname und appKey mit den Angaben auf der Plattform übereinstimmen.
Hinweis 1:
Paketname im lokalen Projekt konfigurieren – imapp.json5des AppScope-Projekts:
{
"app": {
"bundleName": "IhrPaketname",
}
}
Hinweis 2:
EngageLab appKey (wird nach dem Erstellen der App im EngageLab-Backend generiert) im Code wie folgt setzen:
export default class MyAbilityStage extends AbilityStage {
onCreate() {
EPushInterface.setAppKey("IhrAppKey") // Vor init aufrufen
}
}
Hinweis 3:
Callback-Informationen im Code wie folgt konfigurieren:
export default class MyAbilityStage extends AbilityStage {
onCreate() {
EPushInterface.setCallBackMsg(InstanzDerCallBackMsg-Klasse) // Vor init aufrufen
}
}
Konfiguration der Benachrichtigungs-Weiterleitungsseite
Push-Benachrichtigungen können auf eine bestimmte App-Seite weitergeleitet werden.
Seiten können per URI oder per Action gematcht werden:
- Über URIs: Die Seite wird anhand der URI gematcht, beim Push ist dann
url=IhrScheme://IhrHost:IhrPort/IhrPath. - Hinweis: Bei der URI-Methode muss
actionsals leerer String konfiguriert werden.
{
"exported": true,
"skills": [
{
"actions": [""], // actions MUSS leer sein
"uris": [
{
"scheme": "IhrScheme",
"host": "IhrHost",
"port": "IhrPort",
"path": "IhrPath"
}
]
}
]
}
- Über Actions: Die Seite wird anhand des Actions-Werts gematcht, beim Push ist
actions=IhrAction.
{
"exported": true,
"skills": [
{
"actions": ["IhrAction"],
}
]
}
Push-Benachrichtigungsberechtigung beantragen
Ohne aktivierte Push-Benachrichtigungsberechtigung werden keine Push-Benachrichtigungen empfangen.
Erforderliche Schritte:
- Beim ersten Start der App Push-Benachrichtigungsberechtigung beantragen:
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
notificationManager.requestEnableNotification().then(() => {
hilog.info(0x0000, TAG, '%{public}s', `requestEnableNotification Erfolg`);
}).catch((err: Base.BusinessError) => {
hilog.error(0x0000, TAG, '%{public}s', `requestEnableNotification fehlgeschlagen, Code: ${err.code}, Nachricht: ${err.message}`);
});
}
}
Konfiguration benutzerdefinierter Push-Nachrichten
Um benutzerdefinierte Push-Nachrichten, die über den HarmonyOS-Kanal gesendet werden, zu verarbeiten, gehen Sie wie folgt vor:
Schritt 1
- Erstellen Sie im Verzeichnis
src/main/resources/base/profile/des Modulprojekts die DateiPushMessage.jsonmit folgendem Inhalt:
{
"path": "pushmessage/t_push_message",
"type": "rdb",
"scope": "application"
}
path: Muss
pushmessage/t_push_messagesein (Name der Datenbank und Tabelle)type: Muss
rdbsein (relationale Datenbank)scope:
application(App-weit) odermodule(hap-Modul-weit)Ergänzen Sie im
src/main/module.json5des Moduls unterproxyDatafolgende Konfiguration:
{
"module": {
"proxyData":[{
"uri": "datashareproxy://{bundleName}/PushMessage",
"requiredWritePermission": "ohos.permission.WRITE_PRIVACY_PUSH_DATA",
"metadata":{
"name": "dataProperties",
"resource": "$profile:PushMessage"
}
}]
}
}
- uri: Muss
datashareproxy://{bundleName}/PushMessagesein ({bundleName}ersetzen) - requiredWritePermission: Muss
ohos.permission.WRITE_PRIVACY_PUSH_DATAsein - metadata: name =
dataProperties, resource =$profile:PushMessage
Schritt 2
- Importieren Sie im Ability (z. B.
PushMessageAbility) das push-Modul. - Hinweis: Nur
UIAbilitykann BACKGROUND-Nachrichten empfangen.
import { UIAbility } from '@kit.AbilityKit';
import { EPushInterface } from '@engagelab/push';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'engagelab-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try { // Parameter von receiveMessage MUSS 'BACKGROUND' sein
pushService.receiveMessage('BACKGROUND', this, async (data: pushCommon.PushPayload) => {
let jg = await EPushInterface.customMessageBackgroundData(data)
if (jg) { // true = bereits verarbeitet
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'BACKGROUND fehlgeschlagen:'+JSON.stringify(e));
}
}
- Ergänzen Sie im Abschnitt
abilitiesdessrc/main/module.json5die Actionaction.ohos.push.listener(nur eine Ability darf diese Action definieren; fallsurismit angegeben werden, mussurisleer sein):
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"skills": [
{
"actions": [
"action.ohos.push.listener"
]
}
]
}
]
Erweiterte Push-Benachrichtigungen konfigurieren
So konfigurieren Sie erweiterte Push-Benachrichtigungen:
Schritt 1
- Wenn der Prozess nicht existiert, wird der Notification Extension Process durchlaufen. In diesem Prozess können Sie z. B. Sprachausgabe realisieren und bestimmte Nachrichteninhalte (z. B. title, body) zurückgeben, um die aktuelle Nachricht zu überschreiben. Push Kit zeigt dann die Benachrichtigung an.
- Erstellen Sie eine Komponente vom Typ
ExtensionAbility, die vonRemoteNotificationExtensionAbilityerbt, überschreiben Sie die MethodeonReceiveMessage()und rufen SieEPushInterface.receiveExtraDataMessageauf:
import { pushCommon, RemoteNotificationExtensionAbility } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { EPushInterface } from '@engagelab/push';
const TAG: string = 'engagelab-JLog-RemoteNotificationExtAbility'
export default class RemoteNotificationExtAbility extends RemoteNotificationExtensionAbility {
async onReceiveMessage(remoteNotificationInfo: pushCommon.RemoteNotificationInfo): Promise<pushCommon.RemoteNotificationContent> {
hilog.info(0x0000, TAG, 'onReceiveMessage, remoteNotificationInfo: %{public}s',
JSON.stringify(remoteNotificationInfo));
let jMessageExtra = await EPushInterface.receiveExtraDataMessage(this, remoteNotificationInfo);
hilog.info(0x0000, TAG, 'onReceiveMessage jMessageExtra:' + JSON.stringify(jMessageExtra));
return {} // Um die Benachrichtigung zu ändern, können Sie hier Daten zurückgeben
}
onDestroy(): void {
hilog.info(0x0000, TAG, 'RemoteNotificationExtAbility onDestroy.');
}
}
- Ergänzen Sie im Abschnitt
extensionAbilitiesdessrc/main/module.json5die Konfiguration fürRemoteNotificationExtAbility(nur eine ExtensionAbility; fallsurismit angegeben werden, mussurisleer sein):
"extensionAbilities": [
{
"name": "RemoteNotificationExtAbility",
"type": "remoteNotification",
"srcEntry": "./ets/entryability/RemoteNotificationExtAbility.ets",
"description": "RemoteNotificationExtAbility test",
"exported": false,
"skills": [
{
"actions": ["action.hms.push.extension.remotenotification"]
}
]
}
]
- type: Muss
remoteNotificationsein - actions: Muss
action.hms.push.extension.remotenotificationsein
Schritt 2
- Existiert der Prozess, wird dieser Ablauf genutzt. In diesem Fall wird keine Benachrichtigung angezeigt – unabhängig davon, ob die App im Vorder- oder Hintergrund ist.
- Sie können mit
receiveMessage()Benachrichtigungsdaten in Echtzeit empfangen:
import { UIAbility } from '@kit.AbilityKit';
import { EPushInterface } from '@engagelab/push';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'engagelab-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try { // Parameter von receiveMessage MUSS 'IM' sein
pushService.receiveMessage('IM', this, async (data) => {
let jg = await EPushInterface.extraMessageBackgroundData(data)
if (jg) { // true = bereits verarbeitet
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'IM fehlgeschlagen:'+JSON.stringify(e));
}
}
- Ergänzen Sie im Abschnitt
abilitiesdessrc/main/module.json5die Actionaction.ohos.push.listener(nur eine Ability darf diese Action definieren; fallsurismit angegeben werden, mussurisleer sein):
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"skills": [
{
"actions": [
"action.ohos.push.listener"
]
}
]
}
]
VoIP-Push-Benachrichtigungen konfigurieren
So konfigurieren Sie VoIP-Push-Benachrichtigungen:
Schritt 1
- Erstellen Sie im Verzeichnis
src/main/ets/entryabilityeineUIAbility-Komponente (z. B.PushMessageAbility.ets), die VoIP-Nachrichten verarbeitet:
import { UIAbility } from '@kit.AbilityKit';
import { EPushInterface } from '@engagelab/push';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'engagelab-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try {
pushService.receiveMessage('VoIP', this, async (data) => {
let jg = await EPushInterface.voIPMessageBackgroundData(data)
if (jg) { // true = bereits verarbeitet
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'VoIP fehlgeschlagen:'+JSON.stringify(e));
}
}
}
- Ergänzen Sie im Abschnitt
abilitiesdessrc/main/module.json5die Actionaction.ohos.push.listener(nur eine Ability darf diese Action definieren; fallsurismit angegeben werden, mussurisleer sein):
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"description": "PushMessageAbility test",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": false,
"skills": [
{
"actions": ["action.ohos.push.listener"]
}
]
}
]
„Nicht im Vordergrund anzeigen“-Funktion konfigurieren
So konfigurieren Sie die Funktion „Nicht im Vordergrund anzeigen“:
Schritt 1
- Erstellen Sie im Verzeichnis
src/main/ets/entryabilityeineUIAbility-Komponente (z. B.PushMessageAbility.ets), die entsprechende Nachrichten verarbeitet:
import { UIAbility } from '@kit.AbilityKit';
import { EPushInterface } from '@engagelab/push';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'engagelab-JLog-PushMessageAbility'
export default class PushMessageAbility extends UIAbility {
onCreate(): void {
try {
pushService.receiveMessage('DEFAULT', this, async (data: pushCommon.PushPayload) => {
let jg = await EPushInterface.defaultMessageBackgroundData(data)
if (jg) { // true = bereits verarbeitet
return
}
});
} catch (e) {
hilog.info(0x0000, TAG, '%{public}s', 'DEFAULT fehlgeschlagen:'+JSON.stringify(e));
}
}
}
- Ergänzen Sie im Abschnitt
abilitiesdessrc/main/module.json5die Actionaction.ohos.push.listener(nur eine Ability darf diese Action definieren; fallsurismit angegeben werden, mussurisleer sein):
"abilities": [
{
"name": "PushMessageAbility",
"srcEntry": "./ets/entryability/PushMessageAbility.ets",
"launchType": "singleton",
"description": "PushMessageAbility test",
"startWindowIcon": "$media:startIcon",
"startWindowBackground": "$color:start_window_background",
"exported": false,
"skills": [
{
"actions": ["action.ohos.push.listener"]
}
]
}
]
Push-Funktion aktivieren
Hauptschritte:
- Setzen Sie den
appKeyvor dem Aufruf voninit - Setzen Sie die Callback-Klasse vor dem Aufruf von
init
export default class MyAbilityStage extends AbilityStage {
onCreate() {
EPushInterface.setCallBackMsg(InstanzDerCallBackMsg-Klasse) // Callback setzen, vor init aufrufen
EPushInterface.setAppKey("IhrAppKey") // Vor init aufrufen
EPushInterface.init(this.context.getApplicationContext())
}
}
Berechtigungskonfiguration
Erforderliche Berechtigungen: Beantragen Sie diese vor dem Aufruf von init für präzisere Push-Benachrichtigungen.
Ab Version 1.0.0 ist die Konfiguration bereits im SDK enthalten.
Hauptschritte:
- Berechtigungen in der Konfigurationsdatei deklarieren
- Nutzer:in um Berechtigung bitten und nach erfolgreicher Vergabe
initaufrufen
Hinweis 1:
Berechtigungen insrc/main/module.json5des entry-Moduls deklarieren:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.APP_TRACKING_CONSENT",
"reason": "$string:reason",
"usedScene": {
"abilities": [
"EntryAbility" // meist Startseite
],
"when": "always"
}
}
]
}
}
Hinweis 2:
Berechtigung imEntryAbilityanfragen und danach Push-Funktion aktivieren:
const permissions: Array<Permissions> = ['ohos.permission.APP_TRACKING_CONSENT'];
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
let context:Context = this.context;
let atManager:abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => {
// Berechtigung erteilt – Push aktivieren
EPushInterface.init(this.context.getApplicationContext())
}).catch((err: BusinessError) => {
// Push trotzdem aktivieren
EPushInterface.init(this.context.getApplicationContext())
})
}
Erweiterte Funktionen
Empfehlung: Registration ID abrufen und anzeigen
Da alle Push-Formen von EngageLab letztlich auf die Registration ID abzielen, ist diese für die Fehleranalyse wichtig. Wir empfehlen, die Registration ID nach der SDK-Integration in weniger frequentierten Bereichen der App wie „Über“, „Feedback“ oder „Mein Bereich“ anzeigen zu lassen, damit Nutzer:innen sie bei Support-Anfragen leicht übermitteln können.
Beispielcode:
EPushInterface.getRegistrationID();

