Ionic 3.x: Push notification on iOS not working (works on Android?) Ionic Native Plugin Push
Asked Answered
D

3

6

I’m using / trying to use Ionic Native Push with Firebase Cloud Messaging.

(I believe) I correctly installed the Ionic Native Push Plugin. At least when I tested sending push notifications it worked on Android.

Here is my code:

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

}

And when I use XCode to debug on iOS I get the following messages:

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]

So as far as I’m concerned everything seems to work fine. Why don't the push notifications come through?

Furthermore here are some specs for my system:

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
Dimitry answered 8/4, 2018 at 8:1 Comment(1)
Nice, I need to do the same. How did you configure android and iOS platforms if Ionic is web? can you help me with that? thank you!Colleague
D
5

Figured it out! I didn't configure the iOS key. Here are the instructions for future visitors of this question :) https://firebase.google.com/docs/cloud-messaging/ios/certs

Dimitry answered 8/4, 2018 at 13:23 Comment(0)
A
1

first, you check devise register token is received or not if not then add FirebaseAppDelegateProxyEnabled to YES and then try to send a push notification via the postman

  "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":""
}

if get error InvalidApnsCredential then issue is not your plugin

you must add ( create ) your Apple Development Key with Push Notification Permission https://developer.apple.com/account/ios/authkey/

and app id prefix https://developer.apple.com/account/ios/identifier/bundle

to Firebase iOS app: Firebase Console -> Project -> Settings -> Cloud Messaging -> iOS app configuration

Aristippus answered 7/12, 2018 at 7:33 Comment(0)
T
0

You may be having trouble using @ionic-native/firebase with v3 of ionic.

You will need to either directly use cordova-plugin-firebase. Or use a plugin like ionic-native-fcm

npm i ionic-native-fcm
Treacherous answered 22/5, 2020 at 17:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.