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

时间:2018-04-09 18:33:11

标签: django apple-push-notifications ionic3 firebase-cloud-messaging phonegap-plugins

我目前的筹码是: 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收到的console.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

1 个答案:

答案 0 :(得分:0)

哇这个问题太傻了。 但是这里出了什么问题:你必须把notId放在第一位!

像这样:

nav ul li a:hover {
  background: #E2472F;
  color: #ffffff;
}