Skip to content

Commit

Permalink
feat(fcm): support Firebase Cloud Messaging plugin (#1449)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
klirix authored and ihadeed committed May 9, 2017
1 parent 8330c92 commit 6cc6393
Showing 1 changed file with 118 additions and 0 deletions.
118 changes: 118 additions & 0 deletions src/@ionic-native/plugins/fcm/index.ts
Original file line number Diff line number Diff line change
@@ -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<string>} Returns a Promise that resolves with the registration id token
*/
@Cordova()
getToken(): Promise<string> { return; }

/**
* Event firing on the token refresh
*
* @returns {Observable<string>} Returns an Observable that notifies with the change of device's registration id
*/
@Cordova({
observable: true
})
onTokenRefresh(): Observable<string> { 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<any>} Returns a promise resolving in result of subscribing to a topic
*/
@Cordova()
subscribeToTopic(topic: string): Promise<any> { 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<any>} Returns a promise resolving in result of unsubscribing from a topic
*/
@Cordova()
unsubscribeToTopic(topic: string): Promise<any> { return; }

/**
* Watch for incoming notifications
*
* @returns {Observable<any>} returns an object with data from the notification
*/
@Cordova({
observable: true,
successIndex: 0,
errorIndex: 2
})
onNotification(): Observable<NotificationData> { return; }

}

0 comments on commit 6cc6393

Please sign in to comment.