Files
awesome-cordova-plugins/src/@ionic-native/plugins/push/index.ts
T
Ibby HadeedandGitHub 00a7fa547e chore(): merge master into v3-injectable (#1146)
* 2.5.0

* chore(): update changelog

* fix(pin-dialog): add missing errorIndex

* 2.5.1

* chore(): update changelog

* fix(zip): progress callback is optional (#1049)

* fix(apprate): add missing Windows Store option (#1072)

* Update file-chooser.ts (#1071)

Removed semicolon after .then() in usage instructions

* docs(device-motion): update interface names (#1076)

AccelerationData interface is wrongly named in docs. It should be DeviceMotionAccelerationData. And I added it to import statement.

* feat(inappbrowser): add interface for IAB options (#1065)

* Add InAppBrowserOptions Interface for better tooling.

* feat(inappbrowser): add  interface for IAB options

* Add more constructor tests.

* Add missing iOS options.

* docs(media): update method usage (#1089)

* fix(push): add the missing option clearBadge (#1087)

* docs(badge): fix example (#1096)

Error in code example (supplied parameters do not match call signature)

* fix(imagepicker): add outputType option (#1098)

* fix(facebook): fixes issue when not supplying default params (#1088)

* Fix default facebook logEvent parameters

* Implement correct parameters format in facebook logEvent method

* Update ibeacon.ts (#1099)

Return type of `getAuthorizationStatus()` made more explicit.

* fix(file): add missing exports (#1101)

Any declaration that is not being exported is missing from the resulting d.ts declaration files.

* Add InAppBrowserOptions interface to documentation. (#1103)

* Update sqlite.ts (#1106)

Added a bracket to remove the syntax error

* update device orientation docs to reflect renaming of CompassHeading interface (#1107)

* Move marker code inside MAP_READY (#1108)

The code to set the camera position and marker should be moved inside the function handling MAP_READY.  Otherwise they execute before the event is fired and it doesn't work.

* refactor(file): accept ArrayBuffer for data to write (#1109)

* docs(google-maps): fix param type

closes #1110

* fix(media): add missing pauseRecord and resumeRecord methods (#1122)

* docs(stripe): fix type and naming issues (#1129)

* refactor(paypal): fix type of items (#1125)

Type of items should be Array<PayPalItem> instead of string.

* fix(serial): Serial.requestPermission() options are optional (#1128)

* add success/error indices

* feat(browser-tab): add browser tab plugin (#1126)

* feature: added hasPermission function to Firebase fixes #1115

* feat: Implemented support for BrowserTab #1077

* docs(browser-tab): add proper docs

* fix(background-geolocation): configure returns a promise

closes #1118

* docs(background-geolocation): add return types and platforms

* fix(contacts): allow passing asterisk as contact field type

closes 1093

* fix(contacts): allow passing asterisk as contact field type

closes #1093

* fix(plugin): revert changes to support stable version (#1116)

 fix #1001

* feat(file): add system paths

* feat(app-update): add cordova-plugin-app-update support (#1105)

* add new app-update plugin

* update plugin info

* docs(app-update): add docs

* feat(alipay): add alipay support. (#1097)

* add cordova-alipay-base plugin. to support Alipay payment

* change ALI_PID to APP_ID, make it same with the latest SDK

* rewrite comments

* docs(google-maps): improve docs (#1095)

Move `map.moveCamera(position);` inside the MAP_READY event.
Allow to zoom the map on first launch (both iOS and Android).

* fix(file): remove FileError from return type (#1086)

Promises that reject with a `FileError` are not of the type `Promise<T|FileError>`, but `Promise<T>`.

The previous declarations of `Promise<T|FileError>` would break typing further down the chain where you are trying to use the value that the typing says could be `T|FileError` but in reality could only be `T`.

* feat(google-maps): add constant for map type

* fix(file): platform Browser will raise a an DOMException (#1082)

fix(File): Platform Browser will raise a an DOMException on resoleLocalFilesystemUrl and tries to write on readonly property DOMException err.message in fillErrorMessage

* feat(local-notifications): support for icon background color (#1079)

The Cordova plugin Ionic Natives uses allows specifying the background color of the smallIcon.  By not including it in your interface you force users to use the default color for their version of Android.  While the LocalNotification plugin is not well documented, it does include this feature, see Options.java line 253:

```
/**
     * @return
     *      The notification background color for the small icon
     *      Returns null, if no color is given.
     */
    public int getColor() {
        String hex = options.optString("color", null);

        if (hex == null) {
            return NotificationCompat.COLOR_DEFAULT;
        }

        int aRGB = Integer.parseInt(hex, 16);

        return aRGB + 0xFF000000;
    }
```

I've simply added the option to the interface as well as a short description.

This lets you go from the default color (varies by Android version): https://goo.gl/photos/nERcj4GZgapy8aee9
To any color you'd like: https://goo.gl/photos/t8V9WVba8jDU49aHA
And also works if you also specify a large icon: https://goo.gl/photos/gWQYwa12djmdXfYcA

* feat(unique-device-add): add UniqueDeviceId plugin (#1064)

* fix plugin

* feat(text-to-speech): Add stop method (#1063)

https://github.com/vilic/cordova-plugin-tts/pull/32

* feat(appodeal): adds Appodeal SDK wrappers for iOS and Android (#1031)

* feat(Appodeal) bootrapping

* starting docs

* more docs

* feat(appodeal): add event Observables

* feat(appodeal): replace Cordova Observable events with #.fromEvent()

* feat(appodeal): update decorator metadata

* feat(couchbase-lite): add CouchbaseLite cordova plugin (#1025)

* feat(CouchbaseLite): add CouchbaseLite cordova plugin

* add plugin url

* feat(background-fetch): Adding Background Fetch requested in #990 (#1013)

* Adding Background Fetch (https://github.com/transistorsoft/cordova-plugin-background-fetch) requested in #990

* Adding BackgroundFetch to index

* feat(gyroscope): add Gyroscope plugin (#1004)

* add gyroscope.ts to plugins

* add gyroscope to index

* Update gyroscope.ts

* Update gyroscope.ts

* Revert "fix(File): typing where `FileError` can be thrown" (#1130)

* tslint and fix build issues

* 2.6.0

* chore(): update changelog

* fix(core): dont check if method exists when overriding

fixes #1043

* fix(file): fix writeExistingFile

closes #1044

* feat(diagnostic): add new methods

closes #1045

* feat(background-mode): replace event listeners with on method

The methods onactivate, ondeactive and onfailure no longer exist. You must now use `on` method.

* feat(background-mode): add missing functions

 closes #1078

* tslint

* set GoogleMapsMapTypeId to private

* remove beta from stripe

* 2.7.0

* chore(): update changelog

* feat(app-preferences): added cordova-plugin-app-preferences support (#1084)

* (feat) added cordova-plugin-app-preferences support

* replaced callback functions with promises

* updated example

* (feat) added cordova-plugin-browsertab support

* Revert "(feat) added cordova-plugin-browsertab support"

This reverts commit 00eb5cf5d8.

* (update) synchronize fetch

* feat(photo-library): added cordova-plugin-photo-library (#1102)

* feat(photo-library): added cordova-plugin-photo-library

* CordovaFiniteObservable moved to photo-library.
Overloads are marked as private.

* refactor(photo-library): fixed circleci failing in 2.7.0 (#1132)

* feat(photo-library): added cordova-plugin-photo-library

* CordovaFiniteObservable moved to photo-library.
Overloads are marked as private.

* fixed typescript error in 2.7.0

* feat(health): add wrapper for cordova-plugin-health (#1039)

* feat(health): add wrapper for cordova-plugin-health

* fix(Health): add optional params to QueryOptions for .query()

* docs(health): fix javadoc of interfaces

* fix(health): remove unused Plugin option

* docs(health): add missing documentation

* doc(health): add promise to return

* doc(health): remove empty lines

* doc(health): Add description & reference to repo

* doc(health: add "return {Promise<any>}"

* refactor(safari-view-controller): hide returns promise

* fix typo in ibeacon plugin (#1138)

* fix(file): fix return types

fixes #1139

* docs(background-geolocation): fix param docs

* refactor(health): fix return types and prefix interfaces

* 2.8.0

* chore(): update changelog

* docs(sqlite): syntax error resolved (#1142)

* Syntax error resolved

The `{}` should be `[]`, but since there is no binding we do not get error. In case we add one, then the syntax will be incorrect.

* Fixed a syntax error
2017-03-07 05:06:38 -05:00

370 lines
12 KiB
TypeScript

import { Injectable } from '@angular/core';
import { Cordova, Plugin } from '@ionic-native/core';
export type EventResponse = RegistrationEventResponse | NotificationEventResponse | Error;
export interface RegistrationEventResponse {
/**
* The registration ID provided by the 3rd party remote push service.
*/
registrationId: string;
}
export interface NotificationEventResponse {
/**
* The text of the push message sent from the 3rd party service.
*/
message: string;
/**
* The optional title of the push message sent from the 3rd party service.
*/
title?: string;
/**
* The number of messages to be displayed in the badge iOS or message count in the notification shade in Android.
* For windows, it represents the value in the badge notification which could be a number or a status glyph.
*/
count: string;
/**
* The name of the sound file to be played upon receipt of the notification.
*/
sound: string;
/**
* The path of the image file to be displayed in the notification.
*/
image: string;
/**
* An optional collection of data sent by the 3rd party push service that does not fit in the above properties.
*/
additionalData: NotificationEventAdditionalData | any;
}
/**
* TODO: document all possible properties (not just Android)
*
* Loosened up with a dictionary notation, but all non-defined properties need to use (map['prop']) notation
*
* Ideally the developer would overload (merged declaration) this or create a new interface that would extend this one
* so that he could specify any custom code without having to use array notation (map['prop']) for all of them.
*/
export interface NotificationEventAdditionalData {
[name: string]: any;
/**
* Whether the notification was received while the app was in the foreground
*/
foreground?: boolean;
collapse_key?: string;
coldstart?: boolean;
from?: string;
notId?: string;
}
export interface PushNotification {
/**
* The event registration will be triggered on each successful registration with the 3rd party push service.
* @param event
* @param callback
*/
on(event: 'registration', callback: (response: RegistrationEventResponse) => any): void;
/**
* The event notification will be triggered each time a push notification is received by a 3rd party push service on the device.
* @param event
* @param callback
*/
on(event: 'notification', callback: (response: NotificationEventResponse) => any): void;
/**
* The event error will trigger when an internal error occurs and the cache is aborted.
* @param event
* @param callback
*/
on(event: 'error', callback: (response: Error) => any): void;
/**
*
* @param event Name of the event to listen to. See below(above) for all the event names.
* @param callback is called when the event is triggered.
* @param event
* @param callback
*/
on(event: string, callback: (response: EventResponse) => any): void;
off(event: 'registration', callback: (response: RegistrationEventResponse) => any): void;
off(event: 'notification', callback: (response: NotificationEventResponse) => any): void;
off(event: 'error', callback: (response: Error) => any): void;
/**
* As stated in the example, you will have to store your event handler if you are planning to remove it.
* @param event Name of the event type. The possible event names are the same as for the push.on function.
* @param callback handle to the function to get removed.
* @param event
* @param callback
*/
off(event: string, callback: (response: EventResponse) => any): void;
/**
* The unregister method is used when the application no longer wants to receive push notifications.
* Beware that this cleans up all event handlers previously registered,
* so you will need to re-register them if you want them to function again without an application reload.
* @param successHandler
* @param errorHandler
*/
unregister(successHandler: () => any, errorHandler?: () => any): void;
/**
* The subscribe method is used when the application wants to subscribe a new topic to receive push notifications.
* @param {string} topic: Topic to subscribe to.
* @param successHandler
* @param errorHandler
*/
subscribe(topic: string, successHandler: () => any, errorHandler?: () => any): void;
/**
* The unsubscribe method is used when the application no longer wants to receive push notifications
* from a specific topic but continue to receive other push messages.
* @param {string} topic: Topic to subscribe to.
* @param successHandler
* @param errorHandler
*/
unsubscribe(topic: string, successHandler: () => any, errorHandler?: () => any): void;
/**
* iOS & android only
*
* Set the badge count visible when the app is not running
*
* The count is an integer indicating what number should show up in the badge.
* Passing 0 will clear the badge.
* Each notification event contains a data.count value which can be used to set the badge to correct number.
* @param successHandler
* @param errorHandler
* @param count
*/
setApplicationIconBadgeNumber(successHandler: () => any, errorHandler: () => any, count?: number): void;
/**
* iOS only
*
* Get the current badge count visible when the app is not running
* successHandler gets called with an integer which is the current badge count
* @param successHandler
* @param errorHandler
*/
getApplicationIconBadgeNumber(successHandler: (count: number) => any, errorHandler: () => any): void;
/**
* iOS only
*
* Tells the OS that you are done processing a background push notification.
* successHandler gets called when background push processing is successfully completed.
* @param successHandler
* @param errorHandler
* @param id
*/
finish(successHandler: () => any, errorHandler: () => any, id?: string): void;
/**
* iOS & android only
*
* Tells the OS to clear all notifications from the Notification Center.
* successHandler gets called when the api successfully clears the notifications
* @param successHandler
* @param errorHandler
*/
clearAllNotifications(successHandler: () => any, errorHandler: () => any): void;
}
export interface IOSPushOptions {
/**
* Maps to the project number in the Google Developer Console. Setting this
* uses GCM for notifications instead of native.
*/
senderID?: string;
/**
* Whether to use prod or sandbox GCM setting.
*/
gcmSandbox?: boolean | string;
/**
* If true the device shows an alert on receipt of notification.
* **Note**: the value you set this option to the first time you call the init
* method will be how the application always acts. Once this is set
* programmatically in the init method it can only be changed manually by the
* user in Settings>Notifications>App Name. This is normal iOS behaviour.
*/
alert?: boolean | string;
/**
* If true the device sets the badge number on receipt of notification.
* **Note**: the value you set this option to the first time you call the init
* method will be how the application always acts. Once this is set
* programmatically in the init method it can only be changed manually by the
* user in Settings>Notifications>App Name. This is normal iOS behaviour.
*/
badge?: boolean | string;
/**
* If true the device plays a sound on receipt of notification.
* **Note**: the value you set this option to the first time you call the init
* method will be how the application always acts. Once this is set
* programmatically in the init method it can only be changed manually by the
* user in Settings>Notifications>App Name. This is normal iOS behaviour.
*/
sound?: boolean | string;
/**
* If true the badge will be cleared on app startup.
*/
clearBadge?: boolean | string;
/**
* If the array contains one or more strings each string will be used to
* subscribe to a GcmPubSub topic.
* **Note**: only usable in conjunction with `senderID`.
*/
topics?: string[];
/**
* The data required in order to enable Action Buttons for iOS.
* Action Buttons on iOS - https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#action-buttons-1
*/
categories?: CategoryArray;
}
export interface CategoryArray {
[name: string]: CategoryAction;
}
export interface CategoryAction {
yes?: CategoryActionData;
no?: CategoryActionData;
maybe?: CategoryActionData;
}
export interface CategoryActionData {
callback: string;
title: string;
foreground: boolean;
destructive: boolean;
}
export interface AndroidPushOptions {
/**
* Maps to the project number in the Google Developer Console.
*/
senderID: string;
/**
* The name of a drawable resource to use as the small-icon. The name should
* not include the extension.
*/
icon?: string;
/**
* Sets the background color of the small icon on Android 5.0 and greater.
* [Supported Formats](http://developer.android.com/intl/ru/reference/android/graphics/Color.html#parseColor(java.lang.String))
*/
iconColor?: string;
/**
* If true it plays the sound specified in the push data or the default system
* sound.
*/
sound?: boolean | string;
/**
* If true the device vibrates on receipt of notification.
*/
vibrate?: boolean | string;
/**
* If true the icon badge will be cleared on init and before push messages are processed.
*/
clearBadge?: boolean | string;
/**
* If true the app clears all pending notifications when it is closed.
*/
clearNotifications?: boolean | string;
/**
* If true will always show a notification, even when the app is on the
* foreground.
*/
forceShow?: boolean | string;
/**
* If the array contains one or more strings each string will be used to
* subscribe to a GcmPubSub topic.
*/
topics?: string[];
}
export interface PushOptions {
ios?: IOSPushOptions;
android?: AndroidPushOptions;
windows?: {};
}
declare var PushNotification: {
new (): PushNotification
};
/**
* @name Push
* @description
* Register and receive push notifications.
*
* Requires Cordova plugin: `phonegap-plugin-push`. For more info, please see the [Push plugin docs](https://github.com/phonegap/phonegap-plugin-push).
*
* For TypeScript users, see the [Push plugin docs about using TypeScript for custom notifications](https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/TYPESCRIPT.md).
*
* @usage
* ```typescript
* import { Push } from '@ionic-native/push';
* ```
*/
@Plugin({
pluginName: 'Push',
plugin: 'phonegap-plugin-push',
pluginRef: 'PushNotification',
repo: 'https://github.com/phonegap/phonegap-plugin-push',
install: 'ionic plugin add phonegap-plugin-push --variable SENDER_ID=XXXXXXXXX',
installVariables: ['SENDER_ID']
})
@Injectable()
export class Push {
/**
* Initialize the plugin on the native side.
*
* ```
* var push = Push.init({
* android: {
* senderID: '12345679'
* },
* ios: {
* alert: 'true',
* badge: true,
* sound: 'false'
* },
* windows: {}
* });
* ```
*
* @param {PushOptions} options The Push [options](https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/API.md#parameters).
* @returns {PushNotification} Returns a new [PushNotification](https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/API.md#pushonevent-callback) object.
*/
@Cordova({
sync: true
})
init(options: PushOptions): PushNotification { return; }
/**
* Check whether the push notification permission has been granted.
* @return {Promise<{isEnabled: boolean}>} Returns a Promise that resolves with an object with one property: isEnabled, a boolean that indicates if permission has been granted.
*/
@Cordova()
hasPermission(): Promise<{ isEnabled: boolean }> { return; }
}