Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FCM.subscribeTo not working on iOS #147

Open
khalsa-school-app opened this issue Jul 1, 2023 · 9 comments
Open

FCM.subscribeTo not working on iOS #147

khalsa-school-app opened this issue Jul 1, 2023 · 9 comments

Comments

@khalsa-school-app
Copy link

khalsa-school-app commented Jul 1, 2023

Describe the bug
The app is not subscribing to any topic on iOS devices. There is no issue with Android devices.

To Reproduce
Steps to reproduce the behavior:

  1. Create a new ionic project (6/7)
  2. Add Capacitor 5 (iOS)
  3. Complete the Ionic Post Notification setup steps
  4. Subscribe to a topic using capacitor-community/fcm

Expected behavior
The app should subscribe to the topics on iOS just like Android.

Code

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { ActionPerformed, PushNotificationSchema, PushNotifications, Token } from '@capacitor/push-notifications';
import { Preferences } from '@capacitor/preferences';
import { FCM } from '@capacitor-community/fcm';

interface SubscriptionPreferences {
 [key: string]: boolean;
}


@Component({
 selector: 'app-root',
 templateUrl: 'app.component.html',
 styleUrls: ['app.component.scss'],
})
export class AppComponent {

 subscriptionPreferences: SubscriptionPreferences = {};
 topics = ['Announcements', 'Calendar', 'Upcoming-Events', 'Block-Rotation', 'Clubs', 'Sports', 'Cafeteria', 'Contests', 'University-Advising', 'New-Student-Help', 'Parent-Info', 'Staff-Directory', 'ios'];

 constructor(private router: Router) {}

 ngOnInit() {
   console.log('Initializing HomePage');

   PushNotifications.requestPermissions().then(result => {
     if (result.receive === 'granted') {
       // Register with Apple / Google to receive push via APNS/FCM
       PushNotifications.register();
     } else {
       // Show some error
     }
   });


   Preferences.get({ key: 'firstTimeOpen' }).then(result => {
     const isFirstTimeOpen = result.value;

     if (isFirstTimeOpen === null || isFirstTimeOpen === 'true') {
       this.topics.forEach(topic => {
         FCM.subscribeTo({ topic: topic })
           .then(() => {
             console.log(`Subscribed to topic ${topic}`);
             this.subscriptionPreferences[topic] = true;
             Preferences.set({ key: 'firstTimeOpen', value: 'true' });
           })
           .catch((error) => {
             Preferences.set({ key: 'firstTimeOpen', value: 'false' });
           });
       });

       this.subscriptionPreferences = this.topics.reduce((acc: SubscriptionPreferences, topic: string) => {
         acc[topic] = true;
         return acc;
       }, {});

       Preferences.set({ key: 'subscriptionPreferences', value: JSON.stringify(this.subscriptionPreferences) });
     } 
      Preferences.get({ key: 'subscriptionPreferences' }).then(result => {
        const preferencesValue = result.value;
        this.subscriptionPreferences = preferencesValue ? JSON.parse(preferencesValue) : {};
       });
       console.log(this.subscriptionPreferences)
     
   });

   PushNotifications.addListener('registration', (token: Token) => {
     console.log('Push registration success, token: ' + token.value);
   });

   PushNotifications.addListener('registrationError', (error: any) => {
     console.log('Error on registration: ' + JSON.stringify(error));
   });

   PushNotifications.addListener(
     'pushNotificationReceived',
     (notification: PushNotificationSchema) => {
       alert('Notification received: ' + notification.title + '\n' + notification.body);
     },
   );

   PushNotifications.addListener(
     'pushNotificationActionPerformed',
     (notification: ActionPerformed) => {
       console.log('Push action performed: ' + JSON.stringify(notification));

       if (notification.notification) {
         const notificationData = notification.notification.data;
         if (notificationData && notificationData.page) {
           this.router.navigateByUrl(notificationData.page);
         }
       }
     },
   );
 }

}

@khalsa-school-app
Copy link
Author

@stewones Any help is greatly appreciated.

@nvahalik
Copy link

nvahalik commented Jul 7, 2023

I have recently noted that this is not working for us as well.

Push notifications are coming through properly on iOS with FCM but any call to subscribeTo fails.

@khalsa-school-app
Copy link
Author

@nvahalik

I am trying to work with the @capacitor-firebase/messaging library to try and subscribe to a topic. From what I have heard it works better than the FCM plugin. I am just trying to figure out how to use it in conjunction with the @capacitor/push-notifications. If I figure something out I will post it, likewise if you figure something out I would appreciate it if you could also post it.

I do not have much faith in the FCM plugin as I have been trying to fix it for a week, with no luck,

@brobilal
Copy link

Same here, the "subscribeTo" does not seem to work. There are also no errors generated.
I never get into the FCM.subscribeTo block here below at all:

topicsToUpdate.push(new Promise((resolve, reject) => {
FCM.subscribeTo({topic: topicItem}).then( () => {
console.log('------------------ we are subscribed!!!');
resolve({subscribed : true, topicItem});
}).catch( (err) => {
console.log('there is something wrong with subscribing: ' + err);
resolve(null);
});
}));

@brobilal
Copy link

hi @khalsa-school-app so did you find a solution???

@khalsa-school-app
Copy link
Author

khalsa-school-app commented Aug 18, 2023

@brobilal

Hi,

Sorry for the late response, I have been extremely busy lately.

I found a solution but with a different plugin. I have attached a demo below. I could not get this working with the latest capacitor version for some reason, so I had to use the same versions in the demo.

It took me roughly 4 weeks to solve, so I hope this helps you.

https://github.com/robingenz/ionic-capacitor-firebase-messaging-demo/tree/main

@brobilal
Copy link

brobilal commented Aug 19, 2023

Hi @khalsa-school-app thanks for showing what worked for you!

I can't understand how or why this core functionality (FCM.subscribeTo) is not working with Capacitor 5, can you please @stewones have a look at it?

I will try and have a look at the solution you suggestion @khalsa-school-app , again thanks for sharing what worked for you!!

@boutzamat
Copy link

I recommend using capawesome-team/capacitor-firebase instead of capacitor-community/fcm and capacitor/push-notifications.

capawesome-team/capacitor-firebase not only reduces the amount of packages from 2 to 1, but its so much straight forward and works with topics. It's a breeze and very easy to setup. Not many changes are required.

Thanks to @khalsa-school-app for linking to the demo. I recommend linking to the actual package instead, as i had to find it in the demos package.json file lol.

@boutzamat
Copy link

Hi @khalsa-school-app thanks for showing what worked for you!

I can't understand how or why this core functionality (FCM.subscribeTo) is not working with Capacitor 5, can you please @stewones have a look at it?

I will try and have a look at the solution you suggestion @khalsa-school-app , again thanks for sharing what worked for you!!

Check out my reply bro. It will solve all your problems :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants