Ionic 3.x: Push-уведомление на iOS не работает (работает на Android?) Ionic Native Plugin Push

avatar
J. Hesters
8 апреля 2018 в 08:01
9369
3
6

Я использую или пытаюсь использовать Ionic Native Push с Firebase Cloud Messaging.

(кажется) Я правильно установил Ionic Native Push Plugin. По крайней мере, когда я тестировал отправку push-уведомлений, на Android все работало.

Вот мой код:

import { Injectable } from '@angular/core';
import { Push, PushObject, PushOptions } from '@ionic-native/push';
import { AlertController } from 'ionic-angular';

@Injectable()
export class FcmProvider {

  constructor(private push: Push,
              private alertCtrl: AlertController) {
    this.getPermission();
  }

  getPermission() {
    this.initPush();
    this.push.hasPermission().then((res: any) => {
      if (res.isEnabled) {
        console.log('We have permission to send push notifications');
      } else {
        console.log('We do NOT have permission to send push notifications');
        this.presentErrorAlert();
      }
    });
  }

  private initPush() {
    const options: PushOptions = {
      android: {},
      ios: {
          alert: 'true',
          badge: true,
          sound: 'false'
      },
      windows: {},
      browser: {
          pushServiceURL: 'http://push.api.phonegap.com/v1/push'
      }
    };
    const pushObject: PushObject = this.push.init(options);

    pushObject.on('notification').subscribe((notification: any) => {
      console.log('Received a notification', notification);
      this.presentSuccessAlert(notification.message);
    });

    pushObject.on('registration').subscribe((registration: any) => console.log('Device registered', registration));

    pushObject.on('error').subscribe(error => console.error('Error with Push plugin', error));
  }

  private presentErrorAlert(): void {
    let errorAlert = this.alertCtrl.create({
      title: "Error",
      subTitle: "Wir bekamen kein Token.",
      buttons: ["Mies..."]
    });
    errorAlert.present();
  }

  private presentSuccessAlert(message: string): void {
    let alert = this.alertCtrl.create({
      title: "Neue Benachrichtigung",
      message: message,
      buttons: [
        {
          text: "Abbrechen",
          role: "cancel",
          handler: () => {
            console.log("Cancel clicked");
          }
        },
        {
          text: "Ansehen",
          handler: () => {
            console.log("Show clicked");
          }
        }
      ]
    });
    alert.present();
  }

}

И когда я использую XCode для отладки на iOS, я получаю следующие сообщения:

Push Plugin VoIP missing or false
Push Plugin register called
PushPlugin.register: setting badge to false
PushPlugin.register: clear badge is set to 0
PushPlugin.register: better button setup
FCM Sender ID <my-id>
Using FCM Notification
4.11.0 - [Firebase/Core][I-COR000003] The default Firebase app has not yet been configured. Add `[FIRApp configure];` (`FirebaseApp.configure()` in Swift) to your application initialization. Read more: <some-shortened-url>.
4.11.0 - [Firebase/Analytics][I-ACS023007] Firebase Analytics v.40100000 started
4.11.0 - [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see <some-shortened-url>)
4.11.0 - [Firebase/Messaging][I-FCM001000] FIRMessaging Remote Notifications proxy enabled, will swizzle remote notification receiver handlers. If you'd prefer to manually integrate Firebase Messaging, add "FirebaseAppDelegateProxyEnabled" to your Info.plist, and set it to NO. Follow the instructions at:
https://firebase.google.com/docs/cloud
-messaging/ios/client#method_swizzling_in_firebase_messaging
to ensure proper integration.
FCM Registration Token: <my-token>
We have permission to send push notifications
Push Plugin register success: <some-id>
Device registered [object Object]

По-моему, все работает нормально. Почему не приходят push-уведомления?

Кроме того, вот некоторые характеристики моей системы:

pdate: After some googling, here is additional information. Still can’t get it to work though!

- FirebaseInstanceID (2.0.10)
- FirebaseMessaging (2.0.8):
cli packages: (/usr/local/lib/node_modules)

    @ionic/cli-utils  : 1.19.2
    ionic (Ionic CLI) : 3.20.0

global packages:

    cordova (Cordova CLI) : 7.1.0 

local packages:

    @ionic/app-scripts : 3.1.8
    Cordova Platforms  : android 7.1.0 ios 4.5.4
    Ionic Framework    : ionic-angular 3.9.2

System:

    ios-deploy : 1.9.2 
    ios-sim    : 6.1.2 
    Node       : v9.4.0
    npm        : 5.8.0 
    OS         : macOS High Sierra
    Xcode      : Xcode 9.3 Build version 9E145 

Environment Variables:

    ANDROID_HOME : not set

Misc:

    backend : pro
Источник
Ivan Lencina
18 июля 2018 в 20:27
1

Красиво, мне нужно сделать то же самое. Как вы настроили платформы Android и iOS, если Ionic — это сеть? Вы можете помочь мне с этим? Спасибо!

Ответы (3)

avatar
J. Hesters
8 апреля 2018 в 13:23
5

Разобрался! Я не настроил ключ iOS. Вот инструкция для будущих посетителей этого вопроса :) https://firebase.google.com/docs/cloud-messaging/ios/certs

avatar
umunBeing
22 мая 2020 в 17:32
0

У вас могут возникнуть проблемы с использованием @ionic-native/firebase с v3 ionic.

Вам нужно либо напрямую использовать cordova-plugin-firebase. Или используйте плагин, например ionic-native-fcm

npm i ionic-native-fcm
avatar
Manthan Vaghani
7 декабря 2018 в 07:33
1

сначала вы проверяете, получен ли токен регистрации устройства, если нет, то добавляете FirebaseAppDelegateProxyEnabled в YES, а затем пытаетесь отправить push-уведомление через почтальона

  "notification":{
    "title":"Notification title",
    "body":"Notification body",
    "sound":"default",
    "click_action":"FCM_PLUGIN_ACTIVITY",
    "icon":"fcm_push_icon"
  },
  "data":{
    "param1":"value1",
    "param2":"value2"
  },
    "to":"<token>",
    "priority":"high",
    "restricted_package_name":""
}

если возникает ошибка InvalidApnsCredential, проблема не в вашем плагине

вы должны добавить (создать) ключ разработки Apple с разрешением на push-уведомления https://developer.apple.com/account/ios/authkey/

и префикс идентификатора приложения https://developer.apple.com/account/ios/identifier/bundle

в приложение Firebase iOS: Консоль Firebase -> Проект -> Настройки -> Облачные сообщения -> Конфигурация приложения iOS