From 6cc6393712dfa4fdeb59d74d61da9f2024fbede0 Mon Sep 17 00:00:00 2001 From: Askhat Saiapov Date: Tue, 9 May 2017 17:29:29 -0400 Subject: [PATCH] feat(fcm): support Firebase Cloud Messaging plugin (#1449) * feat(): add fcm plugin * fix(): fix whitespace * fix(): add observables for methods * feat(): add NotificationData interface * doc(): improve examples in document * style(): remove usage examples from emthod declarations * fix(): decorate methods appropriately --- src/@ionic-native/plugins/fcm/index.ts | 118 +++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/@ionic-native/plugins/fcm/index.ts diff --git a/src/@ionic-native/plugins/fcm/index.ts b/src/@ionic-native/plugins/fcm/index.ts new file mode 100644 index 0000000000..7ff53a6154 --- /dev/null +++ b/src/@ionic-native/plugins/fcm/index.ts @@ -0,0 +1,118 @@ +import { Plugin, IonicNativePlugin, Cordova } from '@ionic-native/core'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +export interface NotificationData { + + /** + * Determines whether the notification was pressed or not + */ + + wasTapped: boolean; + + /** + * Notification data hash item + */ + + [name: string]: any; + +} + +/** + * @name FCM + * @description + * Provides basic functionality for Firebase Cloud Messaging + * + * @usage + * ```typescript + * import { FCM } from 'ionic-native'; + * + * constructor(private fcm: FCM) {} + * + * ... + * + * fcm.subscribeToTopic('marketing'); + * + * fcm.getToken().then(token=>{ + * backend.registerToken(token); + * }) + * + * fcm.onNotification().subscribe(data=>{ + * if(data.wasPressed){ + * console.log("Received in background"); + * } else { + * console.log("Received in foreground"); + * }; + * }) + * + * fcm.onTokenRefresh().subscribe(token=>{ + * backend.registerToken(token); + * }) + * + * fcm.unsubscribeToTopic('marketing'); + * + * ``` + * @interfaces + * NotificationData + */ +@Plugin({ + pluginName: 'FCM', + plugin: 'cordova-plugin-fcm', + pluginRef: 'FCMPlugin', + repo: 'https://github.com/fechanique/cordova-plugin-fcm', + platforms: ['iOS', 'Android'] +}) +@Injectable() +export class FCM extends IonicNativePlugin { + + /** + * Get's device's current registration id + * + * @returns {Promise} Returns a Promise that resolves with the registration id token + */ + @Cordova() + getToken(): Promise { return; } + + /** + * Event firing on the token refresh + * + * @returns {Observable} Returns an Observable that notifies with the change of device's registration id + */ + @Cordova({ + observable: true + }) + onTokenRefresh(): Observable { return; } + + /** + * Subscribes you to a [topic](https://firebase.google.com/docs/notifications/android/console-topics) + * + * @param {string} topic Topic to be subscribed to + * + * @returns {Promise} Returns a promise resolving in result of subscribing to a topic + */ + @Cordova() + subscribeToTopic(topic: string): Promise { return; } + + /** + * Unubscribes you from a [topic](https://firebase.google.com/docs/notifications/android/console-topics) + * + * @param {string} topic Topic to be unsubscribed from + * + * @returns {Promise} Returns a promise resolving in result of unsubscribing from a topic + */ + @Cordova() + unsubscribeToTopic(topic: string): Promise { return; } + + /** + * Watch for incoming notifications + * + * @returns {Observable} returns an object with data from the notification + */ + @Cordova({ + observable: true, + successIndex: 0, + errorIndex: 2 + }) + onNotification(): Observable { return; } + +}