Firebase + Phonegap插件推送:如何发送无声消息但更新应用程序



我当前的堆栈是:Django 使用 FCM 向 Ionic 应用程序发送推送通知。该应用程序使用Phonegap-plugin-push。

我有一个问题,即没有调用通知处理程序。

以下是我发送的数据:

    'message': {
        'token': '<my-device-token>',
        'data': {
            'yup': 'okay'
        },
        'apns': {
            'payload': {
                'aps': {
                    'data': 'here is my data',
                    'badge': 1,
                    'content-available': 1
                },
                'notId': 2
            }
        }
    }

应用获取数据,但不知何故未调用 on notificatoin 处理程序。这也是我在应用程序中的代码:

import { Injectable } from '@angular/core';
import { Push, PushObject, PushOptions } from '@ionic-native/push';
import { AlertController, Platform } from 'ionic-angular';
import { FcmDataProvider } from './fcm.data';
@Injectable()
export class FcmProvider {
  /*
   * FIREBASE CLOUD MESSAGING
   */
  constructor(private push: Push,
              private alertCtrl: AlertController,
              private platform: Platform,
              private fcmDataProv: FcmDataProvider) {
  }
  getPermission(): Promise<{isEnabled: boolean}> {
    // Listen for res.isEnabled.
    return this.push.hasPermission();
  }
  initPush() {
    console.log("Init push!");
    const options: PushOptions = this.initPushOptions();
    const pushObject: PushObject = this.push.init(options);
    pushObject.on('notification').subscribe((notification: any) => {
      console.log('Received a notification', notification);
      if(this.platform.is('ios')) {
        this.handleIOSNotification(notification, pushObject);
      } else if(this.platform.is('android')) {
        this.handleAndroidNotification(notification);
      }
      this.presentSuccessAlert(notification.message);
    });
    pushObject.on('registration').subscribe(
      (registration: any) => {
        console.log('Device registered', registration);
        // TODO: Send registration.registrationId to server and update it.
      }
    );
    pushObject.on('error').subscribe(
      error => console.error('Error with Push plugin', error)
    );
  }
  private initPushOptions(): PushOptions {
    return {
      android: {
        sound: true,
        vibrate: true,
        clearBadge: true
      },
      ios: {
          alert: true,
          badge: true,
          sound: true,
          clearBadge: true
      },
      windows: {}, // Lol
      browser: {
          pushServiceURL: 'http://push.api.phonegap.com/v1/push'
      }
    };
  }
  private handleIOSNotification(data, push: PushObject) {
    push.finish().then(
      () => console.log("Finished processing push data")
    ).catch(() => console.error(
      "Something went wrong with push.finish for ID=", data.additionalData.notId
    ));
  }
  private handleAndroidNotification(data) {
    console.log(data.data);
  }
  private presentSuccessAlert(message: string): void {
    let alert = this.alertCtrl.create({
      title: "Neue Benachrichtigung",
      message: message,
      buttons: ["Ok"]
    });
    alert.present();
  }
}

我正在 iOS 上进行测试,但我很想知道如何在 android 上处理它。

编辑:这是我从XCode收到的控制台.log:

Push Plugin notId 1
Warning: Application delegate received call to -application:didReceiveRemoteNotification:fetchCompletionHandler: but the completion handler was never called.
Notification received
Push Plugin key: content-available
Push Plugin key: data
Push Plugin key: badge
哇,

这个问题超级愚蠢。但问题是:你必须把notId放在第一位!

喜欢这个:

                "notId": 1, # notId HAS TO BE FIRST!!!
                'aps': {
                    'data': 'here is my data',
                    'content-available': 1,
                }

相关内容

  • 没有找到相关文章

最新更新