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; } + +}