Compare commits

..

384 Commits
v5 ... v5.13.0

Author SHA1 Message Date
Daniel Sogl
1d878c6902 chore(): update changelog 2019-08-30 16:04:21 +02:00
Daniel Sogl
e65ce4a879 5.13.0 2019-08-30 16:04:15 +02:00
Daniel Sogl
bfa4f62e2b chore(package): use angular 8 and ts 3.5 2019-08-30 16:02:57 +02:00
Daniel Sogl
1af96d1369 chore(package): bump deps 2019-08-30 15:57:46 +02:00
Srinidhi
dcce3489f4 doc(unvired-cordova-sdk): update doc (#3147)
* feat(unvired-cordova-sdk): support login via email

* fix(unvired-cordova-sdk): return typed promise object for user settings

* fix(unvired-cordova-sdk): change return type to string for guid()

* doc(unvired-cordova-sdk): doc update

* doc(unvired-cordova-sdk): update doc

* feat(unvired-cordova-sdk): add support for metadata JSON

* doc(unvired-cordova-sdk): update doc
2019-08-30 15:55:27 +02:00
Saninn
3a5c790a56 bugfix: add response type to permission checking (#3149) 2019-08-30 15:53:47 +02:00
Ziyaddin Sadigov
73493e222f fix(network): rename onchange method name (#3146) 2019-08-30 15:52:55 +02:00
MaximBelov
26447d22ea fix(anyline): added official plugin (#3144) 2019-08-30 15:52:33 +02:00
Marius Backes
a55bb60d70 fix(theme-detection): added android platform (#3143) 2019-08-30 15:52:07 +02:00
jcesarmobile
4d1e0e6949 fix(in-app-browser): update types to match cordova-plugin-inappbrowser 3.1.0 (#3142)
* Update index.d.ts

Property comments are omitted if they are not marked with double asterisks. Added missing asterisks

* Update index.d.ts

Updated comments to match linter settings

* Fix lint errors and some missing comments

* add missing options and improve types
2019-08-30 15:51:38 +02:00
Alberto Varela
189570d255 feat(google-play-games-services): add new synchronous methods (#3138) 2019-08-30 15:51:29 +02:00
Stéphane JAIS
64ca73e5cc docs(wonderpush): fix usage formatting (#3137) 2019-08-12 06:52:03 +02:00
Daniel Sogl
4337515961 chore(): update changelog 2019-08-09 11:17:23 +02:00
Daniel Sogl
c0d4a2ee34 5.12.0 2019-08-09 11:17:15 +02:00
Daniel Sogl
1f7e6a5d02 chore(package): bump deps 2019-08-09 11:11:10 +02:00
Akshay Dwivedi
fd81a5e5b7 feat(file-chooser): add missing options param (#3136)
added missing optional parameter to support mime types
2019-08-09 11:09:22 +02:00
Eliran Assaraf
f3b8e34091 fix(chooser): @param accept is supposed to be optional (#3134) 2019-08-09 11:08:20 +02:00
Matthew Harris
5cc91bc79a fix(background-geolocation): enum not string (#3131)
based on [this stackoverflow issue](https://stackoverflow.com/questions/57293829/argument-of-type-location-is-not-assignable-to-parameter-of-type-backgroundge/57302110#57302110) it seems passing the string causes problems in (some / all) scenarios
2019-08-09 11:07:39 +02:00
Srinidhi
e37a7221b1 doc(unvired-cordova-sdk): update doc (#3130)
* feat(unvired-cordova-sdk): support login via email

* fix(unvired-cordova-sdk): return typed promise object for user settings

* fix(unvired-cordova-sdk): change return type to string for guid()

* doc(unvired-cordova-sdk): doc update
2019-08-09 11:07:11 +02:00
BultjerCMC
016023a7bb fix(ms-adal): use correct accessTokenType prop (#3128)
Removed a typo, which made the Access Token Type undefined all the time.
2019-08-09 11:06:38 +02:00
Matthew Harris
852df98647 docs(image-picker): set repo url to active repo (#3127)
Original repo hasn't had a commit since 2016. `Repo:` parameter already updated but intro docs wasn't.
2019-08-09 11:05:53 +02:00
jfgreffier
7696706080 feat(http): add sendRequest responseType option (#3120) 2019-08-09 11:05:17 +02:00
Daniel Sogl
2c0aa4f124 fix(intercom): added logout, displayHelpCenter, sendPushTokenToIntercom (#3119) 2019-08-09 11:05:05 +02:00
František Spurný
8bcbc955e0 feat(smartlook): add plugin (#3117) 2019-08-09 11:04:51 +02:00
Maxim Belov
3bb6b59112 fix(intercom): added logout, displayHelpCenter, sendPushTokenToIntercom 2019-07-29 22:50:13 +03:00
Daniel Sogl
f6e77db7b0 chore(): update changelog 2019-07-29 16:12:06 +02:00
Daniel Sogl
acc587aca2 5.11.0 2019-07-29 16:12:00 +02:00
Daniel Sogl
c77bdf17c1 chore(package): bump deps 2019-07-29 16:10:14 +02:00
Daniel Sogl
0c9bf3bf49 feat(urbanairship): add plugin (#3114)
feat(urbanairship): add plugin
2019-07-29 12:02:29 +02:00
Daniel Sogl
f54b9e0797 doc(unvired-cordova-sdk): improve doc (#3108)
* feat(unvired-cordova-sdk): add plugin

* style(unvired-cordova-sdk): fix style

* doc(unvired-cordova-sdk): add doc

* doc(unvired-cordova-sdk): update doc

* style(unvired-cordova-sdk): fix style

* doc(unvired-cordova-sdk): fix readme errors

* doc(unvired-cordova-sdk): update doc

* doc(unvired-cordova-sdk): improve doc

* doc(unvired-cordova-sdk): remove clearFunction
2019-07-29 12:00:01 +02:00
Stéphane JAIS
7e08680d31 feat(wonderpush): add plugin (#3107) 2019-07-29 11:59:51 +02:00
patryk-fuhrman
de83edb99b feat(cordova-plugin-firebasex): Add plugin (#3106) 2019-07-29 11:59:41 +02:00
Daniel Sogl
fac94485a0 Update index.ts 2019-07-29 11:58:04 +02:00
Maxim Belov
9c9ed3518f feat(urbanship): add plugin 2019-07-29 01:53:09 +03:00
Srinidhi Anand Rao
a0779de633 doc(unvired-cordova-sdk): remove clearFunction 2019-07-23 13:57:37 +05:30
Srinidhi Anand Rao
50408b08c6 Merge commit 'a2f5acb48c8d197fad55276ffcee7eee5cf3065f'
# Conflicts:
#	src/@ionic-native/plugins/unvired-cordova-sdk/index.ts
2019-07-21 19:32:45 +05:30
Srinidhi Anand Rao
767391a4b4 doc(unvired-cordova-sdk): improve doc 2019-07-21 19:27:25 +05:30
Daniel Sogl
a2f5acb48c chore(): update changelog 2019-07-12 20:27:59 +02:00
Daniel Sogl
3a3e9338e7 5.10.0 2019-07-12 20:27:53 +02:00
Daniel Sogl
8badd2943a feat(anyline): add plugin (#3101)
closes: #3074
Co-authored-by: niconaso
2019-07-12 20:26:22 +02:00
Daniel Sogl
9a46ab1a6d chore(build): remove "default" 2019-07-12 20:12:54 +02:00
Daniel Sogl
952a5c8e11 Merge remote-tracking branch 'origin/master' 2019-07-12 20:11:42 +02:00
Daniel Sogl
2a995d94ec chore(build): upgrate to node 12 and gulp 4 2019-07-12 20:11:26 +02:00
Daniel Sogl
941d394da9 chore(build): upgrate to node 12 and gulp 4 2019-07-12 20:09:33 +02:00
Daniel Sogl
cc1f25c38c chore(package): bump deps 2019-07-12 11:45:30 +02:00
nrikiji
7aa08109ce fix(line-login): add missing email prop (#3098) 2019-07-12 11:41:35 +02:00
reymav
8ce541ff9a fix(barcode-scanner): add missing shouldAutorotate property (#3096)
* Disable or enable Autorotate camera into barcode scanner plugin

* fix asterisks in jsdoc must be aligned
2019-07-12 11:40:52 +02:00
Patrick Bußmann
75190f5166 docs(deeplinks): Added informations about AASA (iOS) and Asset Links (Android) to documentation (#3094) 2019-07-12 11:40:36 +02:00
Srinidhi
c697139089 doc(unvired-cordova-sdk): doc update (#3090)
* feat(unvired-cordova-sdk): add plugin

* style(unvired-cordova-sdk): fix style

* doc(unvired-cordova-sdk): add doc

* doc(unvired-cordova-sdk): update doc

* style(unvired-cordova-sdk): fix style

* doc(unvired-cordova-sdk): fix readme errors

* doc(unvired-cordova-sdk): update doc
2019-07-12 11:40:19 +02:00
Anton Zagrebelny
717f6864f3 fix(biocatch): added android platform and updated repo (#3086) 2019-07-12 11:39:42 +02:00
Marius Backes
e9fa3ee6f2 feat(theme-detection): add plugin (#3082) 2019-07-12 11:39:23 +02:00
Srinidhi Anand Rao
28ce962677 doc(unvired-cordova-sdk): update doc 2019-07-12 14:57:43 +05:30
Srinidhi Anand Rao
f576c5f11e doc(unvired-cordova-sdk): fix readme errors 2019-07-05 17:14:52 +05:30
Srinidhi Anand Rao
f488a75e26 Merge commit '2b684fadb179af64ac179e0a878b4ffdec0e85aa'
# Conflicts:
#	src/@ionic-native/plugins/unvired-cordova-sdk/index.ts
2019-07-05 15:44:16 +05:30
Srinidhi Anand Rao
55fb503d81 style(unvired-cordova-sdk): fix style 2019-07-05 15:16:14 +05:30
Srinidhi Anand Rao
afe95a6752 doc(unvired-cordova-sdk): update doc 2019-07-05 13:15:01 +05:30
Srinidhi Anand Rao
2ca8bda8f7 doc(unvired-cordova-sdk): add doc 2019-07-04 18:12:29 +05:30
Daniel Sogl
2b684fadb1 chore(): update changelog 2019-07-01 19:34:57 +02:00
Daniel Sogl
7f2da56a28 5.9.0 2019-07-01 19:34:23 +02:00
Daniel Sogl
4a546bd11a 5.8.0 2019-07-01 19:34:20 +02:00
Daniel Sogl
a0f5254988 Revert "chore(build): use node 12"
This reverts commit 8521b32306.
2019-07-01 19:32:24 +02:00
Daniel Sogl
8521b32306 chore(build): use node 12 2019-07-01 19:30:30 +02:00
Daniel Sogl
d52278b2d1 chore(package): bump deps 2019-07-01 19:29:32 +02:00
Timo
2fadb6b0e1 fix(firebase): add missing decorator to clearAllNotifications (#3059) 2019-07-01 19:27:03 +02:00
Lars Mikkelsen
ad11ed21ac refactor(core): allow rxjs 5.5 as peer dependency (#3068)
This would allow Ionic v3 apps to use Ionic Native v5 wrappers.
2019-07-01 19:26:20 +02:00
Wasenshi
5857b9654c feat(calendar): add deleteEventById function (#3075)
* Update index.ts

Please add this function

* Update index.ts
2019-07-01 19:24:40 +02:00
jing-zhou
92d5764e01 fix(alipay): use correct pluginRef (#3081) 2019-07-01 19:20:22 +02:00
Marius Backes
a4db080786 feat(sum-up): add plugin (#3080) 2019-07-01 19:19:44 +02:00
Szymon Stasik
54ac2bfdf5 feat(diagnostic): add DENIED_ONCE introduced by diagnostic v5 (#3071)
cordova.plugins.diagnostic@5.0.0 introduced breaking change moving from `DENIED` to `DENIED_ONCE` and make the statuses semantically equal for iOS and Android. For backward compatibility `DENIED` is untouched in this PR but marked as deprecated
2019-07-01 19:18:11 +02:00
Srinidhi
9274083b24 feat(unvired-cordova-sdk): add plugin (#3061)
* feat(unvired-cordova-sdk): add plugin

* style(unvired-cordova-sdk): fix style
2019-07-01 19:17:38 +02:00
Cam Wiegert
d04396e631 chore(scripts): add installVariables to docs-json output (#3079) 2019-06-28 14:23:28 -05:00
perry
c4b4584d2d couchbase depreciation warning 2019-06-19 11:02:40 -05:00
Eliran Elnasi
1fc09098fe fix(in-app-purchase-2): add missing option to register function (#3063)
* Update TS type for register() method

It should accept also a list of IAPProductOptions

* Update index.ts
2019-06-17 14:52:19 +02:00
Zahid Mahmood
b217bdb62a docs(launch-review): add missing bracket (#3062) 2019-06-15 08:14:48 +02:00
Srinidhi Rao
1b60247807 style(unvired-cordova-sdk): fix style 2019-06-14 14:08:58 +05:30
Srinidhi Rao
b75f40c76e feat(unvired-cordova-sdk): add plugin 2019-06-14 13:41:48 +05:30
Daniel Sogl
09ca1a1843 chore(package): bump deps 2019-06-10 20:12:32 +02:00
hanatharesh2712
6cbb226ed2 feat(sms-retriever): add plugin (#3052)
* created index.ts file for sms retriver plugin wrapper for ionic native

created index.ts file for sms retriver plugin wrapper for ionic native
Plugin name : cordova-plugin-sms-retriever-manager

* resolved tslint errors

resolved tslint errors

* Update index.ts

* Update index.ts
2019-06-10 20:04:43 +02:00
Jean-Christophe Hoelt
ed80933b6c feat(in-app-purchase-2): add documentation (#3055)
Ported to typescript from the repo's README and API documentation.
2019-06-10 20:04:26 +02:00
Gyula Isoó
300d7c229c fix(music-control): use correct input type (#3054) 2019-06-10 20:03:34 +02:00
Hatem
43442ac4ea feat(apple-wallet): support plugin version 3.0 (#3053)
BREAKING: Requires `cordova-apple-wallet@3.0`
2019-06-10 20:00:44 +02:00
Szymon Stasik
12f2782fef feat(diagnostic): add requestRemoteNotificationsAuthorization method (#3051)
solves #3050

while diagnostic plugin docs may be confusing, the `requestRemoteNotificationsAuthorization(successCallback, errorCallback, types, omitRegistration)` signature is available in the sources:

0fac4a59d1/www/ios/diagnostic.notifications.js (L162)
2019-06-10 19:55:26 +02:00
Daniel Sogl
a586734b92 chore(): update changelog 2019-06-03 07:09:54 +02:00
Daniel Sogl
f58183260d 5.7.0 2019-06-03 07:09:06 +02:00
Daniel Sogl
a3c49fd17a chore(package): bump deps 2019-06-03 07:08:38 +02:00
Daniel Sogl
6ee94b93ba refactor(core): set rxjs version to 6.5
BREAKING: rxjs@6.5 is required
2019-06-03 07:06:55 +02:00
Anup Sharma
a0ec1252e0 feat(onesignal): add missing "setExternalUserId" and "removeExternalUserId" functions (#3049)
* Adding missing functions to index.ts file

The functions were missing, Please refer to the issue #2909 
https://github.com/ionic-team/ionic-native/issues/2909

* Updated comments

Updated comments which were failing tslint test

* removed trailing whitespace

removed trailing whitespace
2019-06-03 06:56:36 +02:00
Michael Fornaro
dfb0aa3d5d feat(device-accounts): add "getPermissionsByType" function (#3048) 2019-06-03 06:56:23 +02:00
Adam Duren
312c126cc8 docs(firebase-messaging): update docs to support requestPermission forceShow and getToken tokenType options (#3047) 2019-06-03 06:56:00 +02:00
Robert Coie
b79c8b1ea0 feat(ocr): add plugin (#3044) 2019-06-03 06:55:49 +02:00
Robert Coie
49e81cc414 feat(document-scanner): add plugin (#3043) 2019-06-03 06:55:40 +02:00
Jeff Julian
2942ebfae4 feat(blinkid): added support for card overlay (#3041) 2019-06-03 06:55:30 +02:00
Jean-Christophe Hoelt
4ae35cba9a feat(in-app-purchase-2): update TypeScript definitions (#3037) 2019-06-03 06:55:17 +02:00
Daniel Pereira
bb7b516c50 feat(full-screen-image): add plugin (#3026)
* feat(full-screen-image): add plugin

* Update index.ts
2019-06-03 06:55:00 +02:00
pranav9k
c0b092b242 feat(biometric-wrapper): add plugin (#3025) 2019-06-03 06:54:50 +02:00
Daniel Sogl
a2fe674a3f chore(): update changelog 2019-05-27 07:42:47 +02:00
Daniel Sogl
f12da1f4f5 5.6.1 2019-05-27 07:42:39 +02:00
Daniel Sogl
0e7bec3633 chore(package): bump deps 2019-05-27 07:22:40 +02:00
Adam Duren
7588eaf9fd refactor(firebase-config): update wrapper to latest release 2.0.0 (#3027)
* Remove deprecated namespace parameter

* Update for cordova-plugin-firebase-config@2.0.0
2019-05-27 07:20:12 +02:00
Robert Coie
c5a9d0d258 docs(developer): remove stale observation about methods being static (#3033) 2019-05-27 07:19:10 +02:00
Safery Hossain
18e4a9cda6 docs(music-controls): fix example code (#3036)
The function this.musicControls.subscribe().subscribe was not closed properly, I added the proper syntax for closing the tag.
2019-05-27 07:18:52 +02:00
perry
26f63c744d docs(rollbar): adding link to rollbar in description 2019-05-17 10:20:23 -05:00
Daniel Sogl
1cb4c989f9 chore(): update changelog 2019-05-16 07:07:12 +02:00
Daniel Sogl
c80d081c92 5.6.0 2019-05-16 07:07:04 +02:00
Daniel Sogl
3e0a7395ca chore(circle-ci): optim "npm install" 2019-05-16 07:04:44 +02:00
Daniel Sogl
4c6dc71cbe chore(package): bump deps 2019-05-16 07:04:01 +02:00
Daniel Sogl
81a10280cc feat(biocatch): add plugin #3019
feat(biocatch): add plugin
2019-05-16 06:56:16 +02:00
Daniel Sogl
56e4a7827f feat(camera-preview): add wrapper for camera preview snapshot #3018
feat(camera-preview): add wrapper for camera preview snapshot
2019-05-16 06:56:00 +02:00
Daniel Sogl
c4fe2b7203 feat(foreground-service): add plugin #3017
feat(foreground-service): add plugin
2019-05-16 06:55:42 +02:00
Daniel Sogl
0dc320bbd2 feat(FileOpener): add showOpenWithDialog function #3014
feat(FileOpener): Added method showOpenWithDialog
2019-05-16 06:55:27 +02:00
Daniel Sogl
b4201e1b52 fix(blinkid): correct issue with blink card #3011
fix(blinkid): correct issue with blink card
2019-05-16 06:55:02 +02:00
Daniel Sogl
9a4bef34bb refactor(device-accounts): update source #3010
refactor(device-accounts): update source
2019-05-16 06:54:45 +02:00
Daniel Sogl
2bc8bdc49c feat(firebase-crash): add plugin (#3003) 2019-05-16 06:54:24 +02:00
Romain
e363d98bd8 fix(firebase-crashlytics): update initialise method (#2990) (#2991) 2019-05-16 06:54:13 +02:00
Anton Zagrebelny
980447673b fix(biocatch): updateCustomerSessionID argument can be null 2019-05-14 19:00:24 +03:00
Anton Zagrebelny
7afed90b56 fix(biocatch): start publicKey is now required even if null 2019-05-14 18:46:30 +03:00
Anton Zagrebelny
0634e64b58 refactor(biocatch): fixed casing 2019-05-14 16:21:21 +03:00
Anton Zagrebelny
a42e7b8258 feat(biocatch): add Biocatch plugin 2019-05-14 15:40:43 +03:00
Marc Kassay
5b5c6e61ac feat(foreground-service): allows background services 2019-05-13 18:10:42 -04:00
max-in-to
79037743b8 feat(camera-preview): add wrapper for camera preview snapshot 2019-05-09 21:14:27 -07:00
nerdic-coder
ed36dc492d feat(FileOpener): Added method showOpenWithDialog 2019-05-08 16:32:53 +03:00
Jeff Julian
1f31954cb3 fix(blinkid): resolve issues with blink card 2019-05-03 19:16:55 -05:00
Jeff Julian
4601ea3e01 fix(blinkid): correct issue with blink card 2019-05-03 19:04:14 -05:00
Michael Fornaro
45c64b0394 Merge branch 'master' into master 2019-05-04 09:28:29 +10:00
Michael
591c290dbd Fixing pluginRef and plugin name to match maintained npm module 2019-05-04 09:23:12 +10:00
Julian Sanio
66b9d1a011 feat(firebase-crash): add plugin 2019-04-29 17:58:17 +02:00
Daniel Sogl
25ef7c98bc chore(): update changelog 2019-04-29 08:14:33 +02:00
Daniel Sogl
19ddf3fb93 5.5.1 2019-04-29 08:14:25 +02:00
Daniel Sogl
20a3791a88 chore(package): bump deps 2019-04-29 08:12:26 +02:00
Simone Colazzo
9800271352 feat(CameraPreview): add getHorizontalFOV callback (#3000) 2019-04-29 08:07:10 +02:00
Daniel Sogl
e288a5d757 fix(background-geolocation): update source
closes: #2979
2019-04-29 08:05:01 +02:00
Daniel Sogl
ab7c7fa491 chore(): update changelog 2019-04-19 19:06:25 +02:00
Daniel Sogl
9e306e7de1 5.5.0 2019-04-19 19:06:18 +02:00
Daniel Sogl
92e0cb2385 chore(package): bump deps 2019-04-19 19:03:43 +02:00
Niklas Merz
0800f4a414 docs(fingerprint-aio): change parameter description (#2995)
* docs(fingerprint-aio): change parameter description

* Update index.ts
2019-04-19 18:59:51 +02:00
Adam Duren
e47774b771 fix(firebase-messaging): fix the typings of the FCM message payload (#2998) 2019-04-19 18:58:38 +02:00
Tobias Kausch
c0ce17b170 fix(background-mode): update types definitions (#2997)
On the last PR https://github.com/ionic-team/ionic-native/pull/2982
there was a little typing problem for the .on event listener call.
2019-04-19 18:58:28 +02:00
Zac
c518c8114d fix(google-plus): mark login param as required (#2996) 2019-04-19 18:58:04 +02:00
Johan Dufour
21dc1f9a56 feat(spotify-auth): add Spotify OAuth plugin (#2989) 2019-04-19 18:56:52 +02:00
Cesar de la Vega
7ea51fcf06 feat(purchases): update plugin to v0.0.5 (#2988)
* Updates to Cordova plugin 0.0.5

* Makes underlyingErrorMessage optional
2019-04-19 18:56:28 +02:00
Michael Fornaro
c063652800 feat(device-accounts): update plugin source (#2976)
* feat: updating device account wrapper with maintained fork with android 8.0 compatibility

* updating func to include getPermission for email permissions on android 8.0+

* revert package-lock as per feedback

* fix conflicts in package-lock.json, revert back to commit 49d7ca7375
2019-04-19 18:56:17 +02:00
Daniel Sogl
9024ea516a fix(nfc): rename makeReadyOnly to makeReadOnly
fix: #2985
2019-04-11 20:20:36 +02:00
Michael
e92b7aeb74 fix conflicts in package-lock.json, revert back to commit 49d7ca7375 2019-04-08 08:07:33 +10:00
Michael
dc51c3e1e8 revert package-lock as per feedback 2019-04-08 08:04:23 +10:00
Daniel Sogl
4859387925 chore(): update changelog 2019-04-07 20:02:36 +02:00
Daniel Sogl
10787c8056 5.4.0 2019-04-07 20:02:29 +02:00
Wojciech Bubolka
f874185a35 feat(in-app-purchase-2): add manageSubscriptions() (#2980)
* feat(in-app-purchase-2): add manageSubscriptions()

* feat(in-app-purchase-2): add manageSubscriptions()
2019-04-07 19:59:58 +02:00
Daniel Sogl
00e34877f3 chore(package): bump deps 2019-04-07 19:59:37 +02:00
Daniel Sogl
4de49c37dd feat(nativegeocoder): update plugin to v3.2.0 (#2958) 2019-04-07 19:56:31 +02:00
Daniel Sogl
bd4b2e2bb4 feat(nativegeocoder): update plugin to v3.2.0 (#2958)
* feat(nativegeocoder): update plugin to v3.2.0

* update imports
2019-04-07 19:22:12 +02:00
malua
aa138c4cfe fix(facebook): use object notation, otherwise EVENTS is´ undefined (#2955)
* fix(facebook-events-object): use object notation, otherwise EVENTS is undefined

* reverted prettier double quotes to single quotes
2019-04-07 19:19:42 +02:00
Timur Girgin
4e60c631ae fix(in-app-purchase2): Registering a product with an alias is now optional (#2946)
According to the documentation, alias is optional
https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/api.md#storeregisterproduct
2019-04-07 19:15:17 +02:00
Arzan Bhorr
767d3b3dd4 feat(google-play-games-services): add getPlayerScore function (#2949) 2019-04-07 19:13:04 +02:00
Cesar de la Vega
39be27566b feat(purchases): add new plugin for purchases (#2940)
* feat(purchases): create new plugin

* style(purchases): fix double quotes linter warning

* Update instructions to add strip frameworks phase

* removes trailing space

* fixes jsdoc
2019-04-07 19:10:42 +02:00
selected-pixel-jameson
029f82f1fd feat(in-app-purchase-2): add missing property (#2961)
feat(in-app-purchase-2): add missing property
2019-04-07 19:09:59 +02:00
Julián Mesa Llopis
6a19509ded fix(ble): fix definitions (#2974)
* Fix bad definitions in blueooth-le module in initialize and enable funcions

* Fix MATCH_MODE_AGGRESSIVE

* Fix startScan return

* Fix connect return

* Fix rssi function return type

* Fix disconnect return.
Fix close return.
Fix discover return.
Fix services return.
Fix mtu return.
2019-04-07 19:09:22 +02:00
Johan Dufour
c75aeb9c39 fix(background-mode): update types definitions (#2982) 2019-04-07 19:07:48 +02:00
Michael
dcd95582d2 updating func to include getPermission for email permissions on android 8.0+ 2019-04-06 11:19:42 +11:00
Michael
354af9fe6f feat: updating device account wrapper with maintained fork with android 8.0 compatibility 2019-04-03 12:28:16 +11:00
Daniel Sogl
49d7ca7375 chore(): update changelog 2019-03-19 19:03:51 +01:00
Daniel Sogl
8d91856103 5.3.0 2019-03-19 19:03:39 +01:00
Daniel Sogl
5221c8cf41 Merge remote-tracking branch 'origin/master' 2019-03-19 18:36:42 +01:00
Daniel Sogl
d827db27b0 Revert "refactor(template): update Inject decorator"
BREAKING CHANGE: This reverts commit c5ae6362d7.
2019-03-19 18:36:21 +01:00
Daniel Sogl
b9e46730e3 Revert "refactor(template): update Inject decorator"
This reverts commit c5ae6362d7.
2019-03-19 18:35:00 +01:00
Daniel Sogl
fcda5ffcab Revert "refactor: optimize plugins for angular treeshaking"
This reverts commit 8b53c04dc5.
2019-03-19 18:34:54 +01:00
Daniel Sogl
6fde61d69c chore(package): bump deps 2019-03-19 18:34:22 +01:00
Daniel Sogl
c8ff885023 chore: fix linter 2019-03-19 18:25:24 +01:00
Cam Wiegert
06654afae3 fix(scripts): check for TypeDoc tags when selecting plugin class (#2963) 2019-03-14 13:35:32 -05:00
Cesar de la Vega
e1a25af0b5 chore(common): fix linter error (#2941)
fix linter error by using conditional expression instead of assigning to element in multiple places
2019-03-11 14:35:26 -04:00
Sebastian Baar
419b68217e update imports 2019-03-10 13:46:53 +01:00
Sebastian Baar
cd97375e63 feat(nativegeocoder): update plugin to v3.2.0 2019-03-10 13:45:30 +01:00
Cam Wiegert
b0dea6dc58 feat(scripts): add docs-json script (#2947) 2019-03-05 13:22:58 -06:00
Adam Bradley
7e090cc6f2 fix(ssr): remove cordova warning during ssr 2019-02-24 00:16:45 -06:00
Adam Bradley
c2029f7927 fix(ssr): fix window references 2019-02-23 17:05:19 -06:00
Adam Bradley
5b1bdc37e0 fix(ssr): fix window references 2019-02-23 16:54:09 -06:00
Adam Bradley
e3e8c85087 fix(ssr): check for window and document 2019-02-23 11:34:16 -06:00
Daniel Sogl
03c01c687e chore(): update changelog 2019-02-20 18:05:14 +01:00
Daniel Sogl
c0684cb3d8 5.2.0 2019-02-20 18:05:08 +01:00
Daniel Sogl
9a85a5cd62 chore(package): bump deps 2019-02-20 17:54:47 +01:00
Hatem
7ae2ad4e3e feat(apple-wallet): update wrapper to release 2.0 (#2935)
* Add AppleWallet class interface

* Update index.ts

* Update index.ts

* update readme

* feat (apple wallet ): add methods to check existence and ellibagility

* lint

* lint

* Update index.ts
2019-02-20 17:42:41 +01:00
Daniel Sogl
c5ae6362d7 refactor(template): update Inject decorator 2019-02-20 17:40:13 +01:00
Daniel Sogl
8b53c04dc5 refactor: optimize plugins for angular treeshaking
BREAKING CHANGE: You can remove the plugin import from the app.module.ts because of the changed Inject decorator
2019-02-20 17:37:39 +01:00
Daniel Sogl
64230319a2 feat(linkedin): delete plugin
BREAKING: Removes linked in plugin (https://engineering.linkedin.com/blog/2018/12/developer-program-updates)
closes: #2925
2019-02-14 16:54:40 +01:00
Daniel Sogl
3d8cdde7eb chore(): update changelog 2019-02-14 16:39:43 +01:00
Daniel Sogl
e1b7aca3a9 5.1.0 2019-02-14 16:39:37 +01:00
Daniel Sogl
9bdb2fac9d feat(app-launcher): add plugin
related: #2889
2019-02-14 16:37:41 +01:00
Daniel Sogl
41c6bcafe6 feat(firebase-crashlytics): add plugin
related: #2889
2019-02-14 16:34:26 +01:00
Daniel Sogl
d55d1d6f7f chore(build): set min core version 2019-02-14 16:29:31 +01:00
Darshan Pania
aed25a6642 feat(clevertap): update for latest CleverTap Cordova plugin (#2931)
* feat(clevertap): add CleverTap plugin

* style(clevertap): cleanup stray lint error

* refactor

* feat(clevertap): update for latest CleverTap Cordova plugin
2019-02-14 11:56:51 +01:00
Edmu
daf04566a1 feat(http): add sendRequest function (#2910)
Adds missing sendRequest feature that has been implemented to cordova-plugin-advanced
which allows overriding global options for single request being sent via this method

Closes #2824
2019-02-14 09:58:22 +01:00
Daniel Sogl
4cb2aee62b chore(package): bump deps 2019-02-14 09:58:03 +01:00
Daniel Sogl
63124f35fd fix(build): remove wrong jsdoc 2019-02-14 09:52:05 +01:00
Doumbia Mahamadou
632dec28ae feat(luxand): add plugin (#2883)
* add Luxand Face SDK plugin

* (fix): alphatize imports for luxand plugin

* fix: changes required

* add git repo url
2019-02-14 09:50:46 +01:00
Carson Chen Zoom
50e05349ec feat(zoom): add plugin (#2916) 2019-02-14 09:49:29 +01:00
Afshawn Lotfi
fd27136de7 feat(magnetometer): add plugin (#2917) 2019-02-14 09:49:00 +01:00
byrner75
2833da472a feat(quikkly): add plugin(#2923) 2019-02-14 09:48:29 +01:00
smelzer
c5ceba1aae feat(photo-viewer): add new params (#2895)
* Change for new 'headers' option

As of 1.1.19 of PhotoViewer, a new PhotoViewer option was added called 'headers' which allows for HTTP headers to be used when requesting the image.  This is useful for authenticated sites.

* Typo in example

* Added new PhotoViewerOptions

There are several other new PhotoViewerOptions besides 'headers' that need to be imported into the latest version.  I was selfishly only concerned about the one I needed, but the build really needs them all.
2019-02-14 09:47:03 +01:00
Keith D. Moore
e1a490357d fix(http): add 'legacy' as valid option to setSSLCertMode (#2913)
* Add 'legacy' as valid option to setSSLCertMode

Fixes #2912

* Add 'legacy' to params for setSSLCertMode

* Update index.ts
2019-02-14 09:46:07 +01:00
mysoret
959a9135e4 feat(abbyy-rtr): add new options (#2915)
* Update index.ts

cordova-plugin-abbyy-rtr-sdk has updated a new field of orientation as per the version 1.0.9

* Update index.ts
2019-02-14 09:45:37 +01:00
Cam Wiegert
fc0a238229 fix(google-play-games-services): correct Cordova plugin name typo (#2920)
closes ionic-team/ionic-docs#424
2019-02-14 09:44:44 +01:00
Daniel Sogl
eeb68f1706 docs(background-geolocation): update usage doc (#2924)
docs(background-geolocation): update usage doc
2019-02-14 09:44:24 +01:00
Daniel Sogl
bceb428690 fix(build): fixed duplicate import identifiers (#2914) 2019-02-14 09:41:26 +01:00
Daniel Sogl
242240c711 chore(lint): update lit-rules 2019-02-14 09:41:16 +01:00
arnauddrain
e9911aa4ad style(background-geolocation): remove trailing whitespace 2019-02-11 14:20:56 +01:00
arnauddrain
04798c7354 docs(background-geolocation): update usage doc 2019-02-11 14:10:53 +01:00
Justin Cuaresma
3aedde55d8 fix(build): fixed duplicate import identifiers 2019-02-01 23:09:50 -05:00
Daniel Sogl
92140cd2db refactor(): small changes 2019-01-26 20:20:55 +01:00
Daniel Sogl
184986f06b docs(readme-gen): remove beta tag 2019-01-24 20:01:57 +01:00
Daniel Sogl
2ce2725b2a docs(gene): remove beta tag 2019-01-24 20:01:03 +01:00
Daniel Sogl
3d8455ae35 docs(readme): remove beta notes 2019-01-24 19:58:56 +01:00
mhartington
bf7ba9bd01 chore(): remove beta flag from release 2019-01-23 14:53:15 -05:00
mhartington
0883240f60 chore(): bump 2019-01-23 14:37:02 -05:00
Nate Drake
b6f340ae82 fix(bluetooth-le): Fix typo in InitializeResult interface definition (#2891) 2019-01-23 16:35:25 +01:00
Daniel
0612aef725 chore(package): update deps 2019-01-23 08:10:51 +01:00
Daniel
4bf7ba6085 chore(build): update update_docs.sh 2019-01-23 08:06:04 +01:00
Daniel
707d40bd83 chore(build): fix lint errors 2019-01-23 08:04:14 +01:00
Daniel
b4e0764d71 chore(build): use node 10 2019-01-23 08:03:18 +01:00
Daniel
c1d7ce13dd chore(build): update utils.inc.sh 2019-01-23 08:02:24 +01:00
Daniel
999853eb32 chore(build): update prepare.sh 2019-01-23 07:58:54 +01:00
Daniel
dfd6714331 chore(package): refresh package-lock 2019-01-23 07:57:02 +01:00
Daniel
898c68bb5e Merge remote-tracking branch 'origin/v5' 2019-01-23 07:54:31 +01:00
Daniel Sogl
9250d49970 chore(): update changelog 2019-01-20 17:09:26 +01:00
Daniel Sogl
2397ef9d60 4.20.0 2019-01-20 17:09:14 +01:00
Daniel Sogl
dbd8b4c080 chore(package): bump deps 2019-01-20 17:06:51 +01:00
Daniel Sogl
1ba6f97082 feat(background-geolocation): add v3 functions and interfaces (#2393)
feat(background-geolocation): add v3 functions and interfaces
2019-01-19 09:42:59 +01:00
Nate Drake
c2f45616ac fix(bluetooth-le): Fix typo in interface definition (#2881) 2019-01-19 09:31:07 +01:00
Nicolas Naso
603d6943ef feat(lottie-splash-screen): add new plugin (#2880)
* feat(lottie-splash-screen): added new plugin

* Update index.ts
2019-01-19 09:30:41 +01:00
JaviRpo
3226f76ef9 feat(web-intent): Add missing type info (#2878) 2019-01-19 09:26:29 +01:00
TobyEb
874be0bb04 feat(colored-browser-tabs): added new plugin (#2876)
* feat(colored-browser-tabs): added new plugin

* feat(colored-browser-tabs): added new plugin

* feat(colored-browser-tabs): added new plugin

* Update index.ts

* Update index.ts
2019-01-19 09:23:32 +01:00
Srđan Tubin
9e6705df7f feat(adjust): add adjust sdk plugin (#2872)
* feat(adjust): add adjust sdk plugin

* Update index.ts
2019-01-19 09:15:44 +01:00
retreatnot
7c46d8c2fc feat(firebase): add clearAllNotifications method (#2867)
* feat(firebase): add clearAllNotifications method

Added new method clearAllNotifications()

https://github.com/arnesson/cordova-plugin-firebase/blob/master/docs/API.md#clearAllNotifications

* remove trailing whitespace
2019-01-19 09:15:35 +01:00
Daniel
7d3ddf89ae chore(): update changelog 2019-01-04 22:22:17 +01:00
Daniel
19b3e8f521 4.19.0 2019-01-04 22:22:10 +01:00
Daniel
c14ea31a8a chore(package): bump deps 2019-01-04 22:21:43 +01:00
AppFeel
707ce1cad9 feat(admob): add plugin (#2864)
* feat(admob): add plugin

* Update index.ts
2019-01-04 22:08:49 +01:00
ewwwgiddings
d33bcb0220 feat(in-app-browser): add 'beforeload' as option (#2863)
Please see the issue I created here for more information: https://github.com/ionic-team/ionic-native/issues/2861

This allows Ionic-Native to be used with the latest features of Cordova InAppBrowser's github.
2019-01-04 22:08:20 +01:00
AppFeel
5df3de7dc0 feat(analytics-firebase): add plugin (#2862)
* feat(analytics-firebase): upload analytics-firebase plugin

* Update index.ts
2019-01-04 22:08:07 +01:00
Matthew Harris
d499a4db8d docs(camera): fix markup (#2858)
camera xml example wasn't wrapped in code brackets
2019-01-04 22:07:46 +01:00
waliu
e2b25deff6 feat(gao-de-location): add plugin (#2857)
* Add a gaode Map Location

* 增加详细的返回信息

* Return type has been added

* Update index.ts
2019-01-04 22:07:01 +01:00
Eric Horodyski
c3de8dfaba feat(baidu-push): add plugin (#2838)
* Initial push.

* Revert tslint.json and switch imports around to be alphabetical.

* Remove non-used plugins to decrease build time.

* Finish the BaiduPush interface.

* Add observables.

* Restore other plugins.

* Restore file formatting.

* Update documentation.

* Update index.ts
2019-01-04 22:06:52 +01:00
Dima Vishnevetsky
448e064012 docs(firebase): add onNotificationOpen usage example (#2835) 2019-01-04 22:06:37 +01:00
João Mourão
6ef854f4f1 docs(camera): update xml in warning part (#2832)
* Update xml in warning part

* Update index.ts
2019-01-04 22:06:17 +01:00
J-Loup
ea3150e99a fix(health): fix typos (#2831) 2019-01-04 22:05:58 +01:00
shinya.saiho
3edd62e56c chore(template): reorder imports (#2839) 2018-12-27 09:31:04 +01:00
Daniel
b63102a5fa Fix random build errors 2018-12-01 16:34:42 +01:00
Daniel
df7ec0146c chore(): update changelog 2018-12-01 16:28:27 +01:00
Daniel
20878516b4 4.18.0 2018-12-01 16:28:20 +01:00
Simon Bang Terkildsen
b166cc51ea fix(local-notifications): update type of the every property (#2825) 2018-12-01 16:21:17 +01:00
Daniel
543fa64b35 Revert "bump deps"
This reverts commit dcac00e7ad.
2018-12-01 15:55:58 +01:00
Daniel
dcac00e7ad bump deps 2018-12-01 15:53:51 +01:00
Luka313
006570483d feat(downloader): add plugin (#2820)
* feat(downloader): add plugin

* Update index.ts
2018-12-01 15:49:50 +01:00
Ziyaddin Sadigov
b7594e201b docs(network): fix typo (#2828) 2018-12-01 15:48:53 +01:00
JMRMourao
1396b61215 docs(camera): improve docs (#2827) 2018-12-01 15:48:41 +01:00
Fabrício Júnio
4f8779a969 refactor(card-io): allow number as type for guideColor (#2815)
* Change guide color to string|number type 

When the platform is Android, the cordova plugin wait for an Int value to set the guide color.

* Update index.ts
2018-11-15 20:11:01 +01:00
nrikiji
7145afa24f feat(line-login): add loginWeb function (#2810)
* add line-login

* Update index.ts

* add params and result type

* Update index.ts

* Update index.ts

* feat(line-login)add method
2018-11-15 07:36:49 +01:00
Appie
66316d29fe refactor(keyboard-setResizeMode): use explicit type (#2811)
This will ensure consumers of this plugin don't need to go on a quest of finding what the possible values are, the values are derived from [here](https://github.com/ionic-team/cordova-plugin-ionic-keyboard#keyboardresizemode)
2018-11-15 07:35:39 +01:00
Suraj Rao
7dcd6b27a0 docs(sqlite): update usage example (#2805)
executeSql takes array param not object according to the function declaration in code.
2018-11-07 08:37:49 +01:00
Daniel
b98393462d chore(): update changelog 2018-11-02 18:04:49 +01:00
Daniel
f9011c89c8 4.17.0 2018-11-02 18:04:43 +01:00
Daniel
4b4b2c45a0 chore: bump deps 2018-11-02 17:54:07 +01:00
Antonio José López
43bfeb487a feat(firebase-authentication): add plugin (#2797)
* feat(firebase-authentication): add plugin

* Update index.ts

* Update index.ts
2018-11-02 17:18:41 +01:00
Philip
accfba8a40 docs(file): update jsdoc (#2757)
* Update index.ts: Fix JSDoc

* Update index.ts

* Update index.ts
2018-11-02 17:17:38 +01:00
nrikiji
dc4183da07 feat(line-login): add plugin (#2782)
* add line-login

* Update index.ts

* add params and result type

* Update index.ts

* Update index.ts
2018-11-02 17:09:15 +01:00
duncan-c
b61b33987f fix(contacts plugin): add the rawId parameter (#2799)
* fix(contacts plugin): add the rawId parameter

This adds the rawId parameter to the contact class which allows the rawId value to be passed to Android which is required for saving contacts.

* Update index.ts
2018-11-02 17:08:43 +01:00
dominic-ks
39b4b85631 docs(social-sharing): update web share api link (#2794)
Just a tiny error in an anchor link there.
2018-10-28 09:38:54 +01:00
Rick Sollet
669dd02285 docs(mobile-accessibility): update usage (#2795) 2018-10-28 09:38:03 +01:00
Ahsan Ayaz
a3bd19769f feat(crashlytics): allow user to set userIdentifier for crashlytics (#2792)
setting user identifier is available since cordova-plugin-firebase@2.0.3 (https://github.com/arnesson/cordova-plugin-firebase/blob/master/CHANGELOG.md#features)
added the functionality to the firebase ionic native plugin
2018-10-27 11:18:04 +02:00
Martin Kausche
ff3ef094e0 docs(admob-plus): fix the Plugin Name, added repo (#2781)
The newly added wrapper for Admob __Plus__  had Admob __Free__ as its name.

This resulted in a broken docs-Page, _Admob Free_ occurred twice, both showing infos for _Admob Plus_
2018-10-18 16:24:46 +02:00
Daniel
2933d40cdc chore(): update changelog 2018-10-17 19:55:57 +02:00
Daniel
874ae88ff4 4.16.0 2018-10-17 19:55:52 +02:00
Marco
a02ca715e9 docs(one-signal): fix target url for notification icon (#2780)
The correct path is described at the official documentation from OneSignal. 
Link: https://documentation.onesignal.com/docs/customize-notification-icons
2018-10-17 19:53:44 +02:00
Daniel Sogl
336b3ff89b fix(local-notifications): add missing functions (#2779)
closes: #2778
2018-10-17 19:53:22 +02:00
Stephen Wolff
2aa73b5546 feat(nfc): add NFC readerMode (#2777)
* Work on NFC reader-mode

* Remove dist files, not needed in plugin development folder

* Revert package changes

This reverts part of commit 24a893fdcf.

* Update index.ts

* Correct the flags and return types for the wrapper

* Add reader flags.

Thanks @sfaizanh
2018-10-17 19:52:52 +02:00
Jordan Benge
99cebcba0b feat(lastCam): add plugin (#2759)
* feat(lastCam): add plugin

* feat: added watchRecordingTimer observer

* fix(lastCam): update plugin name

* refactor: lint file and refactor description
2018-10-17 19:52:39 +02:00
Paul Stelzer
6c99ec8033 feat(admob-plus): Add admob-plus (#2753) 2018-10-17 19:52:25 +02:00
Faizan Hasan
a167bd85aa fix(keyboard) isVisible property missing (#2751)
* isVisible property missing

* fix(lint)

* fix(lint) CI

* fix(CordovaProperty) Imported CordovaProperty from core
2018-10-14 13:31:01 +02:00
Niklas Merz
487acd603b refactor(network): add enum for connection types (#2754) 2018-10-14 13:30:34 +02:00
Sultan
fb4d2640c1 docs(apple-wallet): update example (#2755)
* Add AppleWallet class interface

* Update index.ts

* Update index.ts

* update readme
2018-10-14 13:30:25 +02:00
Markus Karileet
4468b520ad feat(speechkit): plugin updated with voice parameter (#2761) 2018-10-14 13:30:11 +02:00
BradyShober
1a2dc3ee73 feat(firebase-messaging): add revokeToken function (#2763) 2018-10-14 13:30:00 +02:00
Max Lynch
00a1674fd6 Merge pull request #2758 from ajcrites/geo-msg
docs(geolocation): use more generic / professional message
2018-10-03 18:07:12 -05:00
Andrew Crites
2b14bd979e docs(geolocation): use more generic / professional message 2018-10-03 18:59:43 -04:00
Daniel Sogl
fcd6d26727 fix(keyboard): add missing property 2018-09-25 17:11:43 +02:00
Daniel
f95003cbe1 chore(): update changelog 2018-09-25 17:02:43 +02:00
Daniel
8e5f2e5ab3 4.15.0 2018-09-25 17:02:35 +02:00
Sultan
307477da78 feat(plugins): add AppleWallet (#2740)
* Add AppleWallet class interface

* Update index.ts

* Update index.ts
2018-09-25 16:57:01 +02:00
Daniel
f691883a29 disable failing unit test (tmp) 2018-09-25 16:54:58 +02:00
Daniel
0d5d4f30a9 docs(keyboard): fix small typo 2018-09-25 16:51:53 +02:00
Ken Sodemann
1457a1698b fix(keyboard): use cordova-plugin-ionic-keyboard (#2743)
Previous was using the deprecated keyboard plugin.

Fixes #2306
2018-09-25 16:50:29 +02:00
Rahul Pandey
bfd46eed16 feat(SqliteDbCopy):add plugin (#2731)
* feat(SqliteDbCopy):add plugin

* refactor(SqliteDbCopy):add success/error index

* Update index.ts
2018-09-25 16:44:53 +02:00
Bart Wesselink
3eff280127 feat(siri-shortcuts): Add clear option for the activated shortcut (#2734)
* feat(siri-shortcuts): Add clear option for the getActivatedShortcutOperation

* Update index.ts
2018-09-25 16:43:47 +02:00
Benoit Perrin
8116ddd139 feat(plugins): add web-server plugin (#2726)
* feat(plugins): add web-server plugin

Add support of the cordova-plugin-webserver plugin, to start a
a dynamic content web server on iOS and android devices.

* Update index.ts
2018-09-25 16:42:07 +02:00
Daniel
a6bcc9affd feat(taptic-engine): add missing functions and types 2018-09-18 22:35:58 +02:00
Daniel
c0d8c99e8d Merge remote-tracking branch 'origin/master' 2018-09-18 22:29:20 +02:00
Daniel
fe9655ed84 chore(build): fix publish script 2018-09-18 16:08:49 +02:00
Daniel
41c034cc19 chore(): update changelog 2018-09-18 16:03:39 +02:00
Daniel
89631a9fa6 4.14.0 2018-09-18 16:03:29 +02:00
Daniel
04db233b33 feat(chooster): add plugin
closes: #2612
2018-09-18 15:58:57 +02:00
Daniel
10d222dcea feat(local-notifications): add missing functions 2018-09-18 15:37:39 +02:00
Daniel
640da1b618 docs(ibeacon): typo 2018-09-18 15:22:17 +02:00
Daniel
aecb0f9460 chore(package): bump dgeni 2018-09-18 15:17:21 +02:00
Daniel
d077c48205 fix(web-intent): add missing properties
closes: #2701
2018-09-18 11:08:45 +02:00
Daniel
49d27e816c refactor(email-composer): reorder code 2018-09-18 11:03:02 +02:00
Daniel Sogl
3699fa9b50 fix(mobile-accessibility): add correct pluginRef
closes: #1860
2018-09-18 10:12:27 +02:00
Daniel
ab4f1f5bbe docs(onesignal): hide option from docs
closes: #1969
2018-09-18 10:08:24 +02:00
Daniel
51006a76a0 feat(onesignal): add missing functions
closes: #2504
2018-09-18 10:05:34 +02:00
Rishi Hindocha
8bab32173a fix(onesignal): add missing setLocationShared method (#2723)
* fix(onesignal): add missing setLocationShared method

* Update index.ts
2018-09-18 09:40:55 +02:00
Daniel Sogl
3ef9593704 fix(push): add missing Chanel options
closes: #2712
2018-09-18 09:30:09 +02:00
Daniel
ffae843c0f chore(): update changelog 2018-09-17 18:54:45 +02:00
Daniel
33e4392b63 refactor: remove unused lint rules 2018-09-17 17:59:41 +02:00
Daniel
9acbb9fcd6 refactor: follow only-arrow-functions lint rule 2018-09-17 17:56:35 +02:00
Daniel
c1e1c5cb79 refactor: follow order-imports lint rule 2018-09-17 17:50:36 +02:00
Daniel
0c7cfeeeb8 refactor: update lint rules 2018-09-17 17:09:46 +02:00
Daniel
a7830693af chore(scripts): remove fs-extra-promise 2018-09-17 15:14:37 +02:00
Daniel
b60d5d4851 chore(): update changelog 2018-09-15 11:15:09 +02:00
Daniel
0c4aeddd1b 4.13.0 2018-09-15 11:15:04 +02:00
Daniel
667de5ba26 Revert "chore(): update changelog"
This reverts commit 2c2c1e482c.
2018-09-15 11:14:49 +02:00
Daniel
2dc7ee8916 Revert "4.12.3"
This reverts commit 7c419b48ad.
2018-09-15 11:14:41 +02:00
Daniel
2c2c1e482c chore(): update changelog 2018-09-15 11:05:56 +02:00
Daniel
7c419b48ad 4.12.3 2018-09-15 11:05:48 +02:00
弄潮儿
0b9717636c feat(janalytics): add plugin (#2711)
* add janalytics native plugin

* add new plugin of wechat

* rm plugin wechat

* Update index.ts
2018-09-15 11:02:53 +02:00
弄潮儿
10ac9ff9de feat(wechat): add plugin (#2716)
* add janalytics native plugin

* add new plugin of wechat

* rm janalytics plugin

* Update index.ts

* Update index.ts

* Update index.ts
2018-09-15 11:01:10 +02:00
Paul Stelzer
90d75af9d1 feat(branch-io): Add branch.io attribution and invitation plugin (#2691)
* feat(branch-io): Add branch.io attribution and invitation plugin

* Update index.ts
2018-09-15 10:55:01 +02:00
Paul Stelzer
3b3f942ed5 feat(appsflyer): Added Appsflyer Cordova SDK as ionic native plugin (#2690)
* feat(appsflyer): Added Appsflyer Cordova SDK

* fix(appsflyer): Corrected promises

* fix(appsflyer): Add description

* fix(appsflyer): Missing semicolon

* Update index.ts
2018-09-15 10:48:17 +02:00
Niklas Merz
9601a64227 feat(calldirectory): add log function (#2708)
* feat(calldirectory): add log function

* Update index.ts
2018-09-15 10:43:11 +02:00
Paul Stelzer
22fd49b5d3 fix(in-app-review): Transfer Plugin to the correct folder (#2688) 2018-09-15 10:41:20 +02:00
ratnakar24
890129bfda fix(ms-adal): Update createAuthenticationContext (#2705)
* Update createAuthenticationContext

Update createAuthenticationContext to include validateAuthority flag since it is throwing Error: Fail to valid authority with errors: [50049].
Without the flag it is throwing Error: Fail to valid authority with errors: [50049].

* Update index.ts
2018-09-15 10:39:41 +02:00
Tyler Hall
6a9a871758 docs(onesignal): update incorrect path to hook file (#2715) 2018-09-15 10:39:14 +02:00
Todd Vrba
ac467c50ac feat(mixpanel): Update/add functions (#2697)
* Update mixpanel typings for Ionic native.

* Update index.ts
2018-09-15 10:37:52 +02:00
iAmMrHands
267149b16f feat(local-notifications): Added local additional local notification action fields (#2713) 2018-09-15 10:37:24 +02:00
somq
7047920a2a fix(bluetooth-le): Various methods fixes (#2707)
* feat(bluetooth-le): implemented all available methods and refactored existing ones

* fix(bluetooth-le): Removed @memberof jsdoc annotations to avoid ci check failure

* fix(bluetooth-le): Fixed multiple jsdocs typos/misformats preventing CI to pass checks while generating readmes

* fix(bluetooth-le): Removed package-lock.json

* Update index.ts

* fix(bluetooth-le): Fixed stringToBytes method, now properly takes a string as arg and return an Uint8Array

* fix(bluetooth-le): getAdapterInfo now returns an Observable for easier tracking of adapter states

* fix(bluetooth-le): Fixed missing cordova param (observable: true) in initializePeripheral method, fixed getAdapterInfo method, now return an adapterInfo object

* chore(bluetooth-le): Removed @description markup to allow a proper doc auto-format

* fix(bluetooth-le): Reverted getAdapterInfo method to a Promise return
2018-09-15 10:37:03 +02:00
Daniel
aad814fcf1 chore(): update changelog 2018-08-31 19:09:35 +02:00
Daniel
03d6b2373c 4.12.2 2018-08-31 19:09:24 +02:00
Daniel Kasper
d82e675442 fix(in-app-browser): fix mandatory options (#2684)
fix(in-app-browser): fix mandatory options
2018-08-31 19:05:33 +02:00
Daniel
1e84e23fd9 chore(): update changelog 2018-08-31 14:26:00 +02:00
Daniel
f3f12cb306 4.12.1 2018-08-31 14:25:53 +02:00
Daniel
b3bd0a83c7 chore(package): bump deps 2018-08-31 14:24:28 +02:00
rvdleun
03e4f0e439 feat(push): Added voip property to IOSPushOptions (#2681)
* feat(push): Added missing voip property to IOSPushOptions

* Update index.ts
2018-08-31 14:23:40 +02:00
Pandiarajan Nagarajan
a73146648f feat(aes256): Added new utility methods to generate secure key and secure IV (#2675) 2018-08-31 14:21:30 +02:00
Daniel Kasper
d90724ef70 feat(in-app-browser): Add missing InAppBrowserOptions-properties (#2669) 2018-08-31 14:21:19 +02:00
Brad Mallow
be0dc3dac4 fix(open-native-settings): allow supported input (#2666)
* allow supported input

* Update index.ts
2018-08-31 14:21:07 +02:00
Daniel
a0a64da518 chore(package): bump deps 2018-08-25 12:02:03 +02:00
somq
591ee87e05 feat(bluetooth-le): add bluetooth-le plugin (#2651)
* feat(bluetooth-le): implemented all available methods and refactored existing ones

* fix(bluetooth-le): Removed @memberof jsdoc annotations to avoid ci check failure

* fix(bluetooth-le): Fixed multiple jsdocs typos/misformats preventing CI to pass checks while generating readmes

* fix(bluetooth-le): Removed package-lock.json

* Update index.ts
2018-08-25 12:01:05 +02:00
Daniel
8db1dbef71 feat(http): add setSSLCertMode function 2018-08-21 20:39:21 +02:00
Daniel
73ae92d77c chore(): update changelog 2018-08-17 00:33:54 +02:00
Daniel
3c2753df64 4.12.0 2018-08-17 00:33:47 +02:00
Daniel
9035476833 chore(package): bump package-lock 2018-08-17 00:33:34 +02:00
Daniel
5f5e605e66 Merge remote-tracking branch 'origin/master' 2018-08-16 22:23:09 +02:00
Daniel
ea6746d134 chore(build): refactor 2018-08-16 22:23:03 +02:00
Daniel Sogl
753fa4a7a4 Update CHANGELOG.md 2018-08-16 22:19:18 +02:00
Daniel
ff784a4377 Auto stash before revert of "4.12.0" 2018-08-16 22:18:20 +02:00
Daniel
0764e28408 Revert "4.12.0"
This reverts commit 5825932e03.
2018-08-16 22:18:04 +02:00
Daniel
0197c88a03 chore(): update changelog 2018-08-16 22:10:36 +02:00
Daniel
5825932e03 4.12.0 2018-08-16 22:10:23 +02:00
Daniel
bccc8ac379 chore(package): update package-lock 2018-08-16 22:10:15 +02:00
Daniel
3eb382d438 chore(package): bump deps 2018-08-16 22:06:19 +02:00
Ashwin Dinesh
ca9a702808 feat(webengage): add optional config with initialization (#2637)
* feat(webengage): add optional config with initialization

* Update index.ts
2018-08-16 22:01:54 +02:00
Daniel Sogl
3f415f9bef fix(photo-library): interface missing includeVideos
Co-authored-by: @devdaddy 

closes: #2624
2018-08-16 21:58:30 +02:00
Luis Enrique Perez Alvarez
0c6d1eabe2 docs(onesignal): fix typo
OneSignla -> OneSignal
2018-08-16 21:56:11 +02:00
Niklas Merz
61fecf511b docs(firebase-dynamic-links): Change example (#2646)
* docs(firebase-dynamic-links): Change example

* Update index.ts
2018-08-16 21:55:59 +02:00
Daniel Ehrhardt
2ac52822b8 fix(extended-device-information): Fixed Memory Display Bug (#2641)
* Fixed Memory Display Bug with ExtendedDeviceInformation Plugin

* Update index.ts

* Update index.ts
2018-08-16 21:55:51 +02:00
rupendraa
229b62c10b feat(local-notifications): add new foreground property (#2633)
* Update index.ts

* Update index.ts
2018-08-16 21:55:17 +02:00
Gordeev Artem
9b4fd02fa5 feat(fabric): add fabric plugin (#2618)
* feat(fabric): add fabric plugin

* Update index.ts
2018-08-16 21:54:39 +02:00
Marat Dyatko
d10777a33b fix(network): bind listener to document instead of window (#2622)
We noticed that in some cases network state listeners are stopped triggering, but `navigator.onLine` still reflects the state correctly. I used the following code to debug and found out an issue with `window` and `document` difference:

```js
window.addEventListener("online", ()=>console.warn('WINDOW ONLINE'), false); // won't be triggered
window.addEventListener("online", ()=>console.warn('WINDOW ONLINE'), false); // won't be triggered
document.addEventListener("online", ()=>console.warn('DOCUMENT ONLINE'), false); // triggered
document.addEventListener("online", ()=>console.warn('DOCUMENT ONLINE'), false); // triggered
```

Also, according to plugin documentation, listeners should be bound to `document`: https://github.com/apache/cordova-plugin-network-information#offline
2018-08-01 04:41:51 -04:00
Daniel
4f26069ca6 chore(): update changelog 2018-07-29 10:05:10 +02:00
Daniel
40571e5c99 4.11.0 2018-07-29 10:04:57 +02:00
Daniel
83194f616b Revert "chore(package): upgrade fs-extra"
This reverts commit 4297c3d43e.
2018-07-29 09:59:53 +02:00
Daniel
b1f4df530a rerun build 2018-07-29 09:57:03 +02:00
Daniel
4297c3d43e chore(package): upgrade fs-extra 2018-07-29 09:52:36 +02:00
Daniel
95d495b468 chore(package): bump deps 2018-07-29 09:44:22 +02:00
Daniel
f0989d1b96 chore(package): upgrade to angular 5
BREAKING: Ionic Native v4 requires now Angular 5
2018-07-29 09:21:43 +02:00
Daniel
c113417878 docs(readme): update readme 2018-07-29 09:20:23 +02:00
Daniel
cedd6df423 Merge remote-tracking branch 'origin/master' 2018-07-29 09:16:11 +02:00
Daniel
4b14ce2eec refactor(http): change return type to any 2018-07-29 09:16:00 +02:00
pwilkniss
27d380ef4b feat(clevertap): add CleverTap plugin (#2609)
* feat(clevertap): add CleverTap plugin

* style(clevertap): cleanup stray lint error

* refactor
2018-07-29 09:13:37 +02:00
Ashwin Dinesh
bd5bd7ea9d feat(webengage): add webengage plugin (#2604)
* feat(webengage): add webengage plugin

* refactor
2018-07-29 09:11:05 +02:00
Jan Piotrowski
c6713862c5 refactor: Improve Ionic Native warnings (#2611)
- Explicitly spell out that this is coming from "Ionic Native", instead of just "Native"
- Improve sentence that explains 2 most common reasons for missing Cordova
2018-07-29 09:10:48 +02:00
Daniel
3b32e19bf1 feat(facebook): add getDeferredApplink function
closes: #2510
2018-07-29 09:10:17 +02:00
Daniel
4092831754 fix(http): add correct return types for downloadFile and uploadFile
closes: #2615
2018-07-29 08:57:16 +02:00
Daniel Sogl
c2fe5f8336 docs(contacts): mark as deprecated 2018-07-27 21:39:58 +02:00
Daniel
3f9067d090 chore(): update changelog 2018-07-25 12:57:52 +02:00
Daniel
36a4e81fe4 4.10.1 2018-07-25 12:57:38 +02:00
Gustavo Maximiliano Cortez
79cb478c26 fix(user-agent): Plugin not installed (#2607)
fix(user-agent): Plugin not installed
2018-07-24 16:59:19 +02:00
Dominik Geng
b635ba99ea fix(nfs): Optional arguments for records like textRecord (#2605)
fix(nfs): Optional arguments for records like textRecord
2018-07-24 16:59:02 +02:00
97 changed files with 18643 additions and 7549 deletions

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@ node_modules/
.tmp
aot/
scripts/ionic-native-bower
scripts/docs-json/*.json
dist/
src/@ionic-native/plugins/**/ngx
*.d.ts

View File

@@ -1,24 +1,319 @@
# [5.0.0-beta.24](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.23...v5.0.0-beta.24) (2019-01-20)
# [5.13.0](https://github.com/ionic-team/ionic-native/compare/v5.12.0...v5.13.0) (2019-08-30)
### Bug Fixes
* **anyline:** added official plugin ([#3144](https://github.com/ionic-team/ionic-native/issues/3144)) ([26447d2](https://github.com/ionic-team/ionic-native/commit/26447d2))
* **in-app-browser:** update types to match cordova-plugin-inappbrowser 3.1.0 ([#3142](https://github.com/ionic-team/ionic-native/issues/3142)) ([4d1e0e6](https://github.com/ionic-team/ionic-native/commit/4d1e0e6))
* **network:** rename onchange method name ([#3146](https://github.com/ionic-team/ionic-native/issues/3146)) ([73493e2](https://github.com/ionic-team/ionic-native/commit/73493e2))
* **theme-detection:** added android platform ([#3143](https://github.com/ionic-team/ionic-native/issues/3143)) ([a55bb60](https://github.com/ionic-team/ionic-native/commit/a55bb60))
### Features
* **google-play-games-services:** add new synchronous methods ([#3138](https://github.com/ionic-team/ionic-native/issues/3138)) ([189570d](https://github.com/ionic-team/ionic-native/commit/189570d))
# [5.12.0](https://github.com/ionic-team/ionic-native/compare/v5.11.0...v5.12.0) (2019-08-09)
### Bug Fixes
* **background-geolocation:** enum not string ([#3131](https://github.com/ionic-team/ionic-native/issues/3131)) ([5cc91bc](https://github.com/ionic-team/ionic-native/commit/5cc91bc)), closes [/stackoverflow.com/questions/57293829/argument-of-type-location-is-not-assignable-to-parameter-of-type-backgroundge/57302110#57302110](https://github.com//stackoverflow.com/questions/57293829/argument-of-type-location-is-not-assignable-to-parameter-of-type-backgroundge/57302110/issues/57302110)
* **chooser:** [@param](https://github.com/param) accept is supposed to be optional ([#3134](https://github.com/ionic-team/ionic-native/issues/3134)) ([f3b8e34](https://github.com/ionic-team/ionic-native/commit/f3b8e34))
* **intercom:** added logout, displayHelpCenter, sendPushTokenToIntercom ([3bb6b59](https://github.com/ionic-team/ionic-native/commit/3bb6b59))
* **ms-adal:** use correct accessTokenType prop ([#3128](https://github.com/ionic-team/ionic-native/issues/3128)) ([016023a](https://github.com/ionic-team/ionic-native/commit/016023a))
### Features
* **file-chooser:** add missing options param ([#3136](https://github.com/ionic-team/ionic-native/issues/3136)) ([fd81a5e](https://github.com/ionic-team/ionic-native/commit/fd81a5e))
* **http:** add sendRequest responseType option ([#3120](https://github.com/ionic-team/ionic-native/issues/3120)) ([7696706](https://github.com/ionic-team/ionic-native/commit/7696706))
* **smartlook:** add plugin ([#3117](https://github.com/ionic-team/ionic-native/issues/3117)) ([8bcbc95](https://github.com/ionic-team/ionic-native/commit/8bcbc95))
# [5.11.0](https://github.com/ionic-team/ionic-native/compare/v5.10.0...v5.11.0) (2019-07-29)
### Features
* **cordova-plugin-firebasex:** Add plugin ([#3106](https://github.com/ionic-team/ionic-native/issues/3106)) ([de83edb](https://github.com/ionic-team/ionic-native/commit/de83edb))
* **urbanship:** add plugin ([9c9ed35](https://github.com/ionic-team/ionic-native/commit/9c9ed35))
* **wonderpush:** add plugin ([#3107](https://github.com/ionic-team/ionic-native/issues/3107)) ([7e08680](https://github.com/ionic-team/ionic-native/commit/7e08680))
# [5.10.0](https://github.com/ionic-team/ionic-native/compare/v5.9.0...v5.10.0) (2019-07-12)
### Bug Fixes
* **barcode-scanner:** add missing shouldAutorotate property ([#3096](https://github.com/ionic-team/ionic-native/issues/3096)) ([8ce541f](https://github.com/ionic-team/ionic-native/commit/8ce541f))
* **biocatch:** added android platform and updated repo ([#3086](https://github.com/ionic-team/ionic-native/issues/3086)) ([717f686](https://github.com/ionic-team/ionic-native/commit/717f686))
* **line-login:** add missing email prop ([#3098](https://github.com/ionic-team/ionic-native/issues/3098)) ([7aa0810](https://github.com/ionic-team/ionic-native/commit/7aa0810))
### Features
* **anyline:** add plugin ([#3101](https://github.com/ionic-team/ionic-native/issues/3101)) ([8badd29](https://github.com/ionic-team/ionic-native/commit/8badd29)), closes [#3074](https://github.com/ionic-team/ionic-native/issues/3074)
* **theme-detection:** add plugin ([#3082](https://github.com/ionic-team/ionic-native/issues/3082)) ([e9fa3ee](https://github.com/ionic-team/ionic-native/commit/e9fa3ee))
# [5.9.0](https://github.com/ionic-team/ionic-native/compare/v5.8.0...v5.9.0) (2019-07-01)
### Bug Fixes
* **alipay:** use correct pluginRef ([#3081](https://github.com/ionic-team/ionic-native/issues/3081)) ([92d5764](https://github.com/ionic-team/ionic-native/commit/92d5764))
* **firebase:** add missing decorator to clearAllNotifications ([#3059](https://github.com/ionic-team/ionic-native/issues/3059)) ([2fadb6b](https://github.com/ionic-team/ionic-native/commit/2fadb6b))
* **in-app-purchase-2:** add missing option to register function ([#3063](https://github.com/ionic-team/ionic-native/issues/3063)) ([1fc0909](https://github.com/ionic-team/ionic-native/commit/1fc0909))
### Features
* **calendar:** add deleteEventById function ([#3075](https://github.com/ionic-team/ionic-native/issues/3075)) ([5857b96](https://github.com/ionic-team/ionic-native/commit/5857b96))
* **diagnostic:** add DENIED_ONCE introduced by diagnostic v5 ([#3071](https://github.com/ionic-team/ionic-native/issues/3071)) ([54ac2bf](https://github.com/ionic-team/ionic-native/commit/54ac2bf))
* **sum-up:** add plugin ([#3080](https://github.com/ionic-team/ionic-native/issues/3080)) ([a4db080](https://github.com/ionic-team/ionic-native/commit/a4db080))
* **unvired-cordova-sdk:** add plugin ([b75f40c](https://github.com/ionic-team/ionic-native/commit/b75f40c))
* **unvired-cordova-sdk:** add plugin ([#3061](https://github.com/ionic-team/ionic-native/issues/3061)) ([9274083](https://github.com/ionic-team/ionic-native/commit/9274083))
# [5.8.0](https://github.com/ionic-team/ionic-native/compare/v5.7.0...v5.8.0) (2019-06-10)
### Bug Fixes
* **music-control:** use correct input type ([#3054](https://github.com/ionic-team/ionic-native/issues/3054)) ([300d7c2](https://github.com/ionic-team/ionic-native/commit/300d7c2))
### Features
* **apple-wallet:** support plugin version 3.0 ([#3053](https://github.com/ionic-team/ionic-native/issues/3053)) ([43442ac](https://github.com/ionic-team/ionic-native/commit/43442ac))
* **diagnostic:** add requestRemoteNotificationsAuthorization method ([#3051](https://github.com/ionic-team/ionic-native/issues/3051)) ([12f2782](https://github.com/ionic-team/ionic-native/commit/12f2782)), closes [#3050](https://github.com/ionic-team/ionic-native/issues/3050) [/github.com/dpa99c/cordova-diagnostic-plugin/blob/0fac4a59d1f246c872c05f513b09f0e9c93abb51/www/ios/diagnostic.notifications.js#L162](https://github.com//github.com/dpa99c/cordova-diagnostic-plugin/blob/0fac4a59d1f246c872c05f513b09f0e9c93abb51/www/ios/diagnostic.notifications.js/issues/L162)
* **in-app-purchase-2:** add documentation ([#3055](https://github.com/ionic-team/ionic-native/issues/3055)) ([ed80933](https://github.com/ionic-team/ionic-native/commit/ed80933))
* **sms-retriever:** add plugin ([#3052](https://github.com/ionic-team/ionic-native/issues/3052)) ([6cbb226](https://github.com/ionic-team/ionic-native/commit/6cbb226))
# [5.7.0](https://github.com/ionic-team/ionic-native/compare/v5.6.1...v5.7.0) (2019-06-03)
### Features
* **biometric-wrapper:** add plugin ([#3025](https://github.com/ionic-team/ionic-native/issues/3025)) ([c0b092b](https://github.com/ionic-team/ionic-native/commit/c0b092b))
* **blinkid:** added support for card overlay ([#3041](https://github.com/ionic-team/ionic-native/issues/3041)) ([2942ebf](https://github.com/ionic-team/ionic-native/commit/2942ebf))
* **device-accounts:** add "getPermissionsByType" function ([#3048](https://github.com/ionic-team/ionic-native/issues/3048)) ([dfb0aa3](https://github.com/ionic-team/ionic-native/commit/dfb0aa3))
* **document-scanner:** add plugin ([#3043](https://github.com/ionic-team/ionic-native/issues/3043)) ([49e81cc](https://github.com/ionic-team/ionic-native/commit/49e81cc))
* **full-screen-image:** add plugin ([#3026](https://github.com/ionic-team/ionic-native/issues/3026)) ([bb7b516](https://github.com/ionic-team/ionic-native/commit/bb7b516))
* **in-app-purchase-2:** update TypeScript definitions ([#3037](https://github.com/ionic-team/ionic-native/issues/3037)) ([4ae35cb](https://github.com/ionic-team/ionic-native/commit/4ae35cb))
* **ocr:** add plugin ([#3044](https://github.com/ionic-team/ionic-native/issues/3044)) ([b79c8b1](https://github.com/ionic-team/ionic-native/commit/b79c8b1))
* **onesignal:** add missing "setExternalUserId" and "removeExternalUserId" functions ([#3049](https://github.com/ionic-team/ionic-native/issues/3049)) ([a0ec125](https://github.com/ionic-team/ionic-native/commit/a0ec125)), closes [#2909](https://github.com/ionic-team/ionic-native/issues/2909)
## [5.6.1](https://github.com/ionic-team/ionic-native/compare/v5.6.0...v5.6.1) (2019-05-27)
# [5.6.0](https://github.com/ionic-team/ionic-native/compare/v5.5.1...v5.6.0) (2019-05-16)
### Bug Fixes
* **biocatch:** start publicKey is now required even if null ([7afed90](https://github.com/ionic-team/ionic-native/commit/7afed90))
* **biocatch:** updateCustomerSessionID argument can be null ([9804476](https://github.com/ionic-team/ionic-native/commit/9804476))
* **blinkid:** correct issue with blink card ([4601ea3](https://github.com/ionic-team/ionic-native/commit/4601ea3))
* **blinkid:** resolve issues with blink card ([1f31954](https://github.com/ionic-team/ionic-native/commit/1f31954))
* **firebase-crashlytics:** update initialise method ([#2990](https://github.com/ionic-team/ionic-native/issues/2990)) ([#2991](https://github.com/ionic-team/ionic-native/issues/2991)) ([e363d98](https://github.com/ionic-team/ionic-native/commit/e363d98))
### Features
* **biocatch:** add Biocatch plugin ([a42e7b8](https://github.com/ionic-team/ionic-native/commit/a42e7b8))
* **camera-preview:** add wrapper for camera preview snapshot ([7903774](https://github.com/ionic-team/ionic-native/commit/7903774))
* **FileOpener:** Added method showOpenWithDialog ([ed36dc4](https://github.com/ionic-team/ionic-native/commit/ed36dc4))
* **firebase-crash:** add plugin ([66b9d1a](https://github.com/ionic-team/ionic-native/commit/66b9d1a))
* **foreground-service:** allows background services ([5b5c6e6](https://github.com/ionic-team/ionic-native/commit/5b5c6e6))
## [5.5.1](https://github.com/ionic-team/ionic-native/compare/v5.5.0...v5.5.1) (2019-04-29)
### Bug Fixes
* **background-geolocation:** update source ([e288a5d](https://github.com/ionic-team/ionic-native/commit/e288a5d)), closes [#2979](https://github.com/ionic-team/ionic-native/issues/2979)
### Features
* **CameraPreview:** add getHorizontalFOV callback ([#3000](https://github.com/ionic-team/ionic-native/issues/3000)) ([9800271](https://github.com/ionic-team/ionic-native/commit/9800271))
# [5.5.0](https://github.com/ionic-team/ionic-native/compare/v5.4.0...v5.5.0) (2019-04-19)
### Bug Fixes
* **background-mode:** update types definitions ([#2997](https://github.com/ionic-team/ionic-native/issues/2997)) ([c0ce17b](https://github.com/ionic-team/ionic-native/commit/c0ce17b))
* **firebase-messaging:** fix the typings of the FCM message payload ([#2998](https://github.com/ionic-team/ionic-native/issues/2998)) ([e47774b](https://github.com/ionic-team/ionic-native/commit/e47774b))
* **google-plus:** mark login param as required ([#2996](https://github.com/ionic-team/ionic-native/issues/2996)) ([c518c81](https://github.com/ionic-team/ionic-native/commit/c518c81))
* **nfc:** rename `makeReadyOnly` to `makeReadOnly` ([9024ea5](https://github.com/ionic-team/ionic-native/commit/9024ea5)), closes [#2985](https://github.com/ionic-team/ionic-native/issues/2985)
### Features
* **device-accounts:** update plugin source ([#2976](https://github.com/ionic-team/ionic-native/issues/2976)) ([c063652](https://github.com/ionic-team/ionic-native/commit/c063652))
* **purchases:** update plugin to v0.0.5 ([#2988](https://github.com/ionic-team/ionic-native/issues/2988)) ([7ea51fc](https://github.com/ionic-team/ionic-native/commit/7ea51fc))
* **spotify-auth:** add Spotify OAuth plugin ([#2989](https://github.com/ionic-team/ionic-native/issues/2989)) ([21dc1f9](https://github.com/ionic-team/ionic-native/commit/21dc1f9))
# [5.4.0](https://github.com/ionic-team/ionic-native/compare/v5.3.0...v5.4.0) (2019-04-07)
### Bug Fixes
* **background-mode:** update types definitions ([#2982](https://github.com/ionic-team/ionic-native/issues/2982)) ([c75aeb9](https://github.com/ionic-team/ionic-native/commit/c75aeb9))
* **ble:** fix definitions ([#2974](https://github.com/ionic-team/ionic-native/issues/2974)) ([6a19509](https://github.com/ionic-team/ionic-native/commit/6a19509))
* **facebook:** use object notation, otherwise EVENTS is´ undefined ([#2955](https://github.com/ionic-team/ionic-native/issues/2955)) ([aa138c4](https://github.com/ionic-team/ionic-native/commit/aa138c4))
* **in-app-purchase2:** Registering a product with an alias is now optional ([#2946](https://github.com/ionic-team/ionic-native/issues/2946)) ([4e60c63](https://github.com/ionic-team/ionic-native/commit/4e60c63))
### Features
* **google-play-games-services:** add getPlayerScore function ([#2949](https://github.com/ionic-team/ionic-native/issues/2949)) ([767d3b3](https://github.com/ionic-team/ionic-native/commit/767d3b3))
* **in-app-purchase-2:** add manageSubscriptions() ([#2980](https://github.com/ionic-team/ionic-native/issues/2980)) ([f874185](https://github.com/ionic-team/ionic-native/commit/f874185))
* **in-app-purchase-2:** add missing property ([#2961](https://github.com/ionic-team/ionic-native/issues/2961)) ([029f82f](https://github.com/ionic-team/ionic-native/commit/029f82f))
* **nativegeocoder:** update plugin to v3.2.0 ([#2958](https://github.com/ionic-team/ionic-native/issues/2958)) ([4de49c3](https://github.com/ionic-team/ionic-native/commit/4de49c3))
* **purchases:** add new plugin for purchases ([#2940](https://github.com/ionic-team/ionic-native/issues/2940)) ([39be275](https://github.com/ionic-team/ionic-native/commit/39be275))
* updating device account wrapper with maintained fork with android 8.0 compatibility ([354af9f](https://github.com/ionic-team/ionic-native/commit/354af9f))
# [5.3.0](https://github.com/ionic-team/ionic-native/compare/v5.2.0...v5.3.0) (2019-03-19)
* Revert "refactor(template): update Inject decorator" ([d827db2](https://github.com/ionic-team/ionic-native/commit/d827db2))
### Bug Fixes
* **scripts:** check for TypeDoc tags when selecting plugin class ([#2963](https://github.com/ionic-team/ionic-native/issues/2963)) ([06654af](https://github.com/ionic-team/ionic-native/commit/06654af))
* **ssr:** check for window and document ([e3e8c85](https://github.com/ionic-team/ionic-native/commit/e3e8c85))
* **ssr:** fix window references ([c2029f7](https://github.com/ionic-team/ionic-native/commit/c2029f7))
* **ssr:** fix window references ([5b1bdc3](https://github.com/ionic-team/ionic-native/commit/5b1bdc3))
* **ssr:** remove cordova warning during ssr ([7e090cc](https://github.com/ionic-team/ionic-native/commit/7e090cc))
### Features
* **nativegeocoder:** update plugin to v3.2.0 ([cd97375](https://github.com/ionic-team/ionic-native/commit/cd97375))
* **scripts:** add docs-json script ([#2947](https://github.com/ionic-team/ionic-native/issues/2947)) ([b0dea6d](https://github.com/ionic-team/ionic-native/commit/b0dea6d))
### BREAKING CHANGES
* This reverts commit c5ae6362d7771b62ae35a6b8ddc6e866aa9964a9.
# [5.2.0](https://github.com/ionic-team/ionic-native/compare/v5.1.0...v5.2.0) (2019-02-20)
### Code Refactoring
* optimize plugins for angular treeshaking ([8b53c04](https://github.com/ionic-team/ionic-native/commit/8b53c04))
### Features
* **apple-wallet:** update wrapper to release 2.0 ([#2935](https://github.com/ionic-team/ionic-native/issues/2935)) ([7ae2ad4](https://github.com/ionic-team/ionic-native/commit/7ae2ad4))
* **linkedin:** delete plugin ([6423031](https://github.com/ionic-team/ionic-native/commit/6423031)), closes [#2925](https://github.com/ionic-team/ionic-native/issues/2925)
### BREAKING CHANGES
* You can remove the plugin import from the app.module.ts because of the changed Inject decorator
# [5.1.0](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.24...v5.1.0) (2019-02-14)
### Bug Fixes
* **bluetooth-le:** Fix typo in InitializeResult interface definition ([#2891](https://github.com/ionic-team/ionic-native/issues/2891)) ([b6f340a](https://github.com/ionic-team/ionic-native/commit/b6f340a))
* **build:** fixed duplicate import identifiers ([3aedde5](https://github.com/ionic-team/ionic-native/commit/3aedde5))
* **build:** remove wrong jsdoc ([63124f3](https://github.com/ionic-team/ionic-native/commit/63124f3))
* **google-play-games-services:** correct Cordova plugin name typo ([#2920](https://github.com/ionic-team/ionic-native/issues/2920)) ([fc0a238](https://github.com/ionic-team/ionic-native/commit/fc0a238)), closes [ionic-team/ionic-docs#424](https://github.com/ionic-team/ionic-docs/issues/424)
* **http:** add 'legacy' as valid option to setSSLCertMode ([#2913](https://github.com/ionic-team/ionic-native/issues/2913)) ([e1a4903](https://github.com/ionic-team/ionic-native/commit/e1a4903)), closes [#2912](https://github.com/ionic-team/ionic-native/issues/2912)
### Features
* **abbyy-rtr:** add new options ([#2915](https://github.com/ionic-team/ionic-native/issues/2915)) ([959a913](https://github.com/ionic-team/ionic-native/commit/959a913))
* **app-launcher:** add plugin ([9bdb2fa](https://github.com/ionic-team/ionic-native/commit/9bdb2fa)), closes [#2889](https://github.com/ionic-team/ionic-native/issues/2889)
* **clevertap:** update for latest CleverTap Cordova plugin ([#2931](https://github.com/ionic-team/ionic-native/issues/2931)) ([aed25a6](https://github.com/ionic-team/ionic-native/commit/aed25a6))
* **firebase-crashlytics:** add plugin ([41c6bca](https://github.com/ionic-team/ionic-native/commit/41c6bca)), closes [#2889](https://github.com/ionic-team/ionic-native/issues/2889)
* **http:** add sendRequest function ([#2910](https://github.com/ionic-team/ionic-native/issues/2910)) ([daf0456](https://github.com/ionic-team/ionic-native/commit/daf0456)), closes [#2824](https://github.com/ionic-team/ionic-native/issues/2824)
* **luxand:** add plugin ([#2883](https://github.com/ionic-team/ionic-native/issues/2883)) ([632dec2](https://github.com/ionic-team/ionic-native/commit/632dec2))
* **magnetometer:** add plugin ([#2917](https://github.com/ionic-team/ionic-native/issues/2917)) ([fd27136](https://github.com/ionic-team/ionic-native/commit/fd27136))
* **photo-viewer:** add new params ([#2895](https://github.com/ionic-team/ionic-native/issues/2895)) ([c5ceba1](https://github.com/ionic-team/ionic-native/commit/c5ceba1))
* **quikkly:** add plugin([#2923](https://github.com/ionic-team/ionic-native/issues/2923)) ([2833da4](https://github.com/ionic-team/ionic-native/commit/2833da4))
* **zoom:** add plugin ([#2916](https://github.com/ionic-team/ionic-native/issues/2916)) ([50e0534](https://github.com/ionic-team/ionic-native/commit/50e0534))
# [5.0.0-beta.24](https://github.com/ionic-team/ionic-native/compare/v4.20.0...v5.0.0-beta.24) (2019-01-20)
# [4.20.0](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.23...v4.20.0) (2019-01-20)
### Bug Fixes
* **bluetooth-le:** Fix typo in interface definition ([#2881](https://github.com/ionic-team/ionic-native/issues/2881)) ([c2f4561](https://github.com/ionic-team/ionic-native/commit/c2f4561))
### Features
* **background-geolocation:** add v3 functions and interfaces ([#2393](https://github.com/ionic-team/ionic-native/issues/2393)) ([1ba6f97](https://github.com/ionic-team/ionic-native/commit/1ba6f97))
* **lottie-splash-screen:** add new plugin ([#2880](https://github.com/ionic-team/ionic-native/issues/2880)) ([603d694](https://github.com/ionic-team/ionic-native/commit/603d694))
* **web-intent:** Add missing type info ([#2878](https://github.com/ionic-team/ionic-native/issues/2878)) ([3226f76](https://github.com/ionic-team/ionic-native/commit/3226f76))
# [5.0.0-beta.23](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.22...v5.0.0-beta.23) (2019-01-19)
### Features
* add analytics-firebase plugin ([e374b52](https://github.com/ionic-team/ionic-native/commit/e374b52))
* **audio-management:** add plugin for audio streams ([#2877](https://github.com/ionic-team/ionic-native/issues/2877)) ([34ecd29](https://github.com/ionic-team/ionic-native/commit/34ecd29))
* **blinkid:** add plugin ([#2833](https://github.com/ionic-team/ionic-native/issues/2833)) ([8e405cc](https://github.com/ionic-team/ionic-native/commit/8e405cc))
# [5.0.0-beta.22](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.21...v5.0.0-beta.22) (2018-12-01)
### Bug Fixes
* **local-notifications:** update type of the every property ([#2825](https://github.com/ionic-team/ionic-native/issues/2825)) ([31e4058](https://github.com/ionic-team/ionic-native/commit/31e4058))
* **health:** fix typos ([#2831](https://github.com/ionic-team/ionic-native/issues/2831)) ([ea3150e](https://github.com/ionic-team/ionic-native/commit/ea3150e))
### Features
* **adjust:** add adjust sdk plugin ([#2872](https://github.com/ionic-team/ionic-native/issues/2872)) ([9e6705d](https://github.com/ionic-team/ionic-native/commit/9e6705d))
* **admob:** add plugin ([#2864](https://github.com/ionic-team/ionic-native/issues/2864)) ([707ce1c](https://github.com/ionic-team/ionic-native/commit/707ce1c))
* **analytics-firebase:** add plugin ([#2862](https://github.com/ionic-team/ionic-native/issues/2862)) ([5df3de7](https://github.com/ionic-team/ionic-native/commit/5df3de7))
* **audio-management:** add plugin for audio streams ([#2877](https://github.com/ionic-team/ionic-native/issues/2877)) ([34ecd29](https://github.com/ionic-team/ionic-native/commit/34ecd29))
* **baidu-push:** add plugin ([#2838](https://github.com/ionic-team/ionic-native/issues/2838)) ([c3de8df](https://github.com/ionic-team/ionic-native/commit/c3de8df))
* **firebase:** add clearAllNotifications method ([#2867](https://github.com/ionic-team/ionic-native/issues/2867)) ([7c46d8c](https://github.com/ionic-team/ionic-native/commit/7c46d8c))
* add analytics-firebase plugin ([e374b52](https://github.com/ionic-team/ionic-native/commit/e374b52))
* **blinkid:** add plugin ([#2833](https://github.com/ionic-team/ionic-native/issues/2833)) ([8e405cc](https://github.com/ionic-team/ionic-native/commit/8e405cc))
* **gao-de-location:** add plugin ([#2857](https://github.com/ionic-team/ionic-native/issues/2857)) ([e2b25de](https://github.com/ionic-team/ionic-native/commit/e2b25de))
* **in-app-browser:** add 'beforeload' as option ([#2863](https://github.com/ionic-team/ionic-native/issues/2863)) ([d33bcb0](https://github.com/ionic-team/ionic-native/commit/d33bcb0))
# [5.0.0-beta.22](https://github.com/ionic-team/ionic-native/compare/v4.18.0...v5.0.0-beta.22) (2018-12-01)
### chore
@@ -26,18 +321,74 @@
* update deps ([649dca1](https://github.com/ionic-team/ionic-native/commit/649dca1))
### Features
* **downloader:** add plugin ([#2820](https://github.com/ionic-team/ionic-native/issues/2820)) ([b9e9aa1](https://github.com/ionic-team/ionic-native/commit/b9e9aa1))
### BREAKING CHANGES
* Requires Angular 7.1 and TypeScript 3.1
# [5.0.0-beta.21](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.20...v5.0.0-beta.21) (2018-09-25)
# [4.18.0](https://github.com/ionic-team/ionic-native/compare/v4.17.0...v4.18.0) (2018-12-01)
### Bug Fixes
* **local-notifications:** update type of the every property ([#2825](https://github.com/ionic-team/ionic-native/issues/2825)) ([b166cc5](https://github.com/ionic-team/ionic-native/commit/b166cc5))
* **local-notifications:** update type of the every property ([#2825](https://github.com/ionic-team/ionic-native/issues/2825)) ([31e4058](https://github.com/ionic-team/ionic-native/commit/31e4058))
### Features
* **downloader:** add plugin ([#2820](https://github.com/ionic-team/ionic-native/issues/2820)) ([0065704](https://github.com/ionic-team/ionic-native/commit/0065704))
* **downloader:** add plugin ([#2820](https://github.com/ionic-team/ionic-native/issues/2820)) ([b9e9aa1](https://github.com/ionic-team/ionic-native/commit/b9e9aa1))
* **line-login:** add loginWeb function ([#2810](https://github.com/ionic-team/ionic-native/issues/2810)) ([7145afa](https://github.com/ionic-team/ionic-native/commit/7145afa))
# [4.17.0](https://github.com/ionic-team/ionic-native/compare/v4.16.0...v4.17.0) (2018-11-02)
### Bug Fixes
* **contacts plugin:** add the rawId parameter ([#2799](https://github.com/ionic-team/ionic-native/issues/2799)) ([b61b339](https://github.com/ionic-team/ionic-native/commit/b61b339))
### Features
* **crashlytics:** allow user to set userIdentifier for crashlytics ([#2792](https://github.com/ionic-team/ionic-native/issues/2792)) ([a3bd197](https://github.com/ionic-team/ionic-native/commit/a3bd197))
* **firebase-authentication:** add plugin ([#2797](https://github.com/ionic-team/ionic-native/issues/2797)) ([43bfeb4](https://github.com/ionic-team/ionic-native/commit/43bfeb4))
* **line-login:** add plugin ([#2782](https://github.com/ionic-team/ionic-native/issues/2782)) ([dc4183d](https://github.com/ionic-team/ionic-native/commit/dc4183d))
# [4.16.0](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.21...v4.16.0) (2018-10-17)
### Bug Fixes
* **local-notifications:** add missing functions ([#2779](https://github.com/ionic-team/ionic-native/issues/2779)) ([336b3ff](https://github.com/ionic-team/ionic-native/commit/336b3ff)), closes [#2778](https://github.com/ionic-team/ionic-native/issues/2778)
### Features
* **admob-plus:** Add admob-plus ([#2753](https://github.com/ionic-team/ionic-native/issues/2753)) ([6c99ec8](https://github.com/ionic-team/ionic-native/commit/6c99ec8))
* **firebase-messaging:** add revokeToken function ([#2763](https://github.com/ionic-team/ionic-native/issues/2763)) ([1a2dc3e](https://github.com/ionic-team/ionic-native/commit/1a2dc3e))
* **lastCam:** add plugin ([#2759](https://github.com/ionic-team/ionic-native/issues/2759)) ([99cebcb](https://github.com/ionic-team/ionic-native/commit/99cebcb))
* **nfc:** add NFC readerMode ([#2777](https://github.com/ionic-team/ionic-native/issues/2777)) ([2aa73b5](https://github.com/ionic-team/ionic-native/commit/2aa73b5))
* **speechkit:** plugin updated with voice parameter ([#2761](https://github.com/ionic-team/ionic-native/issues/2761)) ([4468b52](https://github.com/ionic-team/ionic-native/commit/4468b52))
# [5.0.0-beta.21](https://github.com/ionic-team/ionic-native/compare/v4.15.0...v5.0.0-beta.21) (2018-09-25)
### Bug Fixes
* **keyboard:** add missing property ([fcd6d26](https://github.com/ionic-team/ionic-native/commit/fcd6d26))
* **keyboard:** include the mode parameter in setResizeMode() ([8d57df3](https://github.com/ionic-team/ionic-native/commit/8d57df3))
# [4.15.0](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.20...v4.15.0) (2018-09-25)
### Bug Fixes
@@ -45,7 +396,7 @@
* **admob-free:** fix duplicated class ([95b9262](https://github.com/ionic-team/ionic-native/commit/95b9262))
* **bluetooth-le:** Removed a wrong cordova decorator param ([#2733](https://github.com/ionic-team/ionic-native/issues/2733)) ([cbeb413](https://github.com/ionic-team/ionic-native/commit/cbeb413))
* **build:** fix macos mojave build errors ([358474d](https://github.com/ionic-team/ionic-native/commit/358474d))
* **keyboard:** include the mode parameter in setResizeMode() ([8d57df3](https://github.com/ionic-team/ionic-native/commit/8d57df3))
* **keyboard:** use cordova-plugin-ionic-keyboard ([#2743](https://github.com/ionic-team/ionic-native/issues/2743)) ([1457a16](https://github.com/ionic-team/ionic-native/commit/1457a16)), closes [#2306](https://github.com/ionic-team/ionic-native/issues/2306)
* **keyboard:** use cordova-plugin-ionic-keyboard ([#2743](https://github.com/ionic-team/ionic-native/issues/2743)) ([fbf7463](https://github.com/ionic-team/ionic-native/commit/fbf7463)), closes [#2306](https://github.com/ionic-team/ionic-native/issues/2306)
* **printer:** import getPromise ([15cd285](https://github.com/ionic-team/ionic-native/commit/15cd285))
* **screenshot:** import getPromise ([e661f2e](https://github.com/ionic-team/ionic-native/commit/e661f2e))
@@ -53,6 +404,14 @@
* **secure-storage:** import getPromise ([653f5a2](https://github.com/ionic-team/ionic-native/commit/653f5a2))
### Features
* **plugins:** add AppleWallet ([#2740](https://github.com/ionic-team/ionic-native/issues/2740)) ([307477d](https://github.com/ionic-team/ionic-native/commit/307477d))
* **plugins:** add web-server plugin ([#2726](https://github.com/ionic-team/ionic-native/issues/2726)) ([8116ddd](https://github.com/ionic-team/ionic-native/commit/8116ddd))
* **siri-shortcuts:** Add clear option for the activated shortcut ([#2734](https://github.com/ionic-team/ionic-native/issues/2734)) ([3eff280](https://github.com/ionic-team/ionic-native/commit/3eff280))
* **taptic-engine:** add missing functions and types ([a6bcc9a](https://github.com/ionic-team/ionic-native/commit/a6bcc9a))
# [5.0.0-beta.20](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.19...v5.0.0-beta.20) (2018-09-18)
@@ -63,29 +422,145 @@
# [5.0.0-beta.19](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.18...v5.0.0-beta.19) (2018-09-18)
# [5.0.0-beta.19](https://github.com/ionic-team/ionic-native/compare/v4.14.0...v5.0.0-beta.19) (2018-09-18)
# [4.14.0](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.18...v4.14.0) (2018-09-18)
### Bug Fixes
* **index-app-content:** fix lint ([2611061](https://github.com/ionic-team/ionic-native/commit/2611061))
* **mobile-accessibility:** add correct pluginRef ([3699fa9](https://github.com/ionic-team/ionic-native/commit/3699fa9)), closes [#1860](https://github.com/ionic-team/ionic-native/issues/1860)
* **ms-adal:** remove duplicate imports ([4803912](https://github.com/ionic-team/ionic-native/commit/4803912))
* **onesignal:** add missing setLocationShared method ([#2723](https://github.com/ionic-team/ionic-native/issues/2723)) ([8bab321](https://github.com/ionic-team/ionic-native/commit/8bab321))
* **push:** add missing Chanel options ([3ef9593](https://github.com/ionic-team/ionic-native/commit/3ef9593)), closes [#2712](https://github.com/ionic-team/ionic-native/issues/2712)
* **web-intent:** add missing properties ([d077c48](https://github.com/ionic-team/ionic-native/commit/d077c48)), closes [#2701](https://github.com/ionic-team/ionic-native/issues/2701)
* **web-intent:** fix lint ([9feefe8](https://github.com/ionic-team/ionic-native/commit/9feefe8))
### Features
# [5.0.0-beta.18](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.14...v5.0.0-beta.18) (2018-09-15)
* **chooster:** add plugin ([04db233](https://github.com/ionic-team/ionic-native/commit/04db233)), closes [#2612](https://github.com/ionic-team/ionic-native/issues/2612)
* **local-notifications:** add missing functions ([10d222d](https://github.com/ionic-team/ionic-native/commit/10d222d))
* **onesignal:** add missing functions ([51006a7](https://github.com/ionic-team/ionic-native/commit/51006a7)), closes [#2504](https://github.com/ionic-team/ionic-native/issues/2504)
# [5.0.0-beta.18](https://github.com/ionic-team/ionic-native/compare/v4.13.0...v5.0.0-beta.18) (2018-09-15)
# [4.13.0](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.17...v4.13.0) (2018-09-15)
### Bug Fixes
* **bluetooth-le:** Various methods fixes ([#2707](https://github.com/ionic-team/ionic-native/issues/2707)) ([7047920](https://github.com/ionic-team/ionic-native/commit/7047920))
* **in-app-review:** Transfer Plugin to the correct folder ([#2688](https://github.com/ionic-team/ionic-native/issues/2688)) ([22fd49b](https://github.com/ionic-team/ionic-native/commit/22fd49b))
* **ms-adal:** Update createAuthenticationContext ([#2705](https://github.com/ionic-team/ionic-native/issues/2705)) ([890129b](https://github.com/ionic-team/ionic-native/commit/890129b))
### Features
* **appsflyer:** Added Appsflyer Cordova SDK as ionic native plugin ([#2690](https://github.com/ionic-team/ionic-native/issues/2690)) ([3b3f942](https://github.com/ionic-team/ionic-native/commit/3b3f942))
* **branch-io:** Add branch.io attribution and invitation plugin ([#2691](https://github.com/ionic-team/ionic-native/issues/2691)) ([90d75af](https://github.com/ionic-team/ionic-native/commit/90d75af))
* **calldirectory:** add log function ([#2708](https://github.com/ionic-team/ionic-native/issues/2708)) ([9601a64](https://github.com/ionic-team/ionic-native/commit/9601a64))
* **janalytics:** add plugin ([#2711](https://github.com/ionic-team/ionic-native/issues/2711)) ([0b97176](https://github.com/ionic-team/ionic-native/commit/0b97176))
* **local-notifications:** Added local additional local notification action fields ([#2713](https://github.com/ionic-team/ionic-native/issues/2713)) ([267149b](https://github.com/ionic-team/ionic-native/commit/267149b))
* **mixpanel:** Update/add functions ([#2697](https://github.com/ionic-team/ionic-native/issues/2697)) ([ac467c5](https://github.com/ionic-team/ionic-native/commit/ac467c5))
* **wechat:** add plugin ([#2716](https://github.com/ionic-team/ionic-native/issues/2716)) ([10ac9ff](https://github.com/ionic-team/ionic-native/commit/10ac9ff))
# [5.0.0-beta.17](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.16...v5.0.0-beta.17) (2018-08-31)
### Bug Fixes
* **in-app-browser:** fix mandatory options ([#2684](https://github.com/ionic-team/ionic-native/issues/2684)) ([d82e675](https://github.com/ionic-team/ionic-native/commit/d82e675))
## [4.12.1](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.15...v4.12.1) (2018-08-31)
### Bug Fixes
* **camera:** fixing builds ([c8d25a1](https://github.com/ionic-team/ionic-native/commit/c8d25a1))
* **clevertap:** fix jsdoc ([e47a3e1](https://github.com/ionic-team/ionic-native/commit/e47a3e1))
* **contacts:** remove double import of checkAvailability ([#2659](https://github.com/ionic-team/ionic-native/issues/2659)) ([1ad4cc1](https://github.com/ionic-team/ionic-native/commit/1ad4cc1))
* **core:** wrapEventObservable ([#2660](https://github.com/ionic-team/ionic-native/issues/2660)) ([bd34581](https://github.com/ionic-team/ionic-native/commit/bd34581))
* **open-native-settings:** allow supported input ([#2666](https://github.com/ionic-team/ionic-native/issues/2666)) ([be0dc3d](https://github.com/ionic-team/ionic-native/commit/be0dc3d))
### Features
* **aes256:** Added new utility methods to generate secure key and secure IV ([#2675](https://github.com/ionic-team/ionic-native/issues/2675)) ([a731466](https://github.com/ionic-team/ionic-native/commit/a731466))
* **in-app-browser:** Add missing InAppBrowserOptions-properties ([#2669](https://github.com/ionic-team/ionic-native/issues/2669)) ([d90724e](https://github.com/ionic-team/ionic-native/commit/d90724e))
* **push:** Added voip property to IOSPushOptions ([#2681](https://github.com/ionic-team/ionic-native/issues/2681)) ([03e4f0e](https://github.com/ionic-team/ionic-native/commit/03e4f0e))
# [5.0.0-beta.15](https://github.com/ionic-team/ionic-native/compare/v4.12.0...v5.0.0-beta.15) (2018-08-25)
### Bug Fixes
* **contacts:** remove double import of checkAvailability ([#2659](https://github.com/ionic-team/ionic-native/issues/2659)) ([1ad4cc1](https://github.com/ionic-team/ionic-native/commit/1ad4cc1))
* **extended-device-information:** fix wrong decorator ([5e9c92a](https://github.com/ionic-team/ionic-native/commit/5e9c92a))
### Features
* **bluetooth-le:** add bluetooth-le plugin ([#2651](https://github.com/ionic-team/ionic-native/issues/2651)) ([591ee87](https://github.com/ionic-team/ionic-native/commit/591ee87))
* **http:** add setSSLCertMode function ([8db1dbe](https://github.com/ionic-team/ionic-native/commit/8db1dbe))
# [4.12.0](https://github.com/ionic-team/ionic-native/compare/v4.11.0...v4.12.0) (2018-08-16)
### Bug Fixes
* **clevertap:** fix jsdoc ([e47a3e1](https://github.com/ionic-team/ionic-native/commit/e47a3e1))
* **extended-device-information:** Fixed Memory Display Bug ([#2641](https://github.com/ionic-team/ionic-native/issues/2641)) ([2ac5282](https://github.com/ionic-team/ionic-native/commit/2ac5282))
* **network:** bind listener to document instead of window ([#2622](https://github.com/ionic-team/ionic-native/issues/2622)) ([d10777a](https://github.com/ionic-team/ionic-native/commit/d10777a))
* **photo-library:** interface missing includeVideos ([3f415f9](https://github.com/ionic-team/ionic-native/commit/3f415f9)), closes [#2624](https://github.com/ionic-team/ionic-native/issues/2624)
### Features
* **fabric:** add fabric plugin ([#2618](https://github.com/ionic-team/ionic-native/issues/2618)) ([9b4fd02](https://github.com/ionic-team/ionic-native/commit/9b4fd02))
* **local-notifications:** add new foreground property ([#2633](https://github.com/ionic-team/ionic-native/issues/2633)) ([229b62c](https://github.com/ionic-team/ionic-native/commit/229b62c))
* **webengage:** add optional config with initialization ([#2637](https://github.com/ionic-team/ionic-native/issues/2637)) ([ca9a702](https://github.com/ionic-team/ionic-native/commit/ca9a702))
# [4.11.0](https://github.com/ionic-team/ionic-native/compare/v4.10.1...v4.11.0) (2018-07-29)
### Bug Fixes
* **http:** add correct return types for downloadFile and uploadFile ([4092831](https://github.com/ionic-team/ionic-native/commit/4092831)), closes [#2615](https://github.com/ionic-team/ionic-native/issues/2615)
### Features
* **clevertap:** add CleverTap plugin ([#2609](https://github.com/ionic-team/ionic-native/issues/2609)) ([27d380e](https://github.com/ionic-team/ionic-native/commit/27d380e))
* **facebook:** add getDeferredApplink function ([3b32e19](https://github.com/ionic-team/ionic-native/commit/3b32e19)), closes [#2510](https://github.com/ionic-team/ionic-native/issues/2510)
* **webengage:** add webengage plugin ([#2604](https://github.com/ionic-team/ionic-native/issues/2604)) ([bd5bd7e](https://github.com/ionic-team/ionic-native/commit/bd5bd7e))
## [4.10.1](https://github.com/ionic-team/ionic-native/compare/v5.0.0-beta.14...v4.10.1) (2018-07-25)
### Bug Fixes
* **nfs:** Optional arguments for records like textRecord ([#2605](https://github.com/ionic-team/ionic-native/issues/2605)) ([b635ba9](https://github.com/ionic-team/ionic-native/commit/b635ba9))
* **user-agent:** Plugin not installed ([#2607](https://github.com/ionic-team/ionic-native/issues/2607)) ([79cb478](https://github.com/ionic-team/ionic-native/commit/79cb478))
# [5.0.0-beta.14](https://github.com/ionic-team/ionic-native/compare/v4.10.0...v5.0.0-beta.14) (2018-07-18)
@@ -156,10 +631,6 @@
### Bug Fixes
* build errors ([f70eaea](https://github.com/ionic-team/ionic-native/commit/f70eaea))
* fix lint ([b36a1f9](https://github.com/ionic-team/ionic-native/commit/b36a1f9))
* fix more lint errors ([0b3d299](https://github.com/ionic-team/ionic-native/commit/0b3d299))
* fix rxjs 6 imports ([e0b0687](https://github.com/ionic-team/ionic-native/commit/e0b0687))
* **android-fingerprint-auth:** ensure ERRORS array is defined ([#2508](https://github.com/ionic-team/ionic-native/issues/2508)) ([714114d](https://github.com/ionic-team/ionic-native/commit/714114d))
* **background-geolocation:** watchLocationMode returns observable ([#2547](https://github.com/ionic-team/ionic-native/issues/2547)) ([3f8a6f2](https://github.com/ionic-team/ionic-native/commit/3f8a6f2))
* **calendar:** Fixes createCalendar parameter typing ([84e0aa1](https://github.com/ionic-team/ionic-native/commit/84e0aa1))
@@ -168,7 +639,6 @@
* **ibeacon:** correct Type {Region} in some params ([#2453](https://github.com/ionic-team/ionic-native/issues/2453)) ([300db62](https://github.com/ionic-team/ionic-native/commit/300db62))
* **in-app-purchase-2:** fix ready method signature ([#2043](https://github.com/ionic-team/ionic-native/issues/2043)) ([a018381](https://github.com/ionic-team/ionic-native/commit/a018381))
* **linting:** Fixing misc linting errors that typedoc complains about ([#2476](https://github.com/ionic-team/ionic-native/issues/2476)) ([d3c2859](https://github.com/ionic-team/ionic-native/commit/d3c2859))
* fix tealium jsdoc ([f34b6e6](https://github.com/ionic-team/ionic-native/commit/f34b6e6))
* **native-geocoder:** set response type to an array ([#2505](https://github.com/ionic-team/ionic-native/issues/2505)) ([defb276](https://github.com/ionic-team/ionic-native/commit/defb276))
* **onesignal:** make params optional ([#2507](https://github.com/ionic-team/ionic-native/issues/2507)) ([e6db281](https://github.com/ionic-team/ionic-native/commit/e6db281))
* **onesignal:** update OSPermissionState interface ([#2561](https://github.com/ionic-team/ionic-native/issues/2561)) ([fc088f8](https://github.com/ionic-team/ionic-native/commit/fc088f8))
@@ -177,6 +647,11 @@
* **stripe:** fixed casing of postal code param ([#2520](https://github.com/ionic-team/ionic-native/issues/2520)) ([d6a9ed1](https://github.com/ionic-team/ionic-native/commit/d6a9ed1))
* **themeable-browser:** allow hidden and clear cache ([a4cc7f7](https://github.com/ionic-team/ionic-native/commit/a4cc7f7))
* **v5-builder:** stop transforming "declare" classes ([#2503](https://github.com/ionic-team/ionic-native/issues/2503)) ([6662234](https://github.com/ionic-team/ionic-native/commit/6662234))
* build errors ([f70eaea](https://github.com/ionic-team/ionic-native/commit/f70eaea))
* fix lint ([b36a1f9](https://github.com/ionic-team/ionic-native/commit/b36a1f9))
* fix more lint errors ([0b3d299](https://github.com/ionic-team/ionic-native/commit/0b3d299))
* fix rxjs 6 imports ([e0b0687](https://github.com/ionic-team/ionic-native/commit/e0b0687))
* fix tealium jsdoc ([f34b6e6](https://github.com/ionic-team/ionic-native/commit/f34b6e6))
* **web-intent:** fix options param ([#2450](https://github.com/ionic-team/ionic-native/issues/2450)) ([23b760b](https://github.com/ionic-team/ionic-native/commit/23b760b))
* **web-intent:** registerBroadcastReceiver as Observable ([#2491](https://github.com/ionic-team/ionic-native/issues/2491)) ([47f7397](https://github.com/ionic-team/ionic-native/commit/47f7397))
@@ -265,9 +740,9 @@
* **one-signal:** add clearOneSignalNotifications function ([fc0338a](https://github.com/ionic-team/ionic-native/commit/fc0338a))
* **plugin:** Add google nearby plugin ([eb1bcdd](https://github.com/ionic-team/ionic-native/commit/eb1bcdd))
* **plugin:** add iOS File Picker ([571df3a](https://github.com/ionic-team/ionic-native/commit/571df3a))
* **plugin:** add Microdoft App Center Analytics plugin ([b65946b](https://github.com/ionic-team/ionic-native/commit/b65946b))
* **plugin:** add Microdoft App Center Analytics plugin ([7a5bee9](https://github.com/ionic-team/ionic-native/commit/7a5bee9))
* **plugin:** add Microdoft App Center Analytics plugin ([84c9bfb](https://github.com/ionic-team/ionic-native/commit/84c9bfb))
* **plugin:** add Microdoft App Center Analytics plugin ([b65946b](https://github.com/ionic-team/ionic-native/commit/b65946b))
* **plugin:** add Microsoft App Center Crashes plugin ([44e0e24](https://github.com/ionic-team/ionic-native/commit/44e0e24))
* **plugin:** add Microsoft App Center Push plugin ([cdabebd](https://github.com/ionic-team/ionic-native/commit/cdabebd))
* **plugin:** add OpenALPR plugin ([e27fbf4](https://github.com/ionic-team/ionic-native/commit/e27fbf4))
@@ -789,8 +1264,8 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Features
* **keychain:** add Keychain plugin ([#1420](https://github.com/ionic-team/ionic-native/issues/1420)) ([16dc71a](https://github.com/ionic-team/ionic-native/commit/16dc71a))
* add IonicNativePlugin base class ([#1425](https://github.com/ionic-team/ionic-native/issues/1425)) ([17366a2](https://github.com/ionic-team/ionic-native/commit/17366a2))
* **keychain:** add Keychain plugin ([#1420](https://github.com/ionic-team/ionic-native/issues/1420)) ([16dc71a](https://github.com/ionic-team/ionic-native/commit/16dc71a))
@@ -1159,12 +1634,12 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Bug Fixes
* add clearAllNotifications() ([8c021bc](https://github.com/ionic-team/ionic-native/commit/8c021bc))
* **battery-status:** add missing pluginRef ([3da0efe](https://github.com/ionic-team/ionic-native/commit/3da0efe))
* **core:** fix exception in CordovaProperty ([#998](https://github.com/ionic-team/ionic-native/issues/998)) ([cb29363](https://github.com/ionic-team/ionic-native/commit/cb29363)), closes [#992](https://github.com/ionic-team/ionic-native/issues/992)
* **core:** fix plugin check ([da7a370](https://github.com/ionic-team/ionic-native/commit/da7a370))
* **googlemaps:** fix GoogleMapsLaLngBounds ([c3127d3](https://github.com/ionic-team/ionic-native/commit/c3127d3)), closes [#972](https://github.com/ionic-team/ionic-native/issues/972)
* **plugin:** adds subscribe() and unsubscribe() ([94025a7](https://github.com/ionic-team/ionic-native/commit/94025a7))
* add clearAllNotifications() ([8c021bc](https://github.com/ionic-team/ionic-native/commit/8c021bc))
### Features
@@ -1322,8 +1797,8 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Bug Fixes
* add return ([3fdc4a8](https://github.com/ionic-team/ionic-native/commit/3fdc4a8))
* **card-io:** fix typo in options ([e6700a3](https://github.com/ionic-team/ionic-native/commit/e6700a3))
* add return ([3fdc4a8](https://github.com/ionic-team/ionic-native/commit/3fdc4a8))
* **globalization:** add missing parameter to numberToString function ([1072ab1](https://github.com/ionic-team/ionic-native/commit/1072ab1)), closes [#835](https://github.com/ionic-team/ionic-native/issues/835)
* **headercolor:** solve typo in usage and chore ([bab2971](https://github.com/ionic-team/ionic-native/commit/bab2971))
@@ -1576,6 +2051,7 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Bug Fixes
* remove CanvasCamera plugin ([c75f898](https://github.com/ionic-team/ionic-native/commit/c75f898))
* **base64togallery:** fixes callbacks ([#513](https://github.com/ionic-team/ionic-native/issues/513)) ([1db1374](https://github.com/ionic-team/ionic-native/commit/1db1374))
* **diagnostic:** Add DENIED_ALWAYS to permissionStatus, also some code formatting ([9d573a9](https://github.com/ionic-team/ionic-native/commit/9d573a9))
* **diagnostic:** Fix diagnostic objects ([cb176aa](https://github.com/ionic-team/ionic-native/commit/cb176aa))
@@ -1589,7 +2065,6 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
* **mixpanel:** Make eventProperties optional ([#501](https://github.com/ionic-team/ionic-native/issues/501)) ([51364f8](https://github.com/ionic-team/ionic-native/commit/51364f8))
* **ng1:** fail gracefully when angular 1 promises can't be retrieved ([d135dc2](https://github.com/ionic-team/ionic-native/commit/d135dc2))
* **ng1:** grab injector from app. [#451](https://github.com/ionic-team/ionic-native/issues/451) ([2dc68a4](https://github.com/ionic-team/ionic-native/commit/2dc68a4))
* remove CanvasCamera plugin ([c75f898](https://github.com/ionic-team/ionic-native/commit/c75f898))
* **social-sharing:** shareViaEmail now resolves/rejects when not providing optional args ([c76de34](https://github.com/ionic-team/ionic-native/commit/c76de34))
* **social-sharing:** various fixes ([#520](https://github.com/ionic-team/ionic-native/issues/520)) ([4f97164](https://github.com/ionic-team/ionic-native/commit/4f97164))
@@ -1666,11 +2141,11 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Bug Fixes
* add the reject function at the expected errorIndex position in the args array ([#436](https://github.com/ionic-team/ionic-native/issues/436)) ([4e87ac7](https://github.com/ionic-team/ionic-native/commit/4e87ac7))
* **camera-preview:** changes implementation to match Cordova plugin ([#441](https://github.com/ionic-team/ionic-native/issues/441)) ([55ba65a](https://github.com/ionic-team/ionic-native/commit/55ba65a))
* **file:** fixes exclusive option ([#459](https://github.com/ionic-team/ionic-native/issues/459)) ([14e41a3](https://github.com/ionic-team/ionic-native/commit/14e41a3))
* **file:** initialize writeFile options ([#468](https://github.com/ionic-team/ionic-native/issues/468)) ([16628a4](https://github.com/ionic-team/ionic-native/commit/16628a4))
* **nativeaudio:** fix plugin reference ([2510c5f](https://github.com/ionic-team/ionic-native/commit/2510c5f))
* add the reject function at the expected errorIndex position in the args array ([#436](https://github.com/ionic-team/ionic-native/issues/436)) ([4e87ac7](https://github.com/ionic-team/ionic-native/commit/4e87ac7))
### Features
@@ -1869,12 +2344,12 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Bug Fixes
* remove unnecessary decorator ([#257](https://github.com/ionic-team/ionic-native/issues/257)) ([25fab64](https://github.com/ionic-team/ionic-native/commit/25fab64))
* **actionsheet:** add missing optional parameter for hide function ([#262](https://github.com/ionic-team/ionic-native/issues/262)) ([644e999](https://github.com/ionic-team/ionic-native/commit/644e999))
* **background-geolocation:** fix pluginref again ([b8a5133](https://github.com/ionic-team/ionic-native/commit/b8a5133))
* **geolocation:** fix plugin reference ([4f0cd24](https://github.com/ionic-team/ionic-native/commit/4f0cd24)), closes [#258](https://github.com/ionic-team/ionic-native/issues/258)
* **googlemaps:** use correct methods for addGroundOverlay and addKmlOverlay ([#268](https://github.com/ionic-team/ionic-native/issues/268)) ([b8be1de](https://github.com/ionic-team/ionic-native/commit/b8be1de))
* **socialsharing:** all methods return Promises now ([e150224](https://github.com/ionic-team/ionic-native/commit/e150224)), closes [#275](https://github.com/ionic-team/ionic-native/issues/275)
* remove unnecessary decorator ([#257](https://github.com/ionic-team/ionic-native/issues/257)) ([25fab64](https://github.com/ionic-team/ionic-native/commit/25fab64))
### Features
@@ -2010,8 +2485,8 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
* **datepicker:** datepicker options are optional ([c3cfd14](https://github.com/ionic-team/ionic-native/commit/c3cfd14))
* **datepicker:** dates are Dates ([ce6adcc](https://github.com/ionic-team/ionic-native/commit/ce6adcc))
* **datepicker:** fix plugin functionality ([91de971](https://github.com/ionic-team/ionic-native/commit/91de971))
* **datepicker:** fix plugin functionality ([1a778e7](https://github.com/ionic-team/ionic-native/commit/1a778e7))
* **datepicker:** fix plugin functionality ([91de971](https://github.com/ionic-team/ionic-native/commit/91de971))
* **devicemotion:** combine watch and clear into one function ([d17f62d](https://github.com/ionic-team/ionic-native/commit/d17f62d))
* **geolocation:** set callback order to reverse on getCurrentPosition ([1fac387](https://github.com/ionic-team/ionic-native/commit/1fac387))
* **imagepicker:** pluginRef ([01d7972](https://github.com/ionic-team/ionic-native/commit/01d7972))
@@ -2069,18 +2544,15 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
### Bug Fixes
* datepicker plugin, pluginref, and @Cordova wrapper ([499ead3](https://github.com/ionic-team/ionic-native/commit/499ead3))
* **calendar:** make getCalendarOptions sync ([78c5408](https://github.com/ionic-team/ionic-native/commit/78c5408))
* **geolocation:** call correct clearFunction ([9e86a40](https://github.com/ionic-team/ionic-native/commit/9e86a40))
* **plugin:** return originalMethod return value ([240f0f8](https://github.com/ionic-team/ionic-native/commit/240f0f8))
* **plugin:** use call for id based clearFunction ([c2fdf39](https://github.com/ionic-team/ionic-native/commit/c2fdf39))
* datepicker plugin, pluginref, and @Cordova wrapper ([499ead3](https://github.com/ionic-team/ionic-native/commit/499ead3))
### Features
* **DatePicker:** Added DatePicker ([5afa58f](https://github.com/ionic-team/ionic-native/commit/5afa58f))
* **plugin:** add sync option to @Cordova for sync functions ([17e3827](https://github.com/ionic-team/ionic-native/commit/17e3827))
* **plugin:** call clearFunction with original fn args ([8f27fc9](https://github.com/ionic-team/ionic-native/commit/8f27fc9))
* add app version plugin ([20cb01f](https://github.com/ionic-team/ionic-native/commit/20cb01f))
* add app version plugin ([8b78521](https://github.com/ionic-team/ionic-native/commit/8b78521))
* add apprate ([0dd4fec](https://github.com/ionic-team/ionic-native/commit/0dd4fec))
@@ -2088,6 +2560,9 @@ renamed to `FileTransfer`. Also, `TransferObject` class has been renamed to `Fil
* add badge plugin ([3088df4](https://github.com/ionic-team/ionic-native/commit/3088df4))
* add clipboard plugin ([0b6cca7](https://github.com/ionic-team/ionic-native/commit/0b6cca7))
* add clipboard plugin ([fa4c266](https://github.com/ionic-team/ionic-native/commit/fa4c266))
* **DatePicker:** Added DatePicker ([5afa58f](https://github.com/ionic-team/ionic-native/commit/5afa58f))
* **plugin:** add sync option to @Cordova for sync functions ([17e3827](https://github.com/ionic-team/ionic-native/commit/17e3827))
* **plugin:** call clearFunction with original fn args ([8f27fc9](https://github.com/ionic-team/ionic-native/commit/8f27fc9))

View File

@@ -88,8 +88,6 @@ It's just a stub. The `return` is only there to keep the TypeScript type-checker
By default, the `@Cordova` decorator wraps the plugin callbacks in a Promise that resolves when the success callback is called and rejects when the error callback is called. It also ensures that Cordova and the underlying plugin are available, and prints helpful diagnostics if they aren't.
You'll also notice that `getCurrentPosition` is a static method. That's because the plugin class is just a utility class to call the underlying Cordova plugin methods, it's not an instance and has no state.
Next, let's look at the `watchPosition` method.
```

View File

@@ -11,13 +11,11 @@ Ionic Native wraps plugin callbacks in a Promise or Observable, providing a comm
Run following command to install Ionic Native in your project.
```bash
npm install @ionic-native/core@beta --save
npm install @ionic-native/core --save
```
You also need to install the Ionic Native package for each plugin you want to add. Please see the [Ionic Native documentation](https://ionicframework.com/docs/native/) for complete instructions on how to add and use the plugins.
**NOTE: to use Ionic Native v5, you must use the `@beta` tag when installing any NPM package.**
## Documentation
For the full Ionic Native documentation, please visit [https://ionicframework.com/docs/native/](https://ionicframework.com/docs/native/).

View File

@@ -3,7 +3,7 @@ jobs:
build:
working_directory: ~/ionic-native/
docker:
- image: node:8
- image: node:12
steps:
- checkout
- restore_cache:
@@ -22,7 +22,7 @@ jobs:
key: node_modules_{{ checksum "package.json" }}
- run:
name: Install node modules
command: npm i
command: npm ci
- save_cache:
key: node_modules_{{ checksum "package.json" }}
paths:

View File

@@ -32,9 +32,7 @@ gulp.task('lint', () => {
gulp.task('plugin:create', () => {
if (flags.n && flags.n !== '') {
const src = flags.m
? './scripts/templates/wrap-min.tmpl'
: './scripts/templates/wrap.tmpl',
const src = flags.m ? './scripts/templates/wrap-min.tmpl' : './scripts/templates/wrap.tmpl',
pluginName = flags.n,
spaced = pluginName.replace(/(?!^)([A-Z])/g, ' $1'),
kebabCase = _.kebabCase(pluginName);

16875
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "ionic-native",
"version": "5.0.0-beta.24",
"version": "5.13.0",
"description": "Native plugin wrappers for Cordova and Ionic with TypeScript, ES6+, Promise and Observable support",
"homepage": "https://ionicframework.com/",
"author": "Ionic Team <hi@ionic.io> (https://ionic.io)",
@@ -17,49 +17,51 @@
"npmpub": "ts-node -P scripts/tsconfig.json scripts/tasks/publish",
"lint": "gulp lint",
"readmes": "gulp readmes",
"docs-json": "ts-node -P scripts/tsconfig.json scripts/docs-json",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
"postchangelog": "git commit -am \"chore(): update changelog\"",
"shipit": "npm run build && npm run readmes && npm run npmpub"
},
"devDependencies": {
"@angular/common": "^7.2.1",
"@angular/compiler": "^7.2.1",
"@angular/compiler-cli": "^7.2.1",
"@angular/core": "^7.2.1",
"@angular/common": "^8.2.4",
"@angular/compiler": "^8.2.4",
"@angular/compiler-cli": "^8.2.4",
"@angular/core": "^8.2.4",
"@types/cordova": "0.0.34",
"@types/fs-extra": "^5.0.4",
"@types/jest": "^23.3.13",
"@types/lodash": "^4.14.120",
"@types/node": "^10.12.18",
"@types/fs-extra": "^8.0.0",
"@types/jest": "^24.0.18",
"@types/lodash": "^4.14.138",
"@types/node": "^12.7.3",
"@types/rimraf": "^2.0.2",
"@types/webpack": "^4.4.23",
"ajv": "^6.7.0",
"async-promise-queue": "^1.0.4",
"conventional-changelog-cli": "^2.0.11",
"cz-conventional-changelog": "^2.1.0",
"dgeni": "^0.4.11",
"@types/webpack": "^4.39.1",
"ajv": "^6.10.2",
"async-promise-queue": "^1.0.5",
"conventional-changelog-cli": "^2.0.23",
"cz-conventional-changelog": "^3.0.2",
"dgeni": "^0.4.12",
"dgeni-packages": "0.16.10",
"fs-extra": "^7.0.1",
"gulp": "3.9.1",
"fs-extra": "^8.1.0",
"gulp": "^4.0.2",
"gulp-rename": "^1.4.0",
"gulp-replace": "^1.0.0",
"gulp-tslint": "^8.1.3",
"jest": "^23.6.0",
"lodash": "^4.17.11",
"gulp-tslint": "^8.1.4",
"jest": "^24.9.0",
"lodash": "^4.17.15",
"minimist": "1.2.0",
"natives": "^1.1.6",
"rimraf": "^2.6.3",
"rxjs": "^6.3.3",
"ts-jest": "^23.10.5",
"ts-node": "^7.0.1",
"tslint": "^5.12.1",
"rimraf": "^3.0.0",
"rxjs": "^6.5.2",
"ts-jest": "^24.0.2",
"ts-node": "^8.3.0",
"tslint": "^5.19.0",
"tslint-ionic-rules": "0.0.21",
"typescript": "3.2.4",
"uglifyjs-webpack-plugin": "^2.1.1",
"typedoc": "^0.15.0",
"typescript": "~3.5.3",
"uglifyjs-webpack-plugin": "^2.2.0",
"unminified-webpack-plugin": "^2.0.0",
"webpack": "^4.28.4",
"winston": "^3.1.0",
"zone.js": "^0.8.26"
"webpack": "^4.39.3",
"winston": "^3.2.1",
"zone.js": "^0.9.1"
},
"jest": {
"transform": {

View File

@@ -37,10 +37,15 @@ function transformImports(file: ts.SourceFile, ctx: ts.TransformationContext, ng
decorators.forEach(d => methods = getMethodsForDecorator(d).concat(methods));
const methodElements = methods.map(m => ts.createIdentifier(m));
const methodNames = methodElements.map((el) => el.escapedText);
importStatement.importClause.namedBindings.elements = [
ts.createIdentifier('IonicNativePlugin'),
...methods.map(m => ts.createIdentifier(m)),
...importStatement.importClause.namedBindings.elements.filter(el => keep.indexOf(el.name.text) !== -1)
...methodElements,
...importStatement.importClause.namedBindings.elements.filter(
el => keep.indexOf(el.name.text) !== -1 && methodNames.indexOf(el.name.text) === -1
)
];
if (ngcBuild) {

101
scripts/docs-json/index.ts Normal file
View File

@@ -0,0 +1,101 @@
import * as fs from 'fs-extra';
import { Application } from 'typedoc';
import { basename, dirname, resolve } from 'path';
import { runInNewContext } from 'vm';
interface Plugin {
packageName: string;
displayName: string;
description: string;
platforms: string[];
usage: string;
repo: string;
installVariables: string[];
cordovaPlugin: {
name: string;
};
}
const rootDir = resolve(__dirname, '../..');
const typedocTmp = resolve(__dirname, 'typedoc.tmp.json');
const pluginsDir = resolve(rootDir, 'src/@ionic-native/plugins');
const typedoc = new Application({
mode: 'modules',
tsconfig: resolve(rootDir, 'tsconfig.json'),
ignoreCompilerErrors: true
});
run(pluginsDir);
async function run(pluginsDir: string) {
const typedocData = await generateTypedoc(pluginsDir);
const modules = typedocData.children.filter(isModule);
const plugins = modules.filter(hasPlugin).map(processPlugin);
await fs.outputJson(resolve(__dirname, 'plugins.json'), plugins, {
spaces: 2
});
}
async function generateTypedoc(root: string, outputPath = typedocTmp) {
const pluginDirs = await fs.readdir(root);
const paths = pluginDirs.map(dir => resolve(root, dir, 'index.ts'));
typedoc.generateJson(paths, outputPath);
return fs.readJson(outputPath);
}
function processPlugin(pluginModule): Plugin {
const pluginClass = pluginModule.children.find(isPlugin);
const decorator = getPluginDecorator(pluginClass);
const packageName = `@ionic-native/${basename(dirname(pluginModule.originalName))}`;
const displayName = getTag(pluginClass, 'name');
const usage = getTag(pluginClass, 'usage');
const description = getTag(pluginClass, 'description');
return {
packageName,
displayName,
description,
usage,
platforms: decorator.platforms,
repo: decorator.repo,
installVariables: decorator.installVariables,
cordovaPlugin: {
name: decorator.plugin
}
};
}
/**
* Typedoc only gives us the Plugin decorator internals
* as a string. So, rather than try to parse that with a RegExp,
* we evaluate it using Node's vm module.
*/
const getPluginDecorator = (child: any) => {
if (isPlugin(child)) {
const decorator = child.decorators.find(d => d.name === 'Plugin');
return runInNewContext(`(${decorator.arguments.config})`);
}
};
const getTag = (child: any, tagName: string): string => {
if (hasTags(child)) {
const tag = child.comment.tags.find(t => t.tag === tagName);
if (tag) {
return tag.text;
}
}
};
const isModule = (child: any): boolean =>
child.kind === 1;
const isClass = (child: any): boolean =>
child.kind === 128;
const isPlugin = (child: any): boolean =>
isClass(child) && hasTags(child) && Array.isArray(child.decorators) && child.decorators.some(d => d.name === 'Plugin');
const hasPlugin = (child: any): boolean =>
child.children.some(isPlugin);
const hasTags = (child: any): boolean =>
child.comment && Array.isArray(child.comment.tags);

View File

@@ -0,0 +1,3 @@
# docs-json
This script reads and generates [typedoc](https://github.com/TypeStrong/typedoc) data for each of the plugins in `src/@ionic-native/plugins`. That data is then formatted and output as `plugins.json` in this directory.

View File

@@ -187,7 +187,7 @@ docType: "<$ doc.docType $>"
<ol class="installation">
<li>Install the Cordova and Ionic Native plugins:<br>
<pre><code class="nohighlight">$ <@ if prop.install @><$ prop.install | replace('<', '&lt;').replace('>', '&gt;') $><@ else @>ionic cordova plugin add <$ prop.plugin $><@ endif @>
$ npm install @ionic-native/<$ doc.npmId $>@beta
$ npm install @ionic-native/<$ doc.npmId $>
</code></pre>
</li>
<li><a href="https://ionicframework.com/docs/native/#Add_Plugins_to_Your_App_Module">Add this plugin to your app's module</a></li>

View File

@@ -17,7 +17,7 @@
```
$ <@ if prop.install @><$ prop.install $><@ else @>ionic cordova plugin add <$ prop.plugin $><@ endif @>
$ npm install @ionic-native/<$ doc.npmId $>@beta
$ npm install @ionic-native/<$ doc.npmId $>
```
## [Usage Documentation](https://ionicframework.com/docs/native/<$ doc.fileInfo.relativePath|replace('/home/ubuntu/ionic-native/', '')|replace('//','/')|replace('index.ts','')|replace('src/@ionic-native/plugins/','') $>)

View File

@@ -6,35 +6,27 @@ const config = require('./config.json'),
Dgeni = require('dgeni');
module.exports = gulp => {
gulp.task('docs', [], () => {
gulp.task('docs', () => {
try {
const ionicPackage = require('./dgeni/dgeni-config')(
projectPackage.version
),
const ionicPackage = require('./dgeni/dgeni-config')(projectPackage.version),
dgeni = new Dgeni([ionicPackage]);
return dgeni
.generate()
.then(docs => console.log(docs.length + ' docs generated'));
return dgeni.generate().then(docs => console.log(docs.length + ' docs generated'));
} catch (err) {
console.log(err.stack);
}
});
gulp.task('readmes', [], function() {
gulp.task('readmes', () => {
fs.copySync(
path.resolve(__dirname, '..', '..', 'README.md'),
path.resolve(__dirname, '..', '..', config.pluginDir, 'core', 'README.md')
);
try {
const ionicPackage = require('./dgeni/dgeni-readmes-config')(
projectPackage.version
),
const ionicPackage = require('./dgeni/dgeni-readmes-config')(projectPackage.version),
dgeni = new Dgeni([ionicPackage]);
return dgeni
.generate()
.then(docs => console.log(docs.length + ' README files generated'));
return dgeni.generate().then(docs => console.log(docs.length + ' README files generated'));
} catch (err) {
console.log(err.stack);
}

View File

@@ -34,4 +34,4 @@ function run {
}
source $(dirname $0)/../utils.inc.sh
source $(dirname $0)/utils.inc.sh

View File

@@ -47,4 +47,4 @@ function run {
fi
}
source $(dirname $0)/../utils.inc.sh
source $(dirname $0)/utils.inc.sh

View File

@@ -1,244 +1,241 @@
# bash utils from angularjs
# This file provides:
# - a default control flow
# * initializes the environment
# * call a function in your script based on the arguments
# - named argument parsing and automatic generation of the "usage" for your script
# - utility functions
#
# Usage:
# - define the variable ARGS_DEF (see below) with the arguments for your script
# - include this file using `source utils.inc` at the end of your script.
#
# Default control flow:
# 0. Set the current directory to the directory of the script. By this
# the script can be called from anywhere.
# 1. Parse the named arguments
# 2. [Redacted]
# 3. If the parameter "verbose" is set, the `-x` flag will be set in bash.
# 4. The function "init" will be called if it exists
# 5. If the parameter "action" is set, it will call the function with the name of that parameter.
# Otherwise the function "run" will be called.
#
# Named Argument Parsing:
# - The variable ARGS_DEF defines the valid command arguments
# * Required args syntax: --paramName=paramRegex
# * Optional args syntax: [--paramName=paramRegex]
# * e.g. ARG_DEFS=("--required_param=(.+)" "[--optional_param=(.+)]")
# - Checks that:
# * all arguments match to an entry in ARGS_DEF
# * all required arguments are present
# * all arguments match their regex
# - Afterwards, every paramter value will be stored in a variable
# with the name of the parameter in upper case (with dash converted to underscore).
#
# Special arguments that are always available:
# - "--action=.*": This parameter will be used to dispatch to a function with that name when the
# script is started
# - "--verbose=true": This will set the `-x` flag in bash so that all calls will be logged
#
# Utility functions:
# - readJsonProp
# - replaceJsonProp
# - resolveDir
# - getVar
# - serVar
# - isFunction
# always stop on errors
set -e
function usage {
echo "Usage: ${0} ${ARG_DEFS[@]}"
exit 1
}
function parseArgs {
local REQUIRED_ARG_NAMES=()
# -- helper functions
function varName {
# everything to upper case and dash to underscore
echo ${1//-/_} | tr '[:lower:]' '[:upper:]'
}
function readArgDefs {
local ARG_DEF
local AD_OPTIONAL
local AD_NAME
local AD_RE
# -- helper functions
function parseArgDef {
local ARG_DEF_REGEX="(\[?)--([^=]+)=(.*)"
if [[ ! $1 =~ $ARG_DEF_REGEX ]]; then
echo "Internal error: arg def has wrong format: $ARG_DEF"
exit 1
fi
AD_OPTIONAL="${BASH_REMATCH[1]}"
AD_NAME="${BASH_REMATCH[2]}"
AD_RE="${BASH_REMATCH[3]}"
if [[ $AD_OPTIONAL ]]; then
# Remove last bracket for optional args.
# Can't put this into the ARG_DEF_REGEX somehow...
AD_RE=${AD_RE%?}
fi
}
# -- run
for ARG_DEF in "${ARG_DEFS[@]}"
do
parseArgDef $ARG_DEF
local AD_NAME_UPPER=$(varName $AD_NAME)
setVar "${AD_NAME_UPPER}_OPTIONAL" "$AD_OPTIONAL"
setVar "${AD_NAME_UPPER}_RE" "$AD_RE"
if [[ ! $AD_OPTIONAL ]]; then
REQUIRED_ARG_NAMES+=($AD_NAME)
fi
done
}
function readAndValidateArgs {
local ARG_NAME
local ARG_VALUE
local ARG_NAME_UPPER
# -- helper functions
function parseArg {
local ARG_REGEX="--([^=]+)=?(.*)"
if [[ ! $1 =~ $ARG_REGEX ]]; then
echo "Can't parse argument $i"
usage
fi
ARG_NAME="${BASH_REMATCH[1]}"
ARG_VALUE="${BASH_REMATCH[2]}"
ARG_NAME_UPPER=$(varName $ARG_NAME)
}
function validateArg {
local AD_RE=$(getVar ${ARG_NAME_UPPER}_RE)
if [[ ! $AD_RE ]]; then
echo "Unknown option: $ARG_NAME"
usage
fi
if [[ ! $ARG_VALUE =~ ^${AD_RE}$ ]]; then
echo "Wrong format: $ARG_NAME"
usage;
fi
# validate that the "action" option points to a valid function
if [[ $ARG_NAME == "action" ]] && ! isFunction $ARG_VALUE; then
echo "No action $ARG_VALUE defined in this script"
usage;
fi
}
# -- run
for i in "$@"
do
parseArg $i
validateArg
setVar "${ARG_NAME_UPPER}" "$ARG_VALUE"
done
}
function checkMissingArgs {
local ARG_NAME
for ARG_NAME in "${REQUIRED_ARG_NAMES[@]}"
do
ARG_VALUE=$(getVar $(varName $ARG_NAME))
if [[ ! $ARG_VALUE ]]; then
echo "Missing: $ARG_NAME"
usage;
fi
done
}
# -- run
readArgDefs
readAndValidateArgs "$@"
checkMissingArgs
}
# getVar(varName)
function getVar {
echo ${!1}
}
# setVar(varName, varValue)
function setVar {
eval "$1=\"$2\""
}
# isFunction(name)
# - to be used in an if, so return 0 if successful and 1 if not!
function isFunction {
if [[ $(type -t $1) == "function" ]]; then
return 0
else
return 1
fi
}
# readJsonProp(jsonFile, property)
# - restriction: property needs to be on an own line!
function readJsonProp {
echo $(sed -En 's/.*"'$2'"[ ]*:[ ]*"(.*)".*/\1/p' $1)
}
# replaceJsonProp(jsonFile, property, newValue)
# - note: propertyRegex will be automatically placed into a
# capturing group! -> all other groups start at index 2!
function replaceJsonProp {
replaceInFile $1 "\"$2\": \".*?\"" "\"$2\": \"$3\""
}
# replaceInFile(file, findPattern, replacePattern)
function replaceInFile {
perl -pi -e "s/$2/$3/g;" $1
}
# resolveDir(relativeDir)
# - resolves a directory relative to the current script
function resolveDir {
echo $(cd $SCRIPT_DIR; cd $1; pwd)
}
function main {
# normalize the working dir to the directory of the script
cd $(dirname $0);SCRIPT_DIR=$(pwd)
ARG_DEFS+=("[--verbose=(true|false)]")
parseArgs "$@"
# --verbose argument
if [[ $VERBOSE == "true" ]]; then
set -x
fi
if isFunction init; then
init "$@"
fi
# jump to the function denoted by the --action argument,
# otherwise call the "run" function
if [[ $ACTION ]]; then
$ACTION "$@"
else
run "$@"
fi
}
main "$@"
# bash utils from angularjs
# This file provides:
# - a default control flow
# * initializes the environment
# * call a function in your script based on the arguments
# - named argument parsing and automatic generation of the "usage" for your script
# - utility functions
#
# Usage:
# - define the variable ARGS_DEF (see below) with the arguments for your script
# - include this file using `source utils.inc` at the end of your script.
#
# Default control flow:
# 0. Set the current directory to the directory of the script. By this
# the script can be called from anywhere.
# 1. Parse the named arguments
# 2. [Redacted]
# 3. If the parameter "verbose" is set, the `-x` flag will be set in bash.
# 4. The function "init" will be called if it exists
# 5. If the parameter "action" is set, it will call the function with the name of that parameter.
# Otherwise the function "run" will be called.
#
# Named Argument Parsing:
# - The variable ARGS_DEF defines the valid command arguments
# * Required args syntax: --paramName=paramRegex
# * Optional args syntax: [--paramName=paramRegex]
# * e.g. ARG_DEFS=("--required_param=(.+)" "[--optional_param=(.+)]")
# - Checks that:
# * all arguments match to an entry in ARGS_DEF
# * all required arguments are present
# * all arguments match their regex
# - Afterwards, every paramter value will be stored in a variable
# with the name of the parameter in upper case (with dash converted to underscore).
#
# Special arguments that are always available:
# - "--action=.*": This parameter will be used to dispatch to a function with that name when the
# script is started
# - "--verbose=true": This will set the `-x` flag in bash so that all calls will be logged
#
# Utility functions:
# - readJsonProp
# - replaceJsonProp
# - resolveDir
# - getVar
# - serVar
# - isFunction
# always stop on errors
set -e
function usage {
echo "Usage: ${0} ${ARG_DEFS[@]}"
exit 1
}
function parseArgs {
local REQUIRED_ARG_NAMES=()
# -- helper functions
function varName {
# everything to upper case and dash to underscore
echo ${1//-/_} | tr '[:lower:]' '[:upper:]'
}
function readArgDefs {
local ARG_DEF
local AD_OPTIONAL
local AD_NAME
local AD_RE
# -- helper functions
function parseArgDef {
local ARG_DEF_REGEX="(\[?)--([^=]+)=(.*)"
if [[ ! $1 =~ $ARG_DEF_REGEX ]]; then
echo "Internal error: arg def has wrong format: $ARG_DEF"
exit 1
fi
AD_OPTIONAL="${BASH_REMATCH[1]}"
AD_NAME="${BASH_REMATCH[2]}"
AD_RE="${BASH_REMATCH[3]}"
if [[ $AD_OPTIONAL ]]; then
# Remove last bracket for optional args.
# Can't put this into the ARG_DEF_REGEX somehow...
AD_RE=${AD_RE%?}
fi
}
# -- run
for ARG_DEF in "${ARG_DEFS[@]}"
do
parseArgDef $ARG_DEF
local AD_NAME_UPPER=$(varName $AD_NAME)
setVar "${AD_NAME_UPPER}_OPTIONAL" "$AD_OPTIONAL"
setVar "${AD_NAME_UPPER}_RE" "$AD_RE"
if [[ ! $AD_OPTIONAL ]]; then
REQUIRED_ARG_NAMES+=($AD_NAME)
fi
done
}
function readAndValidateArgs {
local ARG_NAME
local ARG_VALUE
local ARG_NAME_UPPER
# -- helper functions
function parseArg {
local ARG_REGEX="--([^=]+)=?(.*)"
if [[ ! $1 =~ $ARG_REGEX ]]; then
echo "Can't parse argument $i"
usage
fi
ARG_NAME="${BASH_REMATCH[1]}"
ARG_VALUE="${BASH_REMATCH[2]}"
ARG_NAME_UPPER=$(varName $ARG_NAME)
}
function validateArg {
local AD_RE=$(getVar ${ARG_NAME_UPPER}_RE)
if [[ ! $AD_RE ]]; then
echo "Unknown option: $ARG_NAME"
usage
fi
if [[ ! $ARG_VALUE =~ ^${AD_RE}$ ]]; then
echo "Wrong format: $ARG_NAME"
usage;
fi
# validate that the "action" option points to a valid function
if [[ $ARG_NAME == "action" ]] && ! isFunction $ARG_VALUE; then
echo "No action $ARG_VALUE defined in this script"
usage;
fi
}
# -- run
for i in "$@"
do
parseArg $i
validateArg
setVar "${ARG_NAME_UPPER}" "$ARG_VALUE"
done
}
function checkMissingArgs {
local ARG_NAME
for ARG_NAME in "${REQUIRED_ARG_NAMES[@]}"
do
ARG_VALUE=$(getVar $(varName $ARG_NAME))
if [[ ! $ARG_VALUE ]]; then
echo "Missing: $ARG_NAME"
usage;
fi
done
}
# -- run
readArgDefs
readAndValidateArgs "$@"
checkMissingArgs
}
# getVar(varName)
function getVar {
echo ${!1}
}
# setVar(varName, varValue)
function setVar {
eval "$1=\"$2\""
}
# isFunction(name)
# - to be used in an if, so return 0 if successful and 1 if not!
function isFunction {
if [[ $(type -t $1) == "function" ]]; then
return 0
else
return 1
fi
}
# readJsonProp(jsonFile, property)
# - restriction: property needs to be on an own line!
function readJsonProp {
echo $(sed -En 's/.*"'$2'"[ ]*:[ ]*"(.*)".*/\1/p' $1)
}
# replaceJsonProp(jsonFile, property, newValue)
# - note: propertyRegex will be automatically placed into a
# capturing group! -> all other groups start at index 2!
function replaceJsonProp {
replaceInFile $1 "\"$2\": \".*?\"" "\"$2\": \"$3\""
}
# replaceInFile(file, findPattern, replacePattern)
function replaceInFile {
perl -pi -e "s/$2/$3/g;" $1
}
# resolveDir(relativeDir)
# - resolves a directory relative to the current script
function resolveDir {
echo $(cd $SCRIPT_DIR; cd $1; pwd)
}
function main {
# normalize the working dir to the directory of the script
cd $(dirname $0);SCRIPT_DIR=$(pwd)
ARG_DEFS+=("[--verbose=(true|false)]")
parseArgs "$@"
# --verbose argument
if [[ $VERBOSE == "true" ]]; then
set -x
fi
if isFunction init; then
init "$@"
fi
# jump to the function denoted by the --action argument,
# otherwise call the "run" function
if [[ $ACTION ]]; then
$ACTION "$@"
else
run "$@"
fi
}
main "$@"

View File

@@ -11,7 +11,7 @@ import { Logger } from '../logger';
// tslint:disable-next-line:no-var-requires
const MAIN_PACKAGE_JSON = require('../../package.json');
const VERSION = MAIN_PACKAGE_JSON.version;
const FLAGS = '--access public --tag beta';
const FLAGS = '--access public';
const PACKAGE_JSON_BASE = {
description: 'Ionic Native - Native plugins for ionic apps',
@@ -29,14 +29,15 @@ const DIST = path.resolve(ROOT, 'dist/@ionic-native');
const PACKAGES = [];
const RXJS_VERSION = '*';
const MIN_CORE_VERSION = '^5.1.0';
const RXJS_VERSION = '^5.5.0 || ^6.5.0';
const PLUGIN_PEER_DEPENDENCIES = {
'@ionic-native/core': VERSION, // TODO change this in production
'@ionic-native/core': MIN_CORE_VERSION,
rxjs: RXJS_VERSION
};
function getPackageJsonContent(name, peerDependencies = {}, dependencies = {}) {
function getPackageJsonContent(name: string, peerDependencies = {}, dependencies = {}) {
return merge(PACKAGE_JSON_BASE, {
name: '@ionic-native/' + name,
dependencies,
@@ -61,10 +62,7 @@ function prepare() {
// write plugin package.json files
PLUGIN_PATHS.forEach((pluginPath: string) => {
const pluginName = pluginPath.split(/[\/\\]+/).slice(-2)[0];
const packageJsonContents = getPackageJsonContent(
pluginName,
PLUGIN_PEER_DEPENDENCIES
);
const packageJsonContents = getPackageJsonContent(pluginName, PLUGIN_PEER_DEPENDENCIES);
const dir = path.resolve(DIST, 'plugins', pluginName);
writePackageJson(packageJsonContents, dir);
@@ -74,28 +72,27 @@ function prepare() {
async function publish(ignoreErrors = false) {
Logger.profile('Publishing');
// upload 1 package per CPU thread at a time
const worker = Queue.async.asyncify((pkg: any) =>
new Promise<any>((resolve, reject) => {
exec(`npm publish ${pkg} ${FLAGS}`, (err, stdout) => {
if (stdout) {
Logger.verbose(stdout.trim());
resolve(stdout);
}
if (err) {
if (!ignoreErrors) {
if (
err.message.includes(
'You cannot publish over the previously published version'
)
) {
Logger.verbose('Ignoring duplicate version error.');
return resolve();
}
reject(err);
const worker = Queue.async.asyncify(
(pkg: any) =>
new Promise<any>((resolve, reject) => {
exec(`npm publish ${pkg} ${FLAGS}`, (err, stdout) => {
if (stdout) {
Logger.verbose(stdout.trim());
resolve(stdout);
}
}
});
})
if (err) {
if (!ignoreErrors) {
if (
err.message.includes('You cannot publish over the previously published version')
) {
Logger.verbose('Ignoring duplicate version error.');
return resolve();
}
reject(err);
}
}
});
})
);
try {

View File

@@ -1,25 +1,26 @@
export function checkReady() {
const DEVICE_READY_TIMEOUT = 5000;
if (typeof process === 'undefined') {
const win: any = typeof window !== 'undefined' ? window : {};
const DEVICE_READY_TIMEOUT = 5000;
// To help developers using cordova, we listen for the device ready event and
// log an error if it didn't fire in a reasonable amount of time. Generally,
// when this happens, developers should remove and reinstall plugins, since
// an inconsistent plugin is often the culprit.
const before = Date.now();
// To help developers using cordova, we listen for the device ready event and
// log an error if it didn't fire in a reasonable amount of time. Generally,
// when this happens, developers should remove and reinstall plugins, since
// an inconsistent plugin is often the culprit.
const before = Date.now();
let didFireReady = false;
document.addEventListener('deviceready', () => {
console.log(
`Ionic Native: deviceready event fired after ${Date.now() - before} ms`
);
didFireReady = true;
});
let didFireReady = false;
win.document.addEventListener('deviceready', () => {
console.log(`Ionic Native: deviceready event fired after ${Date.now() - before} ms`);
didFireReady = true;
});
setTimeout(() => {
if (!didFireReady && window.cordova) {
console.warn(
`Ionic Native: deviceready did not fire within ${DEVICE_READY_TIMEOUT}ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.`
);
}
}, DEVICE_READY_TIMEOUT);
setTimeout(() => {
if (!didFireReady && win.cordova) {
console.warn(
`Ionic Native: deviceready did not fire within ${DEVICE_READY_TIMEOUT}ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them.`
);
}
}, DEVICE_READY_TIMEOUT);
}
}

View File

@@ -30,13 +30,9 @@ class MockInstancePluginObject {
class MockCordovaPlugin {
static ping = jest.fn((arg: string) => 'pong');
static pingAsync = jest.fn(
(arg: string, success: Function, error: Function) => success('pong')
);
static pingAsync = jest.fn((arg: string, success: Function, error: Function) => success('pong'));
ping = jest.fn((arg: string) => 'pong');
pingAsync = jest.fn((arg: string, success: Function, error: Function) =>
success('pong')
);
pingAsync = jest.fn((arg: string, success: Function, error: Function) => success('pong'));
}
describe('Common decorator functions', () => {
@@ -73,12 +69,8 @@ describe('Common decorator functions', () => {
test('original method should have received args', () => {
expect(MockCordovaPlugin.pingAsync.mock.calls[0][0]).toBe('pingpong');
expect(typeof MockCordovaPlugin.pingAsync.mock.calls[0][1]).toBe(
'function'
);
expect(typeof MockCordovaPlugin.pingAsync.mock.calls[0][2]).toBe(
'function'
);
expect(typeof MockCordovaPlugin.pingAsync.mock.calls[0][1]).toBe('function');
expect(typeof MockCordovaPlugin.pingAsync.mock.calls[0][2]).toBe('function');
});
});

View File

@@ -1,4 +1,4 @@
import { Observable, fromEvent } from 'rxjs';
import { fromEvent, Observable } from 'rxjs';
import { CordovaOptions } from './interfaces';
@@ -7,9 +7,7 @@ declare const window: any;
export const ERR_CORDOVA_NOT_AVAILABLE = { error: 'cordova_not_available' };
export const ERR_PLUGIN_NOT_INSTALLED = { error: 'plugin_not_installed' };
export function getPromise<T>(
callback: (resolve: Function, reject?: Function) => any
): Promise<T> {
export function getPromise<T>(callback: (resolve: Function, reject?: Function) => any): Promise<T> {
const tryNativePromise = () => {
if (Promise) {
return new Promise<T>((resolve, reject) => {
@@ -22,9 +20,10 @@ export function getPromise<T>(
}
};
if (window.angular) {
if (typeof window !== 'undefined' && window.angular) {
const doc = window.document;
const injector = window.angular
.element(document.querySelector('[ng-app]') || document.body)
.element(doc.querySelector('[ng-app]') || doc.body)
.injector();
if (injector) {
const $q = injector.get('$q');
@@ -58,14 +57,7 @@ export function wrapPromise(
(...args: any[]) => reject(args)
);
} else {
pluginResult = callCordovaPlugin(
pluginObj,
methodName,
args,
opts,
resolve,
reject
);
pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts, resolve, reject);
}
rej = reject;
});
@@ -79,12 +71,7 @@ export function wrapPromise(
return p;
}
function wrapOtherPromise(
pluginObj: any,
methodName: string,
args: any[],
opts: any = {}
) {
function wrapOtherPromise(pluginObj: any, methodName: string, args: any[], opts: any = {}) {
return getPromise((resolve: Function, reject: Function) => {
const pluginResult = callCordovaPlugin(pluginObj, methodName, args, opts);
if (pluginResult) {
@@ -99,12 +86,7 @@ function wrapOtherPromise(
});
}
function wrapObservable(
pluginObj: any,
methodName: string,
args: any[],
opts: any = {}
) {
function wrapObservable(pluginObj: any, methodName: string, args: any[], opts: any = {}) {
return new Observable(observer => {
let pluginResult;
@@ -162,12 +144,12 @@ function wrapObservable(
/**
* Wrap the event with an observable
* @private
* @param event even name
* @param event event name
* @param element The element to attach the event listener to
* @returns {Observable}
*/
function wrapEventObservable(event: string, element: any): Observable<any> {
element = element ? get(window, element) : window;
element = (typeof window !== 'undefined' && element) ? get(window, element) : element || typeof window !== 'undefined' || {};
return fromEvent(element, event);
}
@@ -203,11 +185,8 @@ export function checkAvailability(
pluginInstance = getPlugin(pluginRef);
if (
!pluginInstance ||
(!!methodName && typeof pluginInstance[methodName] === 'undefined')
) {
if (!window.cordova) {
if (!pluginInstance || (!!methodName && typeof pluginInstance[methodName] === 'undefined')) {
if (typeof window === 'undefined' || !window.cordova) {
cordovaWarn(pluginName, methodName);
return ERR_CORDOVA_NOT_AVAILABLE;
}
@@ -223,23 +202,14 @@ export function checkAvailability(
* Checks if _objectInstance exists and has the method/property
* @private
*/
export function instanceAvailability(
pluginObj: any,
methodName?: string
): boolean {
export function instanceAvailability(pluginObj: any, methodName?: string): boolean {
return (
pluginObj._objectInstance &&
(!methodName ||
typeof pluginObj._objectInstance[methodName] !== 'undefined')
(!methodName || typeof pluginObj._objectInstance[methodName] !== 'undefined')
);
}
export function setIndex(
args: any[],
opts: any = {},
resolve?: Function,
reject?: Function
): any {
export function setIndex(args: any[], opts: any = {}, resolve?: Function, reject?: Function): any {
// ignore resolve and reject in case sync
if (opts.sync) {
return args;
@@ -258,19 +228,12 @@ export function setIndex(
resolve(result);
}
});
} else if (
opts.callbackStyle === 'object' &&
opts.successName &&
opts.errorName
) {
} else if (opts.callbackStyle === 'object' && opts.successName && opts.errorName) {
const obj: any = {};
obj[opts.successName] = resolve;
obj[opts.errorName] = reject;
args.push(obj);
} else if (
typeof opts.successIndex !== 'undefined' ||
typeof opts.errorIndex !== 'undefined'
) {
} else if (typeof opts.successIndex !== 'undefined' || typeof opts.errorIndex !== 'undefined') {
const setSuccessIndex = () => {
// If we've specified a success/error index
if (opts.successIndex > args.length) {
@@ -339,15 +302,15 @@ export function callInstance(
args = setIndex(args, opts, resolve, reject);
if (instanceAvailability(pluginObj, methodName)) {
return pluginObj._objectInstance[methodName].apply(
pluginObj._objectInstance,
args
);
return pluginObj._objectInstance[methodName].apply(pluginObj._objectInstance, args);
}
}
export function getPlugin(pluginRef: string): any {
return get(window, pluginRef);
if (typeof window !== 'undefined') {
return get(window, pluginRef);
}
return null;
}
export function get(element: Element | Window, path: string) {
@@ -362,11 +325,7 @@ export function get(element: Element | Window, path: string) {
return obj;
}
export function pluginWarn(
pluginName: string,
plugin?: string,
method?: string
): void {
export function pluginWarn(pluginName: string, plugin?: string, method?: string): void {
if (method) {
console.warn(
'Native: tried calling ' +
@@ -378,14 +337,10 @@ export function pluginWarn(
' plugin is not installed.'
);
} else {
console.warn(
`Native: tried accessing the ${pluginName} plugin but it's not installed.`
);
console.warn(`Native: tried accessing the ${pluginName} plugin but it's not installed.`);
}
if (plugin) {
console.warn(
`Install the ${pluginName} plugin: 'ionic cordova plugin add ${plugin}'`
);
console.warn(`Install the ${pluginName} plugin: 'ionic cordova plugin add ${plugin}'`);
}
}
@@ -395,20 +350,22 @@ export function pluginWarn(
* @param method
*/
export function cordovaWarn(pluginName: string, method?: string): void {
if (method) {
console.warn(
'Native: tried calling ' +
pluginName +
'.' +
method +
', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'
);
} else {
console.warn(
'Native: tried accessing the ' +
pluginName +
' plugin but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'
);
if (typeof process === 'undefined') {
if (method) {
console.warn(
'Native: tried calling ' +
pluginName +
'.' +
method +
', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'
);
} else {
console.warn(
'Native: tried accessing the ' +
pluginName +
' plugin but Cordova is not available. Make sure to include cordova.js or run in a device/simulator'
);
}
}
}
@@ -419,11 +376,7 @@ export type WrapFn = (...args: any[]) => any;
/**
* @private
*/
export const wrap = (
pluginObj: any,
methodName: string,
opts: CordovaOptions = {}
): WrapFn => {
export const wrap = (pluginObj: any, methodName: string, opts: CordovaOptions = {}): WrapFn => {
return (...args: any[]) => {
if (opts.sync) {
// Sync doesn't wrap the plugin with a promise or observable, it returns the result as-is
@@ -443,11 +396,7 @@ export const wrap = (
/**
* @private
*/
export function wrapInstance(
pluginObj: any,
methodName: string,
opts: any = {}
): Function {
export function wrapInstance(pluginObj: any, methodName: string, opts: any = {}): Function {
return (...args: any[]) => {
if (opts.sync) {
return callInstance(pluginObj, methodName, args, opts);
@@ -515,14 +464,7 @@ export function wrapInstance(
(...args: any[]) => reject(args)
);
} else {
result = callInstance(
pluginObj,
methodName,
args,
opts,
resolve,
reject
);
result = callInstance(pluginObj, methodName, args, opts, resolve, reject);
}
if (result && result.then) {
result.then(resolve, reject);
@@ -543,14 +485,7 @@ export function wrapInstance(
(...args: any[]) => reject(args)
);
} else {
pluginResult = callInstance(
pluginObj,
methodName,
args,
opts,
resolve,
reject
);
pluginResult = callInstance(pluginObj, methodName, args, opts, resolve, reject);
}
rej = reject;
});

View File

@@ -1,4 +1,5 @@
import { Observable, Observer } from 'rxjs';
import { checkAvailability, getPlugin } from './common';
function overrideFunction(pluginObj: any, methodName: string): Observable<any> {

View File

@@ -1,7 +1,12 @@
import { wrapInstance } from './common';
import { CordovaOptions } from './interfaces';
export function cordovaInstance(pluginObj: any, methodName: string, config: CordovaOptions, args: IArguments | any[]) {
export function cordovaInstance(
pluginObj: any,
methodName: string,
config: CordovaOptions,
args: IArguments | any[]
) {
args = Array.from(args);
return wrapInstance(pluginObj, methodName, config).apply(this, args);
}

View File

@@ -1,6 +1,11 @@
import { wrap } from './common';
import { CordovaOptions } from './interfaces';
export function cordova(pluginObj: any, methodName: string, config: CordovaOptions, args: IArguments | any[]) {
export function cordova(
pluginObj: any,
methodName: string,
config: CordovaOptions,
args: IArguments | any[]
) {
return wrap(pluginObj, methodName, config).apply(this, args);
}

View File

@@ -18,31 +18,45 @@ export class IonicNativePlugin {
* Returns a boolean that indicates whether the plugin is installed
* @return {boolean}
*/
static installed(): boolean { return checkAvailability(this.pluginRef) === true; }
static installed(): boolean {
return checkAvailability(this.pluginRef) === true;
}
/**
* Returns the original plugin object
*/
static getPlugin(): any { return get(window, this.pluginRef); }
static getPlugin(): any {
if (typeof window !== 'undefined') {
return get(window, this.pluginRef);
}
return null;
}
/**
* Returns the plugin's name
*/
static getPluginName(): string { return this.pluginName; }
static getPluginName(): string {
return this.pluginName;
}
/**
* Returns the plugin's reference
*/
static getPluginRef(): string { return this.pluginRef; }
static getPluginRef(): string {
return this.pluginRef;
}
/**
* Returns the plugin's install name
*/
static getPluginInstallName(): string { return this.plugin; }
static getPluginInstallName(): string {
return this.plugin;
}
/**
* Returns the plugin's supported platforms
*/
static getSupportedPlatforms(): string[] { return this.platforms || []; }
static getSupportedPlatforms(): string[] {
return this.platforms || [];
}
}

View File

@@ -6,7 +6,7 @@ declare const window: any;
* creates Angular 1 services of the form $cordovaSERVICE, ex: $cordovaStatusBar.
*/
export function initAngular1(plugins: any) {
if (window.angular) {
if (typeof window !== 'undefined' && window.angular) {
const ngModule = window.angular.module('ionic.native', []);
for (const name in plugins) {

View File

@@ -7,7 +7,9 @@ export function get(element: Element | Window, path: string) {
const paths: string[] = path.split('.');
let obj: any = element;
for (let i = 0; i < paths.length; i++) {
if (!obj) { return null; }
if (!obj) {
return null;
}
obj = obj[paths[i]];
}
return obj;
@@ -17,9 +19,8 @@ export function get(element: Element | Window, path: string) {
* @private
*/
export function getPromise(callback: Function = () => {}): Promise<any> {
const tryNativePromise = () => {
if (window.Promise) {
if (typeof Promise === 'function' || (typeof window !== 'undefined' && window.Promise)) {
return new Promise<any>((resolve, reject) => {
callback(resolve, reject);
});

View File

@@ -9,7 +9,6 @@ declare const AbbyyRtrSdk: any;
* default setting will be used.
*/
export interface TextCaptureOptions {
/**
* The name of the license file. This file must be located in the
* www/rtr_assets/ directory in your project.
@@ -57,6 +56,11 @@ export interface TextCaptureOptions {
* the latest recognition result.
*/
isStopButtonVisible?: boolean;
/**
* Specify the orientation, possible values 'landscape' or 'portrait'.
*/
orientation?: string;
}
/**
@@ -64,7 +68,6 @@ export interface TextCaptureOptions {
* The callback you implement should parse this object and show results to user.
*/
export interface TextCaptureResult {
/**
* An array of objects representing recognized lines of text.
* These objects have the following keys:
@@ -75,7 +78,7 @@ export interface TextCaptureResult {
* · rect (string): position and size of the bounding rectangle,
* a string of 4 integers separated with whitespaces ("x y width height").
*/
textLines: { text: string, quadrangle: string, rect?: string }[];
textLines: { text: string; quadrangle: string; rect?: string }[];
/**
* Additional information. This object has the following keys:
@@ -91,10 +94,10 @@ export interface TextCaptureResult {
* the array contains language identifiers (["English", "French", "German"]).
*/
resultInfo: {
stabilityStatus: string,
userAction: string,
frameSize: string,
recognitionLanguages: string[]
stabilityStatus: string;
userAction: string;
frameSize: string;
recognitionLanguages: string[];
};
/**
@@ -114,7 +117,6 @@ export interface TextCaptureResult {
* keys: you must specify either one of them, but not both at the same time.
*/
export interface DataCaptureOptions {
/**
* The predefined data capture profile to use, for example: "MRZ".
* Note: For the list of supported documents, see Specifications — Data
@@ -134,10 +136,10 @@ export interface DataCaptureOptions {
* the regular expression that should be matched when capturing a field.
*/
customDataCaptureScenario?: {
name: string,
description: string,
recognitionLanguages: string[],
fields: { regEx: string }[]
name: string;
description: string;
recognitionLanguages: string[];
fields: { regEx: string }[];
};
/**
@@ -175,6 +177,11 @@ export interface DataCaptureOptions {
* the latest recognition result.
*/
isStopButtonVisible?: boolean;
/**
* Specify the orientation, possible values 'landscape' or 'portrait'.
*/
orientation?: string;
}
/**
@@ -182,7 +189,6 @@ export interface DataCaptureOptions {
* implement should parse this object and show results to user.
*/
export interface DataCaptureResult {
/**
* The data scheme which was applied during data capture.
* The value is an object which has two keys:
@@ -195,8 +201,8 @@ export interface DataCaptureResult {
* present in the result.
*/
dataScheme?: {
id: string,
name: string
id: string;
name: string;
};
/**
@@ -222,15 +228,15 @@ export interface DataCaptureResult {
* of 4 integers separated with whitespaces ("x y width height").
*/
dataFields: {
id: string,
name: string,
text: string,
quadrangle: string,
id: string;
name: string;
text: string;
quadrangle: string;
components: {
text: string,
quadrangle: string,
rect: string
}
text: string;
quadrangle: string;
rect: string;
};
};
/**
@@ -245,9 +251,9 @@ export interface DataCaptureResult {
* with 2 integers separated with a whitespace ("720 1280").
*/
resultInfo: {
stabilityStatus: string,
userAction: string,
frameSize: string
stabilityStatus: string;
userAction: string;
frameSize: string;
};
/**
@@ -297,7 +303,6 @@ export interface DataCaptureResult {
})
@Injectable()
export class AbbyyRTR extends IonicNativePlugin {
/**
* Opens a modal dialog with controls for the Text Capture scenario.
* @param {TextCaptureOptions} options

View File

@@ -30,7 +30,7 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
@Plugin({
pluginName: 'Alipay',
plugin: 'cordova-plugin-gubnoi-alipay',
pluginRef: 'Alipay',
pluginRef: 'cordova.plugins.alipay',
repo: 'https://github.com/jing-zhou/cordova-plugin-alipay',
install: 'ionic cordova plugin add cordova-plugin-gubnoi-alipay --variable APP_ID=your_app_id',
installVariables: ['APP_ID'],

View File

@@ -204,20 +204,20 @@ export class AndroidPermissions extends IonicNativePlugin {
/**
* Check permission
* @param {string} permission The name of the permission
* @return {Promise<any>} Returns a promise
* @return {Promise<AndroidPermissionResponse>} Returns a promise
*/
@Cordova()
checkPermission(permission: string): Promise<any> {
checkPermission(permission: string): Promise<AndroidPermissionResponse> {
return;
}
/**
* Request permission
* @param {string} permission The name of the permission to request
* @return {Promise<any>}
* @return {Promise<AndroidPermissionResponse>}
*/
@Cordova()
requestPermission(permission: string): Promise<any> {
requestPermission(permission: string): Promise<AndroidPermissionResponse> {
return;
}
@@ -234,10 +234,14 @@ export class AndroidPermissions extends IonicNativePlugin {
/**
* This function still works now, will not support in the future.
* @param {string} permission The name of the permission
* @return {Promise<any>} Returns a promise
* @return {Promise<AndroidPermissionResponse>} Returns a promise
*/
@Cordova()
hasPermission(permission: string): Promise<any> {
hasPermission(permission: string): Promise<AndroidPermissionResponse> {
return;
}
}
export interface AndroidPermissionResponse {
hasPermission: boolean;
}

View File

@@ -0,0 +1,51 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
export interface AnylineOptions {
// Valid License Key
licenseKey: string;
// Scanning options
config: any;
}
/**
* @name Anyline
* @description
* Anyline provides an easy-to-use SDK for applications to enable Optical Character Recognition (OCR) on mobile devices.
*
* @usage
* ```typescript
* import { Anyline } from '@ionic-native/anyline/ngx';
*
*
* constructor(private anyline: Anyline) { }
*
* ...
*
*
* this.anyline.scan(options)
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'Anyline',
plugin: 'io-anyline-cordova',
pluginRef: 'Anyline',
repo: 'https://github.com/Anyline/anyline-ocr-cordova-module',
platforms: ['Android', 'iOS']
})
@Injectable()
export class Anyline extends IonicNativePlugin {
/**
* Scan
* @param options {AnylineOptions} Scanning options
* @return {Promise<any>} Returns a promise that resolves when Code is captured
*/
@Cordova()
scan(options: AnylineOptions): Promise<any> {
return;
}
}

View File

@@ -0,0 +1,66 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
export interface AppLauncherOptions {
uri?: string;
packageName?: string;
}
/**
* @name App Launcher
* @description
* Simple Cordova plugin to see if other apps are installed and launch them.
*
* @usage
* ```typescript
* import { AppLauncher, AppLauncherOptions } from '@ionic-native/app-launcher/ngx';
* import { Platform } from '@ionic/angular';
*
* constructor(private appLauncher: AppLauncher, private platform: Platform) { }
*
* ...
*
* const options: AppLauncherOptions = {
* }
*
* if(this.platform.is('ios')) {
* options.uri = 'fb://'
* } else {
* options.packageName = 'com.facebook.katana'
* }
*
* this.appLauncher.canLaunch(options)
* .then((canLaunch: boolean) => console.log('Facebook is available'))
* .catch((error: any) => console.error('Facebook is not available'));
*
* ```
*/
@Plugin({
pluginName: 'AppLauncher',
plugin: 'cordova-plugin-app-launcher',
pluginRef: 'window.plugins.launcher',
repo: 'https://github.com/nchutchind/cordova-plugin-app-launcher',
platforms: ['Android', 'iOS']
})
@Injectable()
export class AppLauncher extends IonicNativePlugin {
/**
* Check if any apps are installed that can launch via a specified URI or Package Name.
* @param options App Launcher options
* @return {Promise<any>} Returns a promise that resolves if the app is installed
*/
@Cordova()
canLaunch(options: AppLauncherOptions): Promise<boolean> {
return;
}
/**
* Launches the app via a specified URI or Package Name
* @param options App Launcher options
* @return {Promise<any>} Returns a promise that resolves the launched app
*/
@Cordova()
launch(options: AppLauncherOptions): Promise<any> {
return;
}
}

View File

@@ -7,11 +7,28 @@ export interface EncryptedCardData {
wrappedKey: string;
}
export interface SignatureCertificatesData {
certificateSubCA: string;
certificateLeaf: string;
nonce: string;
nonceSignature: string;
}
export interface CardData {
cardholderName: string;
primaryAccountNumberSuffix: string;
localizedDescription?: string;
paymentNetwork: string;
paymentNetwork?: string;
}
export interface PairedDevicesFlags {
isInWallet: boolean;
isInWatch: boolean;
FPANID: string;
}
export interface WatchExistData {
isWatchPaired: boolean;
}
/**
@@ -26,55 +43,107 @@ export interface CardData {
*
* constructor(private appleWallet: AppleWallet) { }
*
*
* ...
*
*
* this.appleWallet.available()
* .then((res) => {
* // res is a boolean value, either true or false
* console.log("Is Apple Wallet available? ", res);
* // Simple call to determine if the current device supports Apple Pay and has a supported card installed.
* this.appleWallet.isAvailable()
* .then((res: boolean) => {
* // Expect res to be boolean
* })
* .catch((message) => {
* console.error("ERROR AVAILBLE>> ", message);
* .catch((err) => {
* // Catch {{err}} here
* });
*
* ...
*
* let data: cardData = {
* cardholderName: 'Test User',
* primaryAccountNumberSuffix: '1234',
* localizedDescription: 'Description of payment card',
* paymentNetwork: 'VISA'
* }
*
* // Simple call to check Card Eligibility
* this.appleWallet.checkCardEligibility(primaryAccountIdentifier: string)
* .then((res: boolean) => {
* // Expect res to be boolean
* })
* .catch((err) => {
* // Catch {{err}} here
* });
*
*
* ...
*
*
* // Simple call to checkCardEligibilityBySuffix
* this.appleWallet.checkCardEligibilityBySuffix(cardSuffix: string)
* .then((res: boolean) => {
* // Expect res to be boolean
* })
* .catch((err) => {
* // Catch {{err}} here
* });
*
*
* ...
*
* // Simple call to check out if there is any paired Watches so that you can toggle visibility of 'Add to Watch' button
* this.appleWallet.checkPairedDevices()
* .then((res: WatchExistData) => {
* // object contains boolean flags showing paired devices
* })
* .catch((err) => {
* // Catch {{err}} here
* });
*
*
* ...
*
*
*
* // Simple call to check paired devices with a card by its suffix
* this.appleWallet.checkPairedDevicesBySuffix(cardSuffix: string)
* .then((res: PairedDevicesFlags) => {
* // object contains boolean values that ensure that card is already exists in wallet or paired-watch
* })
* .catch((err) => {
* // Catch {{err}} here
* });
*
*
* ...
*
*
* // Simple call with the configuration data needed to instantiate a new PKAddPaymentPassViewController object.
* // This method provides the data needed to create a request to add your payment pass (credit/debit card). After a successful callback, pass the certificate chain to your issuer server-side using our callback delegate method `AppleWallet.completeAddPaymentPass`. The issuer server-side should returns an encrypted JSON payload containing the encrypted card data, which is required to be get the final response
*
* this.appleWallet.startAddPaymentPass(data: cardData)
* .then((res) => {
* console.log("startAddPaymentPass success response ", res);
* .then((res: SignatureCertificatesData) => {
* // User proceed and successfully asked to add card to his wallet
* // Use the callback response JSON payload to complete addition process
* })
* .catch((err) => {
* console.error("startAddPaymentPass ERROR response", err);
* // Catch {{err}} here
* });
*
*
* ...
*
* let data: encryptedCardData = {
* activationData: 'encoded Base64 activationData from your server',
* encryptedPassData: 'encoded Base64 encryptedPassData from your server',
* wrappedKey: 'encoded Base64 wrappedKey from your server',
* }
*
* this.appleWallet.encryptedCardData(data: encryptedCardData)
* .then((res) => {
* console.log("completeAddCardToAppleWallet success response ", res);
* this.appleWallet.completeAddPaymentPass(data: encryptedCardData)
* .then((res: string) => {
* // Expect res to be string either 'success' or 'error'
* })
* .catch((err) => {
* console.error("completeAddCardToAppleWallet ERROR response", err);
* // Catch {{err}} here
* // Error and can not add the card, or something wrong happend
* // PKAddPaymentPassViewController will be dismissed
* });
*
* ```
* @Interfaces
* EncryptedCardData
* SignatureCertificatesData
* CardData
* PairedDevicesFlags
* WatchExistData
*/
@Plugin({
pluginName: 'AppleWallet',
@@ -86,31 +155,70 @@ export interface CardData {
@Injectable()
export class AppleWallet extends IonicNativePlugin {
/**
* Detects if the current device supports Apple Wallet
* @return {Promise<boolean>} Returns a promise
* Simple call to determine if the current device supports Apple Pay and has a supported card installed.
* @return {Promise<boolean>}
*/
@Cordova()
available(): Promise<boolean> {
isAvailable(): Promise<boolean> {
return;
}
/**
* Simple call to check Card Eligibility
* @param {string} primaryAccountIdentifier
* @return {Promise<boolean>}
*/
@Cordova()
checkCardEligibility(primaryAccountIdentifier: string): Promise<boolean> {
return;
}
/**
* Simple call to checkCardEligibilityBySuffix
* @param {string} cardSuffix
* @return {Promise<PairedDevicesFlags>}
*/
@Cordova()
checkCardEligibilityBySuffix(cardSuffix: string): Promise<boolean> {
return;
}
/**
* Simple call to check out if there is any paired Watches so that you can toggle visibility of 'Add to Watch' button
* @return {Promise<WatchExistData>}
*/
@Cordova()
checkPairedDevices(): Promise<WatchExistData> {
return;
}
/**
* Simple call to check paired devices with a card by its suffix
* @param {string} cardSuffix
* @return {Promise<PairedDevicesFlags>}
*/
@Cordova()
checkPairedDevicesBySuffix(cardSuffix: string): Promise<PairedDevicesFlags> {
return;
}
/**
* Simple call with the configuration data needed to instantiate a new PKAddPaymentPassViewController object.
* @param {cardData} data
* @return {Promise<any>} Returns a promise
* @return {Promise<SignatureCertificatesData>}
*/
@Cordova()
startAddPaymentPass(data: CardData): Promise<any> {
startAddPaymentPass(data: CardData): Promise<SignatureCertificatesData> {
return;
}
/**
* Simple call contains the card data needed to add a card to Apple Pay.
* Simple completion handler that takes encrypted card data returned from your server side, in order to get the final response from Apple to know if the card is added succesfully or not.
* @param {encryptedCardData} data
* @return {Promise<any>} Returns a promise
* @return {Promise<string>}
*/
@Cordova()
completeAddPaymentPass(data: EncryptedCardData): Promise<any> {
completeAddPaymentPass(data: EncryptedCardData): Promise<string> {
return;
}
}

View File

@@ -499,7 +499,7 @@ export declare enum BackgroundGeolocationIOSActivity {
* BackgroundGeolocation must be called within app.ts and or before Geolocation. Otherwise the platform will not ask you for background tracking permission.
*
* ```typescript
* import { BackgroundGeolocation, BackgroundGeolocationConfig, BackgroundGeolocationResponse } from '@ionic-native/background-geolocation';
* import { BackgroundGeolocation, BackgroundGeolocationConfig, BackgroundGeolocationEvents, BackgroundGeolocationResponse } from '@ionic-native/background-geolocation';
*
* constructor(private backgroundGeolocation: BackgroundGeolocation) { }
*
@@ -514,14 +514,16 @@ export declare enum BackgroundGeolocationIOSActivity {
* };
*
* this.backgroundGeolocation.configure(config)
* .subscribe((location: BackgroundGeolocationResponse) => {
* .then(() => {
*
* console.log(location);
* this.backgroundGeolocation.on(BackgroundGeolocationEvents.location).subscribe((location: BackgroundGeolocationResponse) => {
* console.log(location);
*
* // IMPORTANT: You must execute the finish method here to inform the native plugin that you're finished,
* // and the background-task may be completed. You must do this regardless if your HTTP request is successful or not.
* // IF YOU DON'T, ios will CRASH YOUR APP for spending too much time in the background.
* this.backgroundGeolocation.finish(); // FOR IOS ONLY
* // IMPORTANT: You must execute the finish method here to inform the native plugin that you're finished,
* // and the background-task may be completed. You must do this regardless if your operations are successful or not.
* // IF YOU DON'T, ios will CRASH YOUR APP for spending too much time in the background.
* this.backgroundGeolocation.finish(); // FOR IOS ONLY
* });
*
* });
*
@@ -538,7 +540,7 @@ export declare enum BackgroundGeolocationIOSActivity {
*/
@Plugin({
pluginName: 'BackgroundGeolocation',
plugin: 'cordova-plugin-mauron85-background-geolocation@alpha',
plugin: '@mauron85/cordova-plugin-background-geolocation',
pluginRef: 'BackgroundGeolocation',
repo: 'https://github.com/mauron85/cordova-plugin-background-geolocation',
platforms: ['Android', 'iOS']
@@ -549,7 +551,7 @@ export class BackgroundGeolocation extends IonicNativePlugin {
* Configure the plugin.
*
* @param options {BackgroundGeolocationConfig} options An object of type Config
* @return {Observable<BackgroundGeolocationResponse>}
* @return {Promise<any>}
*/
@Cordova()
configure(options: BackgroundGeolocationConfig): Promise<any> {

View File

@@ -91,8 +91,37 @@ export class BackgroundMode extends IonicNativePlugin {
* Disable the background mode.
* Once the background mode has been disabled, the app will be paused when in background.
*/
@Cordova()
disable(): Promise<any> {
@Cordova({
sync: true
})
disable(): void {
return;
}
/**
* Enable or disable the background mode.
*
* @param enable {boolean} The status to set for.
*
* @return {void}
*/
@Cordova({
sync: true
})
setEnabled(enable: boolean): void {}
/**
* Fire event with given arguments.
*
* @param event {string} event The event's name.
* @param args {array} The callback's arguments.
*
* @return {string}
*/
@Cordova({
sync: true
})
fireEvent(event: string, ...args: any[]): string {
return;
}
@@ -119,17 +148,15 @@ export class BackgroundMode extends IonicNativePlugin {
}
/**
* Override the default title, ticker and text.
* Overwrite the default settings.
* Available only for Android platform.
* @param {BackgroundModeConfiguration} options List of option to configure. See table below
* @param overrides {BackgroundModeConfiguration} Dict of options to be overridden.
* @returns {Promise<any>}
*/
@Cordova({
platforms: ['Android']
})
setDefaults(options?: BackgroundModeConfiguration): Promise<any> {
return;
}
setDefaults(overrides?: BackgroundModeConfiguration): void {}
/**
* Modify the displayed information.
@@ -143,7 +170,8 @@ export class BackgroundMode extends IonicNativePlugin {
configure(options?: BackgroundModeConfiguration): void {}
/**
* Listen for events that the plugin fires. Available events are `enable`, `disable`, `activate`, `deactivate` and `failure`.
* Register callback for given event.
* > Available events are `enable`, `disable`, `activate`, `deactivate` and `failure`.
* @param event {string} Event name
* @returns {Observable<any>}
*/
@@ -156,6 +184,17 @@ export class BackgroundMode extends IonicNativePlugin {
return;
}
/**
* Listen for events that the plugin fires. Available events are `enable`, `disable`, `activate`, `deactivate` and `failure`.
* @param event {string} Event name
* @param callback {function} The function to be exec as callback.
* @returns {Observable<any>}
*/
@Cordova()
un(event: string, callback: (...args: any[]) => void): void {
return;
}
/**
* Android allows to programmatically move from foreground to background.
*/
@@ -202,15 +241,14 @@ export class BackgroundMode extends IonicNativePlugin {
excludeFromTaskList(): void {}
/**
* The method works async instead of isActive() or isEnabled().
* If the screen is off.
* @param fn {function} Callback function to invoke with boolean arg.
* @returns {Promise<boolean>}
*/
@Cordova({
platforms: ['Android']
})
isScreenOff(): Promise<boolean> {
return;
}
isScreenOff(fn: (arg0: boolean) => void): void {}
/**
* Turn screen on

View File

@@ -27,6 +27,11 @@ export interface BarcodeScannerOptions {
*/
disableSuccessBeep?: boolean;
/**
* Disable or enable Autorotate. Supported on IOS only.
*/
shouldAutorotate?: boolean;
/**
* Prompt text. Supported on Android only.
*/
@@ -55,22 +60,22 @@ export interface BarcodeScannerOptions {
export interface BarcodeScanResult {
format:
| 'QR_CODE'
| 'DATA_MATRIX'
| 'UPC_E'
| 'UPC_A'
| 'EAN_8'
| 'EAN_13'
| 'CODE_128'
| 'CODE_39'
| 'CODE_93'
| 'CODABAR'
| 'ITF'
| 'RSS14'
| 'RSS_EXPANDED'
| 'PDF_417'
| 'AZTEC'
| 'MSI';
| 'QR_CODE'
| 'DATA_MATRIX'
| 'UPC_E'
| 'UPC_A'
| 'EAN_8'
| 'EAN_13'
| 'CODE_128'
| 'CODE_39'
| 'CODE_93'
| 'CODABAR'
| 'ITF'
| 'RSS14'
| 'RSS_EXPANDED'
| 'PDF_417'
| 'AZTEC'
| 'MSI';
cancelled: boolean;
text: string;
}
@@ -116,11 +121,11 @@ export class BarcodeScanner extends IonicNativePlugin {
PHONE_TYPE: string;
SMS_TYPE: string;
} = {
TEXT_TYPE: 'TEXT_TYPE',
EMAIL_TYPE: 'EMAIL_TYPE',
PHONE_TYPE: 'PHONE_TYPE',
SMS_TYPE: 'SMS_TYPE'
};
TEXT_TYPE: 'TEXT_TYPE',
EMAIL_TYPE: 'EMAIL_TYPE',
PHONE_TYPE: 'PHONE_TYPE',
SMS_TYPE: 'SMS_TYPE'
};
/**
* Open the barcode scanner.

View File

@@ -0,0 +1,102 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name BioCatch
* @description
* BioCatch SDK Cordova support
*
* @usage
* ```typescript
* import { BioCatch } from '@ionic-native/biocatch';
*
*
* constructor(private biocatch: BioCatch) { }
*
* ...
*
*
* this.biocatch.start('customer-session-1', 'http://example.com', 'some-public-key')
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'BioCatch',
plugin: 'cordova-plugin-biocatch',
pluginRef: 'BioCatch',
repo: 'https://bitbucket.org/carlos_orellana/ionic-plugin',
platforms: ['iOS', 'Android'],
})
@Injectable()
export class BioCatch extends IonicNativePlugin {
/**
* Start a session
* @param customerSessionID {String} Customer session id
* @param wupUrl {String} WUP server URL
* @param publicKey {String} Public Key
* @return {Promise<void>} Returns a promise
*/
@Cordova()
start(customerSessionID: string | null, wupUrl: string, publicKey: string | null): Promise<void> {
return;
}
/**
* Pause the session
* @return {Promise<void>} Returns a promise
*/
@Cordova()
pause(): Promise<void> {
return;
}
/**
* Resume the session
* @return {Promise<void>} Returns a promise
*/
@Cordova()
resume(): Promise<void> {
return;
}
/**
* Stop the session
* @return {Promise<void>} Returns a promise
*/
@Cordova()
stop(): Promise<void> {
return;
}
/**
* Reset the session
* @return {Promise<void>} Returns a promise
*/
@Cordova()
resetSession(): Promise<void> {
return;
}
/**
* Change the session context
* @param contextName {String} Context name
* @return {Promise<void>} Returns a promise
*/
@Cordova()
changeContext(contextName: string): Promise<void> {
return;
}
/**
* Update the customer session ID
* @param customerSessionID {String}
* @return {Promise<void>} Returns a promise
*/
@Cordova()
updateCustomerSessionID(customerSessionID: string | null): Promise<void> {
return;
}
}

View File

@@ -0,0 +1,59 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
/**
* @name BiometricWrapper
* @description
* This plugin capture biometric(Iris and Fingerprint) and validate the user.
* May be used in Banking domain
*
* @usage
* ```typescript
* import { BiometricWrapper } from '@ionic-native/biometric-wrapper/ngx';
*
*
* constructor(private biometricWrapper: BiometricWrapper) { }
*
* ...
*
*
* this.biometricWrapper.activateIris({'PID_XML': '<pid-xml/>'})
* .then((res: any) => )
* .catch((error: any) => );
*
* ```
*/
@Plugin({
pluginName: 'BiometricWrapper',
plugin: 'cordova-plugin-biometric',
pluginRef: 'cordova.plugins.BiometricWrapper',
repo: '',
install: '',
installVariables: [],
platforms: ['Android']
})
@Injectable()
export class BiometricWrapper extends IonicNativePlugin {
/**
* This function activate iris activity
* @return {Promise<any>} Returns a promise that resolves when iris data captured
*/
@Cordova()
activateIris(args: any): Promise<any> {
return;
}
/**
* This function activate fingerprint activity
* @return {Promise<any>} Returns a promise that resolves when FP data captured
*/
@Cordova()
activateFingerprint(args: any): Promise<any> {
return;
}
}

View File

@@ -198,6 +198,13 @@ export interface DocumentVerificationOverlaySettingsCtor {
new(): DocumentVerificationOverlaySettings;
}
export interface BlinkCardOverlaySettings extends OverlaySettings {
glareMessage: string;
}
export interface BlinkCardOverlaySettingsCtor {
new(): BlinkCardOverlaySettings;
}
export interface RecognizerResult {
resultState: RecognizerResultState;
}
@@ -837,47 +844,26 @@ export interface EgyptIdFrontRecognizer extends Recognizer<EgyptIdFrontRecognize
}
export interface EgyptIdFrontRecognizerCtor extends RecognizerCtor<EgyptIdFrontRecognizer> {}
export interface ElitePaymentCardBackRecognizerResult extends RecognizerResult {
cardNumber: string;
cvv: string;
fullDocumentImage: string;
inventoryNumber: string;
validThru: Date;
}
export interface ElitePaymentCardBackRecognizerResultCtor extends RecognizerResultCtor<ElitePaymentCardBackRecognizerResult> {}
export interface ElitePaymentCardBackRecognizer extends Recognizer<ElitePaymentCardBackRecognizerResult> {
anonymizeCardNumber: boolean;
anonymizeCvv: boolean;
detectGlare: boolean;
extractCvv: boolean;
extractInventoryNumber: boolean;
extractValidThru: boolean;
fullDocumentImageDpi: number;
fullDocumentImageExtensionFactors: ImageExtensionFactors;
returnFullDocumentImage: boolean;
}
export interface ElitePaymentCardCombinedRecognizerResult extends RecognizerResult {
export interface BlinkCardEliteRecognizerResult extends RecognizerResult {
cardNumber: string;
cvv: string;
digitalSignature: string;
digitalSignatureVersion: string;
documentDataMatch: boolean;
fullDocumentImage: string;
fullDocumentBackImage: string;
fullDocumentFrontImage: string;
inventoryNumber: string;
owner: string;
scanningFirstSideDone: boolean;
validThru: Date;
}
export interface ElitePaymentCardCombinedRecognizerResultCtor extends RecognizerResultCtor<ElitePaymentCardCombinedRecognizerResult> {}
export interface BlinkCardEliteRecognizerResultCtor extends RecognizerResultCtor<BlinkCardEliteRecognizerResult> {}
export interface ElitePaymentCardCombinedRecognizer extends Recognizer<ElitePaymentCardCombinedRecognizerResult> {
export interface BlinkCardEliteRecognizer extends Recognizer<BlinkCardEliteRecognizerResult> {
anonymizeCardNumber: boolean;
anonymizeCvv: boolean;
anonymizeOwner: boolean;
detectGlare: boolean;
extractCvv: boolean;
extractInventoryNumber: boolean;
extractOwner: boolean;
extractValidThru: boolean;
@@ -886,20 +872,7 @@ export interface ElitePaymentCardCombinedRecognizer extends Recognizer<ElitePaym
returnFullDocumentImage: boolean;
signResult: boolean;
}
export interface ElitePaymentCardFrontRecognizerResult extends RecognizerResult {
fullDocumentImage: string;
owner: string;
}
export interface ElitePaymentCardFrontRecognizerResultCtor extends RecognizerResultCtor<ElitePaymentCardFrontRecognizerResult> {}
export interface ElitePaymentCardFrontRecognizer extends Recognizer<ElitePaymentCardFrontRecognizerResult> {
anonymizeOwner: boolean;
detectGlare: boolean;
extractOwner: boolean;
fullDocumentImageDpi: number;
fullDocumentImageExtensionFactors: ImageExtensionFactors;
}
export interface BlinkCardEliteRecognizerCtor extends RecognizerCtor<BlinkCardEliteRecognizer> {}
export interface EudlRecognizerResult extends RecognizerResult {
address: string;
@@ -1731,24 +1704,7 @@ export interface NewZealandDlFrontRecognizer extends Recognizer<NewZealandDlFron
}
export interface NewZealandDlFrontRecognizerCtor extends RecognizerCtor<NewZealandDlFrontRecognizer> {}
export interface PaymentCardBackRecognizerResult extends RecognizerResult {
cvv: string;
fullDocumentImage: string;
inventoryNumber: string;
}
export interface PaymentCardBackRecognizerResultCtor extends RecognizerResultCtor<PaymentCardBackRecognizerResult> {}
export interface PaymentCardBackRecognizer extends Recognizer<PaymentCardBackRecognizerResult> {
anonymizeCvv: boolean;
detectGlare: boolean;
extractInventoryNumber: boolean;
fullDocumentImageDpi: number;
fullDocumentImageExtensionFactors: ImageExtensionFactors;
returnFullDocumentImage: boolean;
}
export interface PaymentCardBackRecognizerCtor extends RecognizerCtor<PaymentCardBackRecognizer> {}
export interface PaymentCardCombinedRecognizerResult extends RecognizerResult {
export interface BlinkCardRecognizerResult extends RecognizerResult {
cardNumber: string;
cvv: string;
digitalSignature: string;
@@ -1757,16 +1713,19 @@ export interface PaymentCardCombinedRecognizerResult extends RecognizerResult {
fullDocumentBackImage: string;
fullDocumentFrontImage: string;
inventoryNumber: string;
issuer: string;
owner: string;
scanningFirstSideDone: boolean;
validThru: Date;
}
export interface PaymentCardCombinedRecognizerResultCtor extends RecognizerResultCtor<PaymentCardCombinedRecognizerResult> {}
export interface BlinkCardRecognizerResultCtor extends RecognizerResultCtor<BlinkCardRecognizerResult> {}
export interface PaymentCardCombinedRecognizer extends Recognizer<PaymentCardCombinedRecognizerResult> {
export interface BlinkCardRecognizer extends Recognizer<BlinkCardRecognizerResult> {
anonymizeCardNumber: boolean;
anonymizeCvv: boolean;
anonymizeOwner: boolean;
detectGlare: boolean;
extractCvv: boolean;
extractInventoryNumber: boolean;
extractOwner: boolean;
extractValidThru: boolean;
@@ -1775,27 +1734,7 @@ export interface PaymentCardCombinedRecognizer extends Recognizer<PaymentCardCom
returnFullDocumentImage: boolean;
signResult: boolean;
}
export interface PaymentCardCombinedRecognizerCtor extends RecognizerCtor<PaymentCardCombinedRecognizer> {}
export interface PaymentCardFrontRecognizerResult extends RecognizerResult {
cardNumber: string;
fullDocumentImage: string;
owner: string;
validThru: Date;
}
export interface PaymentCardFrontRecognizerResultCtor extends RecognizerResultCtor<PaymentCardFrontRecognizerResult> {}
export interface PaymentCardFrontRecognizer extends Recognizer<PaymentCardFrontRecognizerResult> {
anonymizeCardNumber: boolean;
anonymizeOwner: boolean;
detectGlare: boolean;
extractOwner: boolean;
extractValidThru: boolean;
fullDocumentImageDpi: number;
fullDocumentImageExtensionFactors: ImageExtensionFactors;
returnFullDocumentImage: boolean;
}
export interface PaymentCardFrontRecognizerCtor extends RecognizerCtor<PaymentCardFrontRecognizer> {}
export interface BlinkCardRecognizerCtor extends RecognizerCtor<BlinkCardRecognizer> {}
export interface Pdf417RecognizerResult extends RecognizerResult {
barcodeType: string;
@@ -2738,6 +2677,40 @@ export interface UsdlCombinedRecognizerCtor extends RecognizerCtor<UsdlCombinedR
* this.barcodeStringData = barcodeRecognizer.result.stringData;
* }
* }
*
* ...
*
* const overlaySettings = new this.blinkId.BlinkCardOverlaySettings();
* const recognizer = new this.blinkId.BlinkCardRecognizer();
* recognizer.returnFullDocumentImage = false;
* recognizer.detectGlare = true;
* recognizer.extractCvv = true;
* recognizer.extractValidThru = true;
* recognizer.extractOwner = true;
*
* const recognizerCollection = new this.blinkId.RecognizerCollection([recognizer]);
* const canceled = await this.blinkId.scanWithCamera(
* overlaySettings,
* recognizerCollection,
* {
* ios: '', //iOS License Key
* android: '' //Android License Key
* },
* );
*
* if (!canceled) {
* if (recognizer.result.resultState === RecognizerResultState.valid) {
* const results = recognizer.result;
*
* if (results.resultState === RecognizerResultState.valid) {
* const ccInfo = {
* cardNumber: Number(results.cardNumber),
* expirationMonth: Number(results.validThru.month),
* expirationYear: Number(results.validThru.year),
* cvv: Number(results.cvv)
* };
* }
* }
* ```
*/
@Plugin({
@@ -2753,7 +2726,7 @@ export interface UsdlCombinedRecognizerCtor extends RecognizerCtor<UsdlCombinedR
export class BlinkId extends IonicNativePlugin {
/**
* Opens the camera dialog and attempts to scan a barcode/document
* @param overlaySettings {OverlaySettings} for camera overla customization
* @param overlaySettings {OverlaySettings} for camera overlay customization
* @param recognizerCollection {RecognizerCollection} collection of recognizers to scan with
* @returns {Promise<boolean>}
*/
@@ -2773,6 +2746,7 @@ export class BlinkId extends IonicNativePlugin {
@CordovaProperty() BarcodeOverlaySettings: BarcodeOverlaySettingsCtor;
@CordovaProperty() DocumentOverlaySettings: DocumentOverlaySettingsCtor;
@CordovaProperty() DocumentVerificationOverlaySettings: DocumentVerificationOverlaySettingsCtor;
@CordovaProperty() BlinkCardOverlaySettings: BlinkCardOverlaySettingsCtor;
@CordovaProperty() RecognizerCollection: RecognizerCollectionCtor;
@@ -2795,6 +2769,10 @@ export class BlinkId extends IonicNativePlugin {
@CordovaProperty() AustriaIdFrontRecognizer: AustriaIdFrontRecognizerCtor;
@CordovaProperty() AustriaPassportRecognizerResult: AustriaPassportRecognizerResultCtor;
@CordovaProperty() AustriaPassportRecognizer: AustriaPassportRecognizerCtor;
@CordovaProperty() BlinkCardEliteRecognizer: BlinkCardEliteRecognizerCtor;
@CordovaProperty() BlinkCardEliteRecognizerResult: BlinkCardEliteRecognizerResultCtor;
@CordovaProperty() BlinkCardRecognizerResult: BlinkCardRecognizerResultCtor;
@CordovaProperty() BlinkCardRecognizer: BlinkCardRecognizerCtor;
@CordovaProperty() ColombiaDlFrontRecognizerResult: ColombiaDlFrontRecognizerResultCtor;
@CordovaProperty() ColombiaIdBackRecognizerResult: ColombiaIdBackRecognizerResultCtor;
@CordovaProperty() ColombiaIdBackRecognizer: ColombiaIdBackRecognizerCtor;
@@ -2812,9 +2790,6 @@ export class BlinkId extends IonicNativePlugin {
@CordovaProperty() DocumentFaceRecognizerResult: DocumentFaceRecognizerResultCtor;
@CordovaProperty() EgyptIdFrontRecognizerResult: EgyptIdFrontRecognizerResultCtor;
@CordovaProperty() EgyptIdFrontRecognizer: EgyptIdFrontRecognizerCtor;
@CordovaProperty() ElitePaymentCardBackRecognizerResult: ElitePaymentCardBackRecognizerResultCtor;
@CordovaProperty() ElitePaymentCardCombinedRecognizerResult: ElitePaymentCardCombinedRecognizerResultCtor;
@CordovaProperty() ElitePaymentCardFrontRecognizerResult: ElitePaymentCardFrontRecognizerResultCtor;
@CordovaProperty() EudlRecognizerResult: EudlRecognizerResultCtor;
@CordovaProperty() GermanyCombinedRecognizerResult: GermanyCombinedRecognizerResultCtor;
@CordovaProperty() GermanyCombinedRecognizer: GermanyCombinedRecognizerCtor;
@@ -2868,12 +2843,6 @@ export class BlinkId extends IonicNativePlugin {
@CordovaProperty() MyKadFrontRecognizer: MyKadFrontRecognizerCtor;
@CordovaProperty() NewZealandDlFrontRecognizerResult: NewZealandDlFrontRecognizerResultCtor;
@CordovaProperty() NewZealandDlFrontRecognizer: NewZealandDlFrontRecognizerCtor;
@CordovaProperty() PaymentCardBackRecognizerResult: PaymentCardBackRecognizerResultCtor;
@CordovaProperty() PaymentCardBackRecognizer: PaymentCardBackRecognizerCtor;
@CordovaProperty() PaymentCardCombinedRecognizerResult: PaymentCardCombinedRecognizerResultCtor;
@CordovaProperty() PaymentCardCombinedRecognizer: PaymentCardCombinedRecognizerCtor;
@CordovaProperty() PaymentCardFrontRecognizerResult: PaymentCardFrontRecognizerResultCtor;
@CordovaProperty() PaymentCardFrontRecognizer: PaymentCardFrontRecognizerCtor;
@CordovaProperty() Pdf417RecognizerResult: Pdf417RecognizerResultCtor;
@CordovaProperty() Pdf417Recognizer: Pdf417RecognizerCtor;
@CordovaProperty() PolandCombinedRecognizerResult: PolandCombinedRecognizerResultCtor;

View File

@@ -339,7 +339,7 @@ export interface InitializeResult {
/** Service's UUID */
service: string;
/** Characteristic UUID */
characterisitc: string;
characteristic: string;
/** This integer value will be incremented every read/writeRequested */
requestId: number;
/** Offset value */
@@ -431,20 +431,20 @@ export class BluetoothLE extends IonicNativePlugin {
* @name initialize
* Initialize Bluetooth on the device
* @param {InitParams} [params]
* @returns {(Promise<{ status: 'enabled' | 'disabled'}>)} The callback that is passed initialize status (enabled/disabled)
* @returns {(Observable<{ status: 'enabled' | 'disabled'}>)} The callback that is passed initialize status (enabled/disabled)
*/
@Cordova({ callbackOrder: 'reverse' })
initialize(params?: InitParams): Promise<{ status: 'enabled' | 'disabled' }> {
@Cordova({ successIndex: 0, errorIndex: 2, observable: true })
initialize(params?: InitParams): Observable<{ status: 'enabled' | 'disabled' }> {
return;
}
/**
* @name enable (Android)
* Enable Bluetooth on the device. Android support only
* @returns {Promise<{ status: boolean }>}
* @returns void
*/
@Cordova({ callbackOrder: 'reverse', sync: true })
enable(): Promise<{ status: boolean }> {
enable() {
return;
}
@@ -480,10 +480,10 @@ export class BluetoothLE extends IonicNativePlugin {
* Android API >= 23 also requires location services to be enabled. Use isLocationEnabled to determine whether location services are enabled.
* If not enabled, use requestLocation to prompt the location services settings page.
* @param {ScanParams} params Scan params
* @returns {(Observable<{ status: ScanStatus }>)}
* @returns {(Observable< ScanStatus >)}
*/
@Cordova({ callbackOrder: 'reverse', observable: true })
startScan(params: ScanParams): Observable<{ status: ScanStatus }> {
startScan(params: ScanParams): Observable< ScanStatus > {
return;
}
@@ -559,7 +559,7 @@ export class BluetoothLE extends IonicNativePlugin {
connect(params: {
address: string;
autoConnect?: boolean;
}): Observable<{ status: DeviceInfo }> {
}): Observable< DeviceInfo > {
return;
}
@@ -579,10 +579,10 @@ export class BluetoothLE extends IonicNativePlugin {
* Disconnect from a Bluetooth LE device.
* Note: It's simpler to just call close(). Starting with iOS 10, disconnecting before closing seems required!
* @param {{address: string}} params The address/identifier
* @returns {Promise<{ status: DeviceInfo }>}
* @returns {Promise<DeviceInfo>}
*/
@Cordova({ callbackOrder: 'reverse' })
disconnect(params: { address: string }): Promise<{ status: DeviceInfo }> {
disconnect(params: { address: string }): Promise<DeviceInfo> {
return;
}
@@ -592,10 +592,10 @@ export class BluetoothLE extends IonicNativePlugin {
* Prior to 2.7.0, you needed to disconnect to the device before closing, but this is no longer the case.
* Starting with iOS 10, disconnecting before closing seems required!
* @param {{ address: string }} params The address/identifier
* @returns {Promise<{ status: DeviceInfo }>}
* @returns {Promise<DeviceInfo>}
*/
@Cordova({ callbackOrder: 'reverse' })
close(params: { address: string }): Promise<{ status: DeviceInfo }> {
close(params: { address: string }): Promise<DeviceInfo> {
return;
}
@@ -609,7 +609,7 @@ export class BluetoothLE extends IonicNativePlugin {
* Subsequent discover events will make use of this cache.
* If your device's services change, set the clearCache parameter to force Android to re-discover services.
* @param {{ address: string, clearCache: boolean }} params The address/identifier
* @returns {Promise<{ device: Device }>}
* @returns {Promise<Device>}
* success: device object (contains array of service objects)
* error: The callback that will be triggered when the unbond operation fails
*/
@@ -617,7 +617,7 @@ export class BluetoothLE extends IonicNativePlugin {
discover(params: {
address: string;
clearCache?: boolean;
}): Promise<{ device: Device }> {
}): Promise<Device> {
return;
}
@@ -626,13 +626,13 @@ export class BluetoothLE extends IonicNativePlugin {
* Discover the device's services.
* Not providing an array of services will return all services and take longer to discover. iOS support only.
* @param {{address: string, services: string[]}} params
* @returns {Promise<{ services: Services }>}
* @returns {Promise<Services>}
*/
@Cordova({ callbackOrder: 'reverse' })
services(params: {
address: string;
services?: string[];
}): Promise<{ services: Services }> {
}): Promise<Services> {
return;
}
@@ -747,10 +747,10 @@ export class BluetoothLE extends IonicNativePlugin {
* @name rssi
* Read RSSI of a connected device. RSSI is also returned with scanning.
* @param {{ address: string }} params
* @returns {Promise<{ rssi: RSSI }>}
* @returns {Promise< RSSI >}
*/
@Cordova({ callbackOrder: 'reverse' })
rssi(params: { address: string }): Promise<{ rssi: RSSI }> {
rssi(params: { address: string }): Promise< RSSI > {
return;
}
@@ -758,10 +758,10 @@ export class BluetoothLE extends IonicNativePlugin {
* @name mtu (Android, Android 5+)
* Set MTU of a connected device. Android only.
* @param {{ address: string, mtu: number }} params
* @returns {Promise<{ mtu: MTU }>}
* @returns {Promise< MTU >}
*/
@Cordova({ callbackOrder: 'reverse' })
mtu(params: { address: string; mtu?: number }): Promise<{ mtu: MTU }> {
mtu(params: { address: string; mtu?: number }): Promise< MTU > {
return;
}
@@ -1057,7 +1057,7 @@ export class BluetoothLE extends IonicNativePlugin {
@CordovaProperty()
SCAN_MODE_LOW_LATENCY: number;
@CordovaProperty()
MATCH_MODE_AGRESSIVE: number;
MATCH_MODE_AGGRESSIVE: number;
@CordovaProperty()
MATCH_MODE_STICKY: number;
@CordovaProperty()

View File

@@ -475,6 +475,21 @@ export class Calendar extends IonicNativePlugin {
return;
}
/**
* Delete an event by id.
*
* @param {string} [id] The event id
* @param {Date} [fromDate] The date where it start deleting from
* @return Returns a Promise
*/
@Cordova()
deleteEventById(
id: string,
fromDate?: Date
): Promise<any> {
return;
}
/**
* Open the calendar at the specified date.
* @param {Date} date The date you want to open the calendar on

View File

@@ -113,6 +113,14 @@ export interface CameraPreviewPictureOptions {
* this.picture = 'assets/img/test.jpg';
* });
*
* // take a snap shot
* this.cameraPreview.takeSnapshot(this.pictureOpts).then((imageData) => {
* this.picture = 'data:image/jpeg;base64,' + imageData;
* }, (err) => {
* console.log(err);
* this.picture = 'assets/img/test.jpg';
* });
*
*
* // Switch camera
* this.cameraPreview.switchCamera();
@@ -245,6 +253,20 @@ export class CameraPreview extends IonicNativePlugin {
return;
}
/**
* Take a snapshot of preview window (size specified in startCamera options)
* @param {CameraPreviewPictureOptions} [options] quality of the picture to take
* @return {Promise<any>}
*/
@Cordova({
successIndex: 1,
errorIndex: 2
})
takeSnapshot(options?: CameraPreviewPictureOptions): Promise<any> {
return;
}
/**
*
* Set camera color effect.
@@ -456,4 +478,13 @@ export class CameraPreview extends IonicNativePlugin {
onBackButton(): Promise<any> {
return;
}
/**
* Return in use device camera fov
* @return {Promise<any>}
*/
@Cordova()
getHorizontalFOV(): Promise<any> {
return;
}
}

View File

@@ -61,7 +61,7 @@ export class Chooser extends IonicNativePlugin {
* base64-encoded data: URI, MIME type, display name, and original URI.
*/
@Cordova()
getFile(accept: string): Promise<ChooserResult | undefined> {
getFile(accept?: string): Promise<ChooserResult | undefined> {
return;
}
}

View File

@@ -577,6 +577,43 @@ export class CleverTap extends IonicNativePlugin {
return;
}
/****************************
* Notification Inbox methods
****************************/
/**
* Call this method to initialize the App Inbox
*/
@Cordova()
initializeInbox(): Promise<any> {
return;
}
/**
* Call this method to get the count of unread Inbox messages
*/
@Cordova()
getInboxMessageUnreadCount(): Promise<any> {
return;
}
/**
* Call this method to get the count of total Inbox messages
*/
@Cordova()
getInboxMessageCount(): Promise<any> {
return;
}
/**
* Call this method to open the App Inbox
* @param styleConfig : any or empty object
*/
@Cordova()
showInbox(styleConfig: any): Promise<any> {
return;
}
/*******************
* Developer Options
******************/

View File

@@ -4,7 +4,7 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name Couchbase Lite
* @description
* Plugin to install Couchbase Lite in your PhoneGap app on iOS or Android
* Plugin to install Couchbase Lite in your PhoneGap app on iOS or Android <docs-card href="https://ionicframework.com/integrations/couchbase-lite" ionicon="alert">This Plugin is no longer supported by Couchbase. Please see our Couchbase Lite Integration</docs-card>
*
* @usage
* ```typescript

View File

@@ -33,6 +33,9 @@ export interface DeeplinkOptions {
* @description This plugin handles deeplinks on iOS and Android for both custom URL scheme links
* and Universal App Links.
*
* Please read the [ionic plugin deeplinks docs](https://github.com/ionic-team/ionic-plugin-deeplinks) for iOS and Android integration.
* You must add `universal-links` to your `config.xml` and set up Apple App Site Association (AASA) for iOS and Asset Links for Android.
*
* @usage
* ```typescript
* import { Deeplinks } from '@ionic-native/deeplinks/ngx';

View File

@@ -35,9 +35,9 @@ export interface AndroidAccount {
*/
@Plugin({
pluginName: 'DeviceAccounts',
plugin: 'cordova-device-accounts',
pluginRef: 'plugins.DeviceAccounts',
repo: 'https://github.com/danielsogl/cordova-device-accounts',
plugin: 'cordova-device-accounts-v2',
pluginRef: 'DeviceAccounts',
repo: 'https://github.com/xUnholy/cordova-device-accounts-v2',
platforms: ['Android']
})
@Injectable()
@@ -78,4 +78,23 @@ export class DeviceAccounts extends IonicNativePlugin {
getEmail(): Promise<string> {
return;
}
/**
* Get permissions for access to email registered on Android device 8.0+
* @returns {Promise<string>}
*/
@Cordova()
getPermissions(): Promise<string> {
return;
}
/**
* Get permissions for access to email registered on Android device 8.0+ for requested type
* @param {string} type
* @returns {Promise<string>}
*/
@Cordova()
getPermissionsByType(type: string): Promise<string> {
return;
}
}

View File

@@ -73,7 +73,11 @@ export class Diagnostic extends IonicNativePlugin {
@CordovaProperty()
permissionStatus: {
GRANTED: string;
/**
* @deprecated cordova.plugins.diagnostic@5.0.0 uses DENIED_ONCE to unify DENIED* statuses across iOS/Android
*/
DENIED: string;
DENIED_ONCE: string;
NOT_REQUESTED: string;
DENIED_ALWAYS: string;
RESTRICTED: string;
@@ -812,6 +816,15 @@ export class Diagnostic extends IonicNativePlugin {
return;
}
/**
* Requests reminders authorization for the application.
* @returns {Promise<any>}
*/
@Cordova({ platforms: ['iOS'] })
requestRemoteNotificationsAuthorization(types?: string[], omitRegistration?: boolean): Promise<string> {
return;
}
/**
* Indicates the current setting of notification types for the app in the Settings app.
* Note: on iOS 8+, if "Allow Notifications" switch is OFF, all types will be returned as disabled.

View File

@@ -0,0 +1,79 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
export enum DocumentScannerSourceType {
/**
* Scan directly from device camera.
* This is the default.
*/
CAMERA = 1,
/**
* Scan from an image already stored on device.
*/
GALLERY = 0
}
export interface DocumentScannerOptions {
/**
* Choose to scan from camera or existing image file. Only valid for Android.
*/
sourceType?: DocumentScannerSourceType;
/**
* Filename to save scanned image to (minus extension, which is always ".png").
* Only valid for iOS. Caller is responsible for cleaning up any files created
* if this parameter is set to anything other than the default value,
* which is "image".
*/
fileName?: string;
}
/**
* @name Document Scanner
* @description
* This plugin processes images of documents, compensating for perspective.
*
* @usage
* ```typescript
* import { DocumentScanner, DocumentScannerOptions } from '@ionic-native/document-scanner';
*
*
* constructor(private documentScanner: DocumentScanner) { }
*
* ...
*
* let opts: DocumentScannerOptions = {};
* this.documentScanner.scanDocument(opts)
* .then((res: string) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*
* @interfaces
* DocumentScannerOptions
* @enums
* DocumentScannerSourceType
*/
@Plugin({
pluginName: 'DocumentScanner',
plugin: 'cordova-plugin-document-scanner',
pluginRef: 'scan',
repo: 'https://github.com/NeutrinosPlatform/cordova-plugin-document-scanner',
platforms: ['Android', 'iOS']
})
@Injectable()
export class DocumentScanner extends IonicNativePlugin {
/**
* Scan a document
* @param opts {DocumentScannerOptions} optional parameter for controlling scanning
* @return {Promise<string>} file URL of scanned document image
*/
@Cordova({
callbackOrder: 'reverse'
})
scanDoc(opts?: DocumentScannerOptions): Promise<string> {
return;
}
}

View File

@@ -117,39 +117,39 @@ export interface FacebookLoginResponse {
})
@Injectable()
export class Facebook extends IonicNativePlugin {
EVENTS: {
EVENT_NAME_ACTIVATED_APP: 'fb_mobile_activate_app';
EVENT_NAME_DEACTIVATED_APP: 'fb_mobile_deactivate_app';
EVENT_NAME_SESSION_INTERRUPTIONS: 'fb_mobile_app_interruptions';
EVENT_NAME_TIME_BETWEEN_SESSIONS: 'fb_mobile_time_between_sessions';
EVENT_NAME_COMPLETED_REGISTRATION: 'fb_mobile_complete_registration';
EVENT_NAME_VIEWED_CONTENT: 'fb_mobile_content_view';
EVENT_NAME_SEARCHED: 'fb_mobile_search';
EVENT_NAME_RATED: 'fb_mobile_rate';
EVENT_NAME_COMPLETED_TUTORIAL: 'fb_mobile_tutorial_completion';
EVENT_NAME_PUSH_TOKEN_OBTAINED: 'fb_mobile_obtain_push_token';
EVENT_NAME_ADDED_TO_CART: 'fb_mobile_add_to_cart';
EVENT_NAME_ADDED_TO_WISHLIST: 'fb_mobile_add_to_wishlist';
EVENT_NAME_INITIATED_CHECKOUT: 'fb_mobile_initiated_checkout';
EVENT_NAME_ADDED_PAYMENT_INFO: 'fb_mobile_add_payment_info';
EVENT_NAME_PURCHASED: 'fb_mobile_purchase';
EVENT_NAME_ACHIEVED_LEVEL: 'fb_mobile_level_achieved';
EVENT_NAME_UNLOCKED_ACHIEVEMENT: 'fb_mobile_achievement_unlocked';
EVENT_NAME_SPENT_CREDITS: 'fb_mobile_spent_credits';
EVENT_PARAM_CURRENCY: 'fb_currency';
EVENT_PARAM_REGISTRATION_METHOD: 'fb_registration_method';
EVENT_PARAM_CONTENT_TYPE: 'fb_content_type';
EVENT_PARAM_CONTENT_ID: 'fb_content_id';
EVENT_PARAM_SEARCH_STRING: 'fb_search_string';
EVENT_PARAM_SUCCESS: 'fb_success';
EVENT_PARAM_MAX_RATING_VALUE: 'fb_max_rating_value';
EVENT_PARAM_PAYMENT_INFO_AVAILABLE: 'fb_payment_info_available';
EVENT_PARAM_NUM_ITEMS: 'fb_num_items';
EVENT_PARAM_LEVEL: 'fb_level';
EVENT_PARAM_DESCRIPTION: 'fb_description';
EVENT_PARAM_SOURCE_APPLICATION: 'fb_mobile_launch_source';
EVENT_PARAM_VALUE_YES: '1';
EVENT_PARAM_VALUE_NO: '0';
EVENTS = {
EVENT_NAME_ACTIVATED_APP: 'fb_mobile_activate_app',
EVENT_NAME_DEACTIVATED_APP: 'fb_mobile_deactivate_app',
EVENT_NAME_SESSION_INTERRUPTIONS: 'fb_mobile_app_interruptions',
EVENT_NAME_TIME_BETWEEN_SESSIONS: 'fb_mobile_time_between_sessions',
EVENT_NAME_COMPLETED_REGISTRATION: 'fb_mobile_complete_registration',
EVENT_NAME_VIEWED_CONTENT: 'fb_mobile_content_view',
EVENT_NAME_SEARCHED: 'fb_mobile_search',
EVENT_NAME_RATED: 'fb_mobile_rate',
EVENT_NAME_COMPLETED_TUTORIAL: 'fb_mobile_tutorial_completion',
EVENT_NAME_PUSH_TOKEN_OBTAINED: 'fb_mobile_obtain_push_token',
EVENT_NAME_ADDED_TO_CART: 'fb_mobile_add_to_cart',
EVENT_NAME_ADDED_TO_WISHLIST: 'fb_mobile_add_to_wishlist',
EVENT_NAME_INITIATED_CHECKOUT: 'fb_mobile_initiated_checkout',
EVENT_NAME_ADDED_PAYMENT_INFO: 'fb_mobile_add_payment_info',
EVENT_NAME_PURCHASED: 'fb_mobile_purchase',
EVENT_NAME_ACHIEVED_LEVEL: 'fb_mobile_level_achieved',
EVENT_NAME_UNLOCKED_ACHIEVEMENT: 'fb_mobile_achievement_unlocked',
EVENT_NAME_SPENT_CREDITS: 'fb_mobile_spent_credits',
EVENT_PARAM_CURRENCY: 'fb_currency',
EVENT_PARAM_REGISTRATION_METHOD: 'fb_registration_method',
EVENT_PARAM_CONTENT_TYPE: 'fb_content_type',
EVENT_PARAM_CONTENT_ID: 'fb_content_id',
EVENT_PARAM_SEARCH_STRING: 'fb_search_string',
EVENT_PARAM_SUCCESS: 'fb_success',
EVENT_PARAM_MAX_RATING_VALUE: 'fb_max_rating_value',
EVENT_PARAM_PAYMENT_INFO_AVAILABLE: 'fb_payment_info_available',
EVENT_PARAM_NUM_ITEMS: 'fb_num_items',
EVENT_PARAM_LEVEL: 'fb_level',
EVENT_PARAM_DESCRIPTION: 'fb_description',
EVENT_PARAM_SOURCE_APPLICATION: 'fb_mobile_launch_source',
EVENT_PARAM_VALUE_YES: '1',
EVENT_PARAM_VALUE_NO: '0'
};
/**

View File

@@ -1,6 +1,13 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
export interface FileChooserOptions {
/**
* comma seperated mime types to filter files.
*/
mime: string;
}
/**
* @name File Chooser
* @description
@@ -20,6 +27,8 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
* .catch(e => console.log(e));
*
* ```
* @interfaces
* FileChooserOptions
*/
@Plugin({
pluginName: 'FileChooser',
@@ -33,10 +42,11 @@ export class FileChooser extends IonicNativePlugin {
/**
* Open a file
* @param {FileChooserOptions} [options] Optional parameter, defaults to ''. Filters the file selection list according to mime types
* @returns {Promise<string>}
*/
@Cordova()
open(): Promise<string> {
open(options?: FileChooserOptions): Promise<string> {
return;
}

View File

@@ -18,6 +18,10 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
* .then(() => console.log('File is opened'))
* .catch(e => console.log('Error opening file', e));
*
* this.fileOpener.showOpenWithDialog('path/to/file.pdf', 'application/pdf')
* .then(() => console.log('File is opened'))
* .catch(e => console.log('Error opening file', e));
*
* ```
*/
@Plugin({
@@ -71,4 +75,19 @@ export class FileOpener extends IonicNativePlugin {
appIsInstalled(packageId: string): Promise<any> {
return;
}
/**
* Opens with system modal to open file with an already installed app.
* @param {string} filePath File Path
* @param {string} fileMIMEType File MIME Type
* @returns {Promise<any>}
*/
@Cordova({
callbackStyle: 'object',
successName: 'success',
errorName: 'error'
})
showOpenWithDialog(filePath: string, fileMIMEType: string): Promise<any> {
return;
}
}

View File

@@ -43,8 +43,8 @@ export interface FingerprintOptions {
* ...
*
* this.faio.show({
* clientId: 'Fingerprint-Demo',
* clientSecret: 'password', //Only necessary for Android
* clientId: 'Fingerprint-Demo', //Android: Used for encryption. iOS: used for dialogue if no `localizedReason` is given.
* clientSecret: 'o7aoOMYUbyxaD23oFAnJ' //Necessary for Android encrpytion of keys. Use random secret key.
* disableBackup:true, //Only for Android(optional)
* localizedFallbackTitle: 'Use Pin', //Only for iOS
* localizedReason: 'Please authenticate' //Only for iOS

View File

@@ -28,18 +28,38 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
plugin: 'cordova-plugin-firebase-config',
pluginRef: 'cordova.plugins.firebase.config',
repo: 'https://github.com/chemerisuk/cordova-plugin-firebase-config',
platforms: ['Android', 'iOS']
platforms: ['Android', 'iOS'],
})
@Injectable()
export class FirebaseConfig extends IonicNativePlugin {
/**
* Fetches remote config values with appropriate TTL and then activates them.
* Starts fetching configs, adhering to the specified minimum fetch interval.
*
* @param {number} ttlSeconds
* @param {number} expirationDuration
* @returns {Promise<null>}
*/
@Cordova({ sync: true })
update(ttlSeconds: number): Promise<null> {
fetch(expirationDuration?: number): Promise<null> {
return;
}
/**
* Asynchronously activates the most recently fetched configs, so that the fetched key value pairs take effect.
*
* @returns {Promise<null>}
*/
@Cordova({ sync: true })
activate(): Promise<null> {
return;
}
/**
* Asynchronously fetches and then activates the fetched configs.
*
* @returns {Promise<null>}
*/
@Cordova({ sync: true })
fetchAndActivate(): Promise<null> {
return;
}
@@ -47,11 +67,10 @@ export class FirebaseConfig extends IonicNativePlugin {
* Fetches a boolean configuration value from RemoteConfig
*
* @param {string} key
* @param {string} [namespace]
* @returns {Promise<boolean>}
*/
@Cordova({ sync: true })
getBoolean(key: string, namespace?: string): Promise<boolean> {
getBoolean(key: string): Promise<boolean> {
return;
}
@@ -59,11 +78,10 @@ export class FirebaseConfig extends IonicNativePlugin {
* Fetches a string configuration value from RemoteConfig
*
* @param {string} key
* @param {string} [namespace]
* @returns {Promise<boolean>}
*/
@Cordova({ sync: true })
getString(key: string, namespace?: string): Promise<string> {
getString(key: string): Promise<string> {
return;
}
@@ -71,11 +89,10 @@ export class FirebaseConfig extends IonicNativePlugin {
* Fetches a numeric configuration value from RemoteConfig
*
* @param {string} key
* @param {string} [namespace]
* @returns {Promise<boolean>}
*/
@Cordova({ sync: true })
getNumber(key: string, namespace?: string): Promise<number> {
getNumber(key: string): Promise<number> {
return;
}
@@ -83,11 +100,10 @@ export class FirebaseConfig extends IonicNativePlugin {
* Fetches an array of bytes configuration value from RemoteConfig
*
* @param {string} key
* @param {string} [namespace]
* @returns {Promise<boolean>}
*/
@Cordova({ sync: true })
getBytes(key: string, namespace?: string): Promise<any[]> {
getBytes(key: string): Promise<any[]> {
return;
}
}

View File

@@ -0,0 +1,64 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name FirebaseCrash
* @description
* This plugin brings crash reporting from Google Firebase to your Cordova project! Android and iOS supported.
*
* @usage
* ```typescript
* import { FirebaseCrash } from '@ionic-native/firebase-crash';
*
* constructor(private firebaseCrash: FirebaseCrash) { }
*
* ...
*
* this.firebaseCrash.setUserId('123456789');
* this.firebaseCrash.log('message');
* this.firebaseCrash.logError('non fatal exception');
*
* ```
*/
@Plugin({
pluginName: 'FirebaseCrash',
plugin: 'cordova-plugin-firebase-crash',
pluginRef: 'cordova.plugins.firebase.crashlytics',
repo: 'https://github.com/chemerisuk/cordova-plugin-firebase-crash',
platforms: ['Android', 'iOS']
})
@Injectable()
export class FirebaseCrash extends IonicNativePlugin {
/**
* Add logging that will be sent with your crash data in case of app crash.
* https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=0#add_custom_logs
* @param {string} message
* @return {Promise<any>}
*/
@Cordova({ sync: true })
log(message: string): Promise<any> {
return;
}
/**
* Log non-fatal exceptions in addition to automatically reported app crashes.
* https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=0#log_non-fatal_exceptions
* @param {string} message
* @return {Promise<any>}
*/
@Cordova({ sync: true })
logError(message: string): Promise<any> {
return;
}
/**
* Sets the user identifier property for crashlytics reporting.
* https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=0#set_user_ids
* @param {string} userId value to set the userId
* @returns {Promise<any>}
*/
@Cordova({ sync: true })
setUserId(userId: string): Promise<any> {
return;
}
}

View File

@@ -0,0 +1,182 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name Firebase Crashlytics
* @description
* A Google Firebase Crashlytics plugin to enable capture of crash reports.
*
* @usage
* ```typescript
* import { FirebaseCrashlytics } from '@ionic-native/firebase-crashlytics/ngx';
*
*
* constructor(private firebaseCrashlytics: FirebaseCrashlytics) { }
*
* ...
*
*
* const crashlytics = this.firebaseCrashlytics.initialize();
* crashlytics.logException('my caught exception');
*
* ```
*/
@Plugin({
pluginName: 'FirebaseCrashlytics',
plugin: 'cordova-plugin-firebase-crashlytics',
pluginRef: 'FirebaseCrashlytics',
repo: 'https://github.com/ReallySmallSoftware/cordova-plugin-firebase-crashlytics',
install: 'ionic cordova plugin add cordova-plugin-firebase-crashlytics --variable ANDROID_FIREBASE_CORE_VERSION=16.0.0',
installVariables: ['ANDROID_FIREBASE_CORE_VERSION'],
platforms: ['Android', 'iOS']
})
@Injectable()
export class FirebaseCrashlytics extends IonicNativePlugin {
/**
* Simply add the plugin to get the default Crashlytics functionality. Note that crashes and logged exceptions will only be reported when the application restarts. In order to log caught exceptions the following can be used:
*
* @returns {void}
*/
@Cordova({
sync: true
})
initialise(): any {
return; // We add return; here to avoid any IDE / Compiler errors
}
/**
* Generate a forced crash. Visible in console after restart of application.
*
* @returns {void}
*/
@Cordova({
sync: true
})
crash(): void {
return; // We add return; here to avoid any IDE / Compiler errors
}
/**
* Log a priority message. Will only be logged in the event of a crash.
*
* @param {number} priority
* @param {string} tag
* @param {string} message
* @returns {void}
*/
@Cordova({
sync: true
})
logPriority(priority: number, tag: string, message: string): void {
return;
}
/**
* Log a message. Will only be logged in the event of a crash.
*
* @param {string} message
* @returns {void}
*/
@Cordova({
sync: true
})
log(message: string): void {
return;
}
/**
* Log when a handled exception has happened. Visible in console after restart of application.
*
* @param {string} message
* @returns {void}
*/
@Cordova({
sync: true
})
logException(message: string): void {
return;
}
/**
* Set extra key/value string value. Will only be logged in the event of a crash.
*
* @param {string} key
* @param {string} value
* @returns {void}
*/
@Cordova({
sync: true
})
setString(key: string, value: string): void {
return;
}
/**
* Set extra key/value bool value. Will only be logged in the event of a crash.
*
* @param {string} key
* @param {boolean} value
* @returns {void}
*/
@Cordova({
sync: true
})
setBool(key: string, value: boolean): void {
return;
}
/**
* Set extra key/value double value. Will only be logged in the event of a crash.
*
* @param {string} key
* @param {number} value
* @returns {void}
*/
@Cordova({
sync: true
})
setDouble(key: string, value: number): void {
return;
}
/**
* Set extra key/value float value. Will only be logged in the event of a crash.
*
* @param {string} key
* @param {number} value
* @returns {void}
*/
@Cordova({
sync: true
})
setFloat(key: string, value: number): void {
return;
}
/**
* Set extra key/value integer value. Will only be logged in the event of a crash.
*
* @param {string} key
* @param {number} value
* @returns {void}
*/
@Cordova({
sync: true
})
setInt(key: string, value: number): void {
return;
}
/**
* Set the identifier for the user. Take care when using this method and ensure you privacy policy is updated accordingly.
*
* @param {string} identifier
* @returns {void}
*/
@Cordova({
sync: true
})
setUserIdentifier(identifier: string): void {
return;
}
}

View File

@@ -2,11 +2,41 @@ import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
import { Observable } from 'rxjs';
export interface IFirebaseMessage {
aps: any;
gcm: any;
export interface IFirebaseGCMMessage {
gcm: {
body: string;
title: string;
sound: string;
icon: string;
tag: string;
color: string;
clickAction: string;
};
'google.message_id': string;
'google.sent_time': number;
[key: string]: any;
}
export interface IFirebaseAPSMessage {
aps: {
alert: {
title: string;
body: string;
};
badge?: number;
};
'gcm.message_id': 'string';
[key: string]: any;
}
export type IFirebaseMessage = IFirebaseAPSMessage | IFirebaseGCMMessage;
export interface IRequestPermissionOptions {
forceShow?: boolean;
}
export type FirebaseMessagingTokenType = 'apns-buffer' | 'apns-string';
/**
* @beta
* @name Firebase Messaging
@@ -36,7 +66,7 @@ export interface IFirebaseMessage {
plugin: 'cordova-plugin-firebase-messaging',
pluginRef: 'cordova.plugins.firebase.messaging',
repo: 'https://github.com/chemerisuk/cordova-plugin-firebase-messaging',
platforms: ['Android', 'iOS']
platforms: ['Android', 'iOS'],
})
@Injectable()
export class FirebaseMessaging extends IonicNativePlugin {
@@ -61,22 +91,27 @@ export class FirebaseMessaging extends IonicNativePlugin {
}
/**
* Grant permission to recieve push notifications (will trigger prompt on iOS).
* Grant permission to receive push notifications (will trigger prompt on iOS).
*
* @param {IRequestPermissionOptions} [options]
* @returns {Promise<string>}
*/
@Cordova({ sync: true })
requestPermission(): Promise<string> {
requestPermission(options?: { forceShow?: boolean }): Promise<string> {
return;
}
/**
* Returns a promise that fulfills with the current FCM token
*
* This method also accepts optional argument type.
* Currently iOS implementation supports values "apns-buffer" and "apns-string" that defines presentation of resolved APNS token.
*
* @param {FirebaseMessagingTokenType} [type] iOS only. Defines presentation of resolved APNS token
* @returns {Promise<string>}
*/
@Cordova({ sync: true })
getToken(): Promise<string> {
getToken(type?: FirebaseMessagingTokenType): Promise<string> {
return;
}

View File

@@ -0,0 +1,527 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
import { Observable } from 'rxjs';
export interface IChannelOptions {
/**
* Channel ID - must be unique per app package
*/
id: string;
/**
* Channel name. Default: empty string
*/
name?: string;
/**
* The sound to play once a push comes. Default value: 'default'
* Values allowed:
* 'default' - plays the default notification sound
* 'ringtone' - plays the currently set ringtone
* 'false' - silent; don't play any sound
* filename - the filename of the sound file located in '/res/raw' without file extension (mysound.mp3 -> mysound)
*/
sound?: string;
/**
* Vibrate on new notification. Default value: true
* Possible values:
* Boolean - vibrate or not
* Array - vibration pattern - e.g. [500, 200, 500] - milliseconds vibrate, milliseconds pause, vibrate, pause, etc.
*/
vibration?: boolean;
/**
* Whether to blink the LED
*/
light?: boolean;
/**
* LED color in ARGB format - this example BLUE color. If set to -1, light color will be default. Default value: -1.
*/
lightColor?: string;
/**
* Importance - integer from 0 to 4. Default value: 4
* 0 - none - no sound, does not show in the shade
* 1 - min - no sound, only shows in the shade, below the fold
* 2 - low - no sound, shows in the shade, and potentially in the status bar
* 3 - default - shows everywhere, makes noise, but does not visually intrude
* 4 - high - shows everywhere, makes noise and peeks
*/
importance?: 0 | 1 | 2 | 3 | 4;
/**
* Show badge over app icon when non handled pushes are present. Default value: true
*/
badge?: boolean;
/**
* Show message on locked screen. Default value: 1
* Possible values (default 1):
* -1 - secret - Do not reveal any part of the notification on a secure lockscreen.
* 0 - private - Show the notification on all lockscreens, but conceal sensitive or private information on secure lockscreens.
* 1 - public - Show the notification in its entirety on all lockscreens.
*/
visibility?: -1 | 0 | 1;
}
/**
* @name Firebase X
* @description
* This plugin brings push notifications, analytics, event tracking, crash reporting and more from Google Firebase to your Cordova project! Android and iOS supported.
* It is a maintained fork from unmaintained ionic-navite plugin called Firebase.
*
* @usage
* ```typescript
* import { FirebaseX } from '@ionic-native/firebase-x';
*
*
* constructor(private firebaseX: FirebaseX) { }
*
* ...
*
*
* this.firebaseX.getToken()
* .then(token => console.log(`The token is ${token}`)) // save the token server-side and use it to push notifications to this device
* .catch(error => console.error('Error getting token', error));
*
* this.firebaseX.onMessageReceived()
* .subscribe(data => console.log(`User opened a notification ${data}`));
*
* this.firebaseX.onTokenRefresh()
* .subscribe((token: string) => console.log(`Got a new token ${token}`));
* ```
* @interfaces
* IChannelOptions
*
*/
@Plugin({
pluginName: 'FirebaseX',
plugin: 'cordova-plugin-firebasex',
pluginRef: 'FirebasePlugin',
repo: 'https://github.com/dpa99c/cordova-plugin-firebasex',
platforms: ['Android', 'iOS']
})
@Injectable()
export class FirebaseX extends IonicNativePlugin {
/**
* Get the device token.
* @return {Promise<null | string>} Note that token will be null if it has not been established yet
*/
@Cordova()
getToken(): Promise<null | string> {
return;
}
/**
* Get notified when a token is refreshed.
* @return {Observable<any>}
*/
@Cordova({
observable: true
})
onTokenRefresh(): Observable<any> {
return;
}
/**
* Registers a callback function to invoke when:
* - a notification or data message is received by the app
* - a system notification is tapped by the user
* @return {Observable<any>}
*/
@Cordova({
observable: true
})
onMessageReceived(): Observable<any> {
return;
}
/**
* Grant permission to receive push notifications (will trigger prompt) and return hasPermission: true. iOS only (Android will always return true).
* @return {Promise<any>}
*/
@Cordova({
platforms: ['iOS']
})
grantPermission(): Promise<any> {
return;
}
/**
* Check permission to receive push notifications and return hasPermission: true. iOS only (Android will always return true).
* @return {Promise<{isEnabled: boolean}>}
*/
@Cordova()
hasPermission(): Promise<{ isEnabled: boolean }> {
return;
}
/**
* Unregister from firebase, used to stop receiving push notifications. Call this when you logout user from your app.
*/
@Cordova()
unregister(): Promise<any> {
return;
}
/**
* Set a number on the icon badge. Set 0 to clear the badge
* @param {number} badgeNumber
* @return {Promise<any>}
*/
@Cordova()
setBadgeNumber(badgeNumber: number): Promise<any> {
return;
}
/**
* Get icon badge number.
* @return {Promise<any>}
*/
@Cordova()
getBadgeNumber(): Promise<any> {
return;
}
/**
* Clear all pending notifications from the drawer.
* @return {Promise<any>}
*/
@Cordova({
platforms: ['Android']
})
clearAllNotifications(): Promise<any> {
return;
}
/**
* Subscribe to a topic. Topic messaging allows you to send a message to multiple devices that have opted in to a particular topic.
* @param {string} topic
* @return {Promise<any>}
*/
@Cordova()
subscribe(topic: string): Promise<any> {
return;
}
/**
* Unsubscribe from a topic. This will stop you receiving messages for that topic.
* @param {string} topic
* @return {Promise<any>}
*/
@Cordova()
unsubscribe(topic: string): Promise<any> {
return;
}
/**
* Android 8+ only. Creates a custom channel to be used by notification messages which have the channel property set in the message payload to the id of the created channel:
* - for background (system) notifications: android.notification.channel_id
* - for foreground/data notifications: data.notification_android_channel_id
*
* Calling on Android 7 or below or another platform will have no effect.
* @param {IChannelOptions} channelOptions
* @return {Promise<any>}
*/
@Cordova()
createChannel(channelOptions: IChannelOptions): Promise<any> {
return;
}
/**
* Android 8+ only. Overrides the properties for the default channel.
* The default channel is used if no other channel exists or is specified in the notification.
* Any options not specified will not be overridden. Should be called as soon as possible (on app start) so default notifications will work as expected.
* Calling on Android 7 or below or another platform will have no effect.
* @param {IChannelOptions} channelOptions
* @return {Promise<any>}
*/
@Cordova()
setDefaultChannel(channelOptions: IChannelOptions): Promise<any> {
return;
}
/**
* Android 8+ only. Removes a previously defined channel.
* Calling on Android 7 or below or another platform will have no effect.
* @param {string} channelID
* @return {Promise<any>}
*/
@Cordova()
deleteChannel(channelID: string): Promise<any> {
return;
}
/**
* Android 8+ only. Gets a list of all channels.
* Calling on Android 7 or below or another platform will have no effect.
* @return {Promise<any>}
*/
@Cordova()
listChannels(): Promise<any> {
return;
}
/**
* Enable/disable analytics collection (useful for GDPR/privacy settings).
* @param {boolean} enabled
* @returns {Promise<any>}
*/
@Cordova()
setAnalyticsCollectionEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Log an event using Analytics
* @param {string} type
* @param {Object} data
* @return {Promise<any>}
*/
@Cordova()
logEvent(type: string, data: any): Promise<any> {
return;
}
/**
* Set the name of the current screen in Analytics
* @param {string} name Screen name
* @return {Promise<any>}
*/
@Cordova()
setScreenName(name: string): Promise<any> {
return;
}
/**
* Set a user id for use in Analytics
* @param {string} userId
* @return {Promise<any>}
*/
@Cordova()
setUserId(userId: string): Promise<any> {
return;
}
/**
* Set a user property for use in Analytics
* @param {string} name
* @param {string} value
* @return {Promise<any>}
*/
@Cordova()
setUserProperty(name: string, value: string): Promise<any> {
return;
}
/**
* Set Crashlytics user identifier.
* To diagnose an issue, its often helpful to know which of your users experienced a given crash.
* Crashlytics includes a way to anonymously identify users in your crash reports.
* To add user IDs to your reports, assign each user a unique identifier in the form of an ID number, token, or hashed value.
*
* More info https://firebase.google.com/docs/crashlytics/customize-crash-reports?authuser=0#set_user_ids
* @param {string} userId
* @returns {Promise<any>}
*/
@Cordova()
setCrashlyticsUserId(userId: string): Promise<any> {
return;
}
/**
* Simulates (causes) a fatal native crash which causes a crash event to be sent to Crashlytics (useful for testing).
* See the Firebase documentation regarding crash testing.
* Crashes will appear under Event type = "Crashes" in the Crashlytics console.
* @return {Promise<any>}
*/
@Cordova()
sendCrash(): Promise<any> {
return;
}
/**
* Sends a crash-related log message that will appear in the Logs section of the next native crash event.
* Note: if you don't then crash, the message won't be sent! Also logs the message to the native device console.
* @param {string} message
* @return {Promise<any>}
*/
@Cordova()
logMessage(message: string): Promise<any> {
return;
}
/**
* Sends a non-fatal error event to Crashlytics. In a Cordova app, you may use this to log unhandled Javascript exceptions, for example.
* The event will appear under Event type = "Non-fatals" in the Crashlytics console.
* The error message will appear in the Logs section of the non-fatal error event.
* Also logs the error message to the native device console.
* @param {string} error
* @return {Promise<any>}
*/
@Cordova()
logError(error: string): Promise<any> {
return;
}
/**
* Request a verification ID and send a SMS with a verification code. Use them to construct a credential to sign in the user (in your app).
*
* More info:
* https://github.com/dpa99c/cordova-plugin-firebasex#verifyphonenumber
* https://firebase.google.com/docs/auth/android/phone-auth
* https://firebase.google.com/docs/reference/js/firebase.auth.Auth#signInWithCredential
* https://firebase.google.com/docs/reference/js/firebase.User#linkWithCredential
*
* NOTE: This will only work on physical devices.
*
* iOS will return: credential (string)
*
* Android will return:
* credential.verificationId (object and with key verificationId)
* credential.instantVerification (boolean) credential.code (string)
* (note that this key only exists if instantVerification is true)
*
* You need to use device plugin in order to access the right key.
* IMPORTANT NOTE: Android supports auto-verify and instant device verification.
* Therefore in that case it doesn't make sense to ask for an sms code as you won't receive one.
* In this case you'll get a credential.verificationId and a credential.code where code is the auto received verification code
* that would normally be sent via sms. To log in using this procedure you must pass this code to
* PhoneAuthProvider.credential(verificationId, code). You'll find an implementation example further below.
*
* When using node.js Firebase Admin-SDK, follow this tutorial:
* https://firebase.google.com/docs/auth/admin/create-custom-tokens
*
* Pass back your custom generated token and call
* firebase.auth().signInWithCustomToken(customTokenFromYourServer);
* instead of
* firebase.auth().signInWithCredential(credential)
*
* YOU HAVE TO COVER THIS PROCESS, OR YOU WILL HAVE ABOUT 5% OF USERS STICKING ON YOUR SCREEN, NOT RECEIVING ANYTHING
* If this process is too complex for you, use this awesome plugin
* https://github.com/chemerisuk/cordova-plugin-firebase-authentication
* It's not perfect but it fits for the most use cases and doesn't require calling your endpoint, as it has native phone auth support.
*
* Android
* To use this auth you need to configure your app SHA hash in the android app configuration in the firebase console.
* See https://developers.google.com/android/guides/client-auth to know how to get SHA app hash.
*
* iOS
* Setup your push notifications first, and verify that they are arriving on your physical device before you test this method.
* Use the APNs auth key to generate the .p8 file and upload it to firebase. When you call this method,
* FCM sends a silent push to the device to verify it.
*
* @param {string} phoneNumber The phone number, including '+' and country code
* @param {number} timeoutDuration (Android only) The timeout in sec - no more SMS will be sent to this number until this timeout expires
* @returns {Promise<any>}
*/
@Cordova()
verifyPhoneNumber(
phoneNumber: string,
timeoutDuration = 0
): Promise<any> {
return;
}
/**
* Fetch Remote Config parameter values for your app.
* @param {number} cacheExpirationSeconds specify the cacheExpirationSeconds
* @return {Promise<any>}
*/
@Cordova()
fetch(cacheExpirationSeconds?: number): Promise<any> {
return;
}
/**
* Activate the Remote Config fetched config.
* @return {Promise<any>}
*/
@Cordova()
activateFetched(): Promise<any> {
return;
}
/**
* Retrieve a Remote Config value.
* @param {string} key
* @return {Promise<any>}
*/
@Cordova()
getValue(key: string): Promise<any> {
return;
}
/**
* Android only. Retrieve a Remote Config byte array.
* @param {string} key
* @return {Promise<any>}
*/
@Cordova()
getByteArray(key: string): Promise<any> {
return;
}
/**
* Android only. Get the current state of the FirebaseRemoteConfig singleton object.
* @return {Promise<any>}
*/
@Cordova()
getInfo(): Promise<any> {
return;
}
/**
* Android only. Change the settings for the FirebaseRemoteConfig object's operations.
* @param {Object} settings
* @return {Promise<any>}
*/
@Cordova()
setConfigSettings(settings: any): Promise<any> {
return;
}
/**
* Android only. Set defaults in the Remote Config.
* @param {Object} settings
* @return {Promise<any>}
*/
@Cordova()
setDefaults(settings: any): Promise<any> {
return;
}
/**
* Start a trace.
* @param {string} name
* @return {Promise<any>}
*/
@Cordova()
startTrace(name: string): Promise<any> {
return;
}
/**
* To count the performance-related events that occur in your app (such as cache hits or retries),
* add a line of code similar to the following whenever the event occurs,
* using a string other than retry to name that event if you are counting a different type of event.
* @param {string} name
* @return {Promise<any>}
*/
@Cordova()
incrementCounter(name: string): Promise<any> {
return;
}
/**
* Stop the trace.
* @param {string} name
* @return {Promise<any>}
*/
@Cordova()
stopTrace(name: string): Promise<any> {
return;
}
}

View File

@@ -343,6 +343,9 @@ export class Firebase extends IonicNativePlugin {
* Clear all pending notifications from the drawer
* @return {Promise<any>}
*/
@Cordova({
platforms: ['Android']
})
clearAllNotifications(): Promise<any> {
return;
}

View File

@@ -0,0 +1,94 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name Foreground Service
* @description
* This plugin allows for android devices to continue running services in the background, using a
* foreground ongoing notification. This is targeted towards use with plugins such as
* 'cordova-geolocation' that will not run while the app is in the background on android API 26+.
*
* For android API 28+, the following xml snippet should be inserted into ```config.xml```:
*
* ```
* ...
* <platform name="android">
* <config-file parent="/*" target="AndroidManifest.xml">
* <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
* </config-file>
* ...
* ```
* @usage
* ```typescript
* import { ForegroundService } from '@ionic-native/foreground-service/ngx';
*
*
* constructor(public foregroundService: ForegroundService) { }
*
* ...
*
* startService() {
* // Notification importance is optional, the default is 1 - Low (no sound or vibration)
* this.foregroundService.start('GPS Running', 'Background Service', 'drawable/fsicon');
* }
*
* stopService() {
* // Disable the foreground service
* this.foregroundService.stop();
* }
*
* ```
*/
@Plugin({
pluginName: 'ForegroundService',
plugin: 'cordova-plugin-foreground-service',
pluginRef: 'cordova.plugins.foregroundService',
repo: 'https://github.com/DavidBriglio/cordova-plugin-foreground-service',
platforms: ['Android']
})
@Injectable()
export class ForegroundService extends IonicNativePlugin {
/**
* Enables the foreground service
*
* @param {string} title (content title) A brief headline for the notification
* @param {string} text (content text) Supporting information
* @param {string} icon The drawable icon can be any drawable image that exists in the resource folder. This means you must copy the icon you want to use into the platforms/android/app/src/main/res/drawable folder set. If no icon can be found using the icon name parameter, a default star icon will be used.
*
* For an example, if the `fsicon.png` (see xml below) resides here: ```src/assets/icon/fsicon.png```. Then ```icon``` parameter value would be ```'drawable/fsicon'```. In order for this example to work, the following xml snippet must be in ```config.xml```.
*
* ```
* <platform name="android">
* <resource-file src="www/assets/icon/fsicon.png" target="app/src/main/res/drawable/fsicon.png" />
* ...
* ```
* @param {number} importance Notification importance dictates how the notification is initially presented:
*
* Value | Importance | Description | Examples
* --- | --- | --- | ---
* 1|IMPORTANCE_LOW|Does not make a sound or heads-up display (plugin's default)|New content the user has subscribed to, social network invitations
* 2|IMPORTANCE_DEFAULT|Makes a sound, but no heads-up display|Traffic alerts, task reminders
* 3|IMPORTANCE_HIGH|Makes a sound and heads-up display|Text messages, alarms, phone calls
*
* @param {number} id The notification id is a customizable integer that is used to reference the notification that will be launched. This is customizable to avoid conflicting with any other notifications. If this is not included, a [*unique*] default id will be used.
*
* @see https://material.io/design/platform-guidance/android-notifications.html
*/
@Cordova({
sync: true
})
start(title: string, text: string, icon?: string, importance: 1 | 2 | 3 = 1, id = 0): void {
return;
}
/**
* Disables the foreground service
*/
@Cordova({
sync: true
})
stop(): void {
return;
}
}

View File

@@ -0,0 +1,61 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
/**
* @name Full Screen Image
* @description
* This plugin does something
*
* @usage
* ```typescript
* import { FullScreenImage } from '@ionic-native/full-screen-image';
*
*
* constructor(private fullScreenImage: FullScreenImage) { }
*
* ...
*
* this.fullScreenImage.showImageURL('/assets/...')
* .then((data: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ...
*
* this.fullScreenImage.showImageBase64('iVBORw0KGgoAAAANSUhEUgAAA...')
* .then((data: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'FullScreenImage',
plugin: 'es.keensoft.fullscreenimage',
pluginRef: 'FullScreenImage',
repo: 'https://github.com/keensoft/FullScreenImage-Cordova-Plugin',
platforms: ['Android', 'iOS']
})
@Injectable()
export class FullScreenImage extends IonicNativePlugin {
/**
* Opens an image from a URL or path
* @param url {string} url or image path
* @return {Promise<any>}
*/
@Cordova({ sync: true })
showImageURL(url: string): Promise<any> {
return;
}
/**
* Opens an image from a base64 string
* @param base64String {string} base64 string
* @param name? {string} image name
* @param type? {string} image extension
* @return {Promise<any>}
*/
@Cordova({ sync: true })
showImageBase64(base64String: string, name?: string, type?: string): Promise<any> {
return;
}
}

View File

@@ -145,7 +145,7 @@ export class Geofence extends IonicNativePlugin {
*/
onNotificationClicked(): Observable<any> {
return new Observable<any>(observer => {
window &&
typeof window !== 'undefined' &&
window.geofence &&
(window.geofence.onNotificationClicked = observer.next.bind(observer));
return () => (window.geofence.onNotificationClicked = () => {});

View File

@@ -15,6 +15,13 @@ export interface ScoreData {
}
export interface PlayerScoreData {
/**
* The player score.
*/
playerScore: number;
}
export interface LeaderboardData {
/**
@@ -83,6 +90,40 @@ export interface Player {
}
export interface SubmittedScoreData {
/**
* The leaderboard ID from Goole Play Developer console.
*/
leaderboardId: string;
/**
* The player ID from Goole Play Developer console.
*/
playerId: string;
/**
* The score data in a display-appropriate format.
*/
formattedScore: string;
/**
* Whether or not this score was the player's new best score.
*/
newBest: boolean;
/**
* The raw score value of this score result.
*/
rawScore: number;
/**
* The score tag associated with this result, if any.
*/
scoreTag: string;
}
/**
* @name Google Play Games Services
* @description
@@ -126,6 +167,21 @@ export interface Player {
* leaderboardId: 'SomeLeaderboardId'
* });
*
* // Submit a score and wait for reponse.
* this.googlePlayGamesServices.submitScoreNow({
* score: 100,
* leaderboardId: 'SomeLeaderboardId'
* }).then((data: SubmittedScoreData) => {
* console.log('Score related data', data);
* });
*
* // Get the player score on a leaderboard.
* this.googlePlayGamesServices.getPlayerScore({
* leaderboardId: 'SomeLeaderBoardId'
* }).then((data: PlayerScoreData) => {
* console.log('Player score', data);
* });
*
* // Show the native leaderboards window.
* this.googlePlayGamesServices.showAllLeaderboards()
* .then(() => console.log('The leaderboard window is visible.'));
@@ -138,12 +194,23 @@ export interface Player {
* // Unlock an achievement.
* this.googlePlayGamesServices.unlockAchievement({
* achievementId: 'SomeAchievementId'
* }).then(() => console.log('Achievement sent'));
*
* // Unlock an achievement and wait for response.
* this.googlePlayGamesServices.unlockAchievementNow({
* achievementId: 'SomeAchievementId'
* }).then(() => console.log('Achievement unlocked'));
*
* // Incremement an achievement.
* this.googlePlayGamesServices.incrementAchievement({
* step: 1,
* achievementId: 'SomeAchievementId'
* }).then(() => console.log('Achievement increment sent'));
*
* // Incremement an achievement and wait for response.
* this.googlePlayGamesServices.incrementAchievementNow({
* step: 1,
* achievementId: 'SomeAchievementId'
* }).then(() => console.log('Achievement incremented'));
*
* // Show the native achievements window.
@@ -154,7 +221,7 @@ export interface Player {
*/
@Plugin({
pluginName: 'GooglePlayGamesServices',
plugin: 'cordova-plugin-play-games-service',
plugin: 'cordova-plugin-play-games-services',
pluginRef: 'plugins.playGamesServices',
repo: 'https://github.com/artberri/cordova-plugin-play-games-services',
platforms: ['Android'],
@@ -220,6 +287,33 @@ export class GooglePlayGamesServices extends IonicNativePlugin {
return;
}
/**
* Submit a score to a leaderboard and waits for the response from
* Google Play Games. You should ensure that you have a
* successful return from auth() before submitting a score.
*
* @param data {ScoreData} The score data you want to submit.
* @return {Promise<SubmittedScoreData>} Returns a promise that resolves when Play
* Games Services returns the score information.
*/
@Cordova()
submitScoreNow(data: ScoreData): Promise<SubmittedScoreData> {
return;
}
/**
* Get the player score on a leaderboard. You should ensure that you have a
* successful return from auth() before requesting a score.
*
* @param data {LeaderboardData} The leaderboard score you want to request.
* @return {Promise<PlayerScoreData>} Returns a promise that resolves when Play
* Games Services returns the player score.
*/
@Cordova()
getPlayerScore(data: LeaderboardData): Promise<PlayerScoreData> {
return;
}
/**
* Launches the native Play Games leaderboard view controller to show all the
* leaderboards.
@@ -250,25 +344,49 @@ export class GooglePlayGamesServices extends IonicNativePlugin {
*
* @param data {AchievementData}
* @return {Promise<any>} Returns a promise that resolves when the
* achievement is unlocked.
* achievement is sent.
*/
@Cordova()
unlockAchievement(data: AchievementData): Promise<string> {
return;
}
/**
* Unlock an achievement and wait for response.
*
* @param data {AchievementData}
* @return {Promise<any>} Returns a promise that resolves when the Play
* Games Services returns that the achievement is unlocked.
*/
@Cordova()
unlockAchievementNow(data: AchievementData): Promise<string> {
return;
}
/**
* Increment an achievement.
*
* @param data {IncrementableAchievementData}
* @return {Promise<any>} Returns a promise that resolves when the
* achievement is incremented.
* achievement is sent.
*/
@Cordova()
incrementAchievement(data: IncrementableAchievementData): Promise<string> {
return;
}
/**
* Increment an achievement and wait for response.
*
* @param data {IncrementableAchievementData}
* @return {Promise<any>} Returns a promise that resolves when the Play
* Games Services returns that the achievement has been incremented.
*/
@Cordova()
incrementAchievementNow(data: IncrementableAchievementData): Promise<string> {
return;
}
/**
* Lauches the native Play Games achievements view controller to show
* achievements.

View File

@@ -39,7 +39,7 @@ export class GooglePlus extends IonicNativePlugin {
successIndex: 1,
errorIndex: 2
})
login(options?: any): Promise<any> {
login(options: any): Promise<any> {
return;
}

View File

@@ -77,10 +77,7 @@ export class HTTP extends IonicNativePlugin {
* @returns {Object} an object representing a basic HTTP Authorization header of the form {'Authorization': 'Basic base64EncodedUsernameAndPassword'}
*/
@Cordova({ sync: true })
getBasicAuthHeader(
username: string,
password: string
): { Authorization: string } {
getBasicAuthHeader(username: string, password: string): { Authorization: string } {
return;
}
@@ -177,13 +174,14 @@ export class HTTP extends IonicNativePlugin {
/**
* Set SSL Cert handling mode, being one of the following values
* default: default SSL cert handling using system's CA certs
* legacy: use legacy default behavior (< 2.0.3), excluding user installed CA certs (only for Android)
* nocheck: disable SSL cert checking, trusting all certs (meant to be used only for testing purposes)
* pinned: trust only provided certs
* @see https://github.com/silkimen/cordova-plugin-advanced-http#setsslcertmode
* @param {'default' | 'nocheck' | 'pinned'} mode SSL Cert handling mode
* @param {'default' | 'legacy' | 'nocheck' | 'pinned'} mode SSL Cert handling mode
*/
@Cordova()
setSSLCertMode(mode: 'default' | 'nocheck' | 'pinned'): Promise<void> {
setSSLCertMode(mode: 'default' | 'legacy' | 'nocheck' | 'pinned'): Promise<void> {
return;
}
@@ -279,13 +277,7 @@ export class HTTP extends IonicNativePlugin {
* @returns {Promise<any>} returns a FileEntry promise that resolve on success, and reject on failure
*/
@Cordova()
uploadFile(
url: string,
body: any,
headers: any,
filePath: string,
name: string
): Promise<any> {
uploadFile(url: string, body: any, headers: any, filePath: string, name: string): Promise<any> {
return;
}
@@ -298,12 +290,41 @@ export class HTTP extends IonicNativePlugin {
* @returns {Promise<any>} returns a FileEntry promise that resolve on success, and reject on failure
*/
@Cordova()
downloadFile(
downloadFile(url: string, body: any, headers: any, filePath: string): Promise<any> {
return;
}
/**
*
* @param url {string} The url to send the request to
* @param options {Object} options for individual request
* @param options.method {string} request method
* @param options.data {Object} payload to be send to the server (only applicable on post, put or patch methods)
* @param options.params {Object} query params to be appended to the URL (only applicable on get, head, delete, upload or download methods)
* @param options.serializer {string} data serializer to be used (only applicable on post, put or patch methods), defaults to global serializer value, see setDataSerializer for supported values
* @param options.timeout {number} timeout value for the request in seconds, defaults to global timeout value
* @param options.headers {Object} headers object (key value pair), will be merged with global values
* @param options.filePath {string} filePath to be used during upload and download see uploadFile and downloadFile for detailed information
* @param options.name {string} name to be used during upload see uploadFile for detailed information
* @param options.responseType {string} response type, defaults to text
*
* @returns {Promise<HTTPResponse>} returns a promise that resolve on success, and reject on failure
*/
@Cordova()
sendRequest(
url: string,
body: any,
headers: any,
filePath: string
): Promise<any> {
options: {
method: 'get' | 'post' | 'put' | 'patch' | 'head' | 'delete' | 'upload' | 'download';
data?: { [index: string]: any };
params?: { [index: string]: string | number };
serializer?: 'json' | 'urlencoded' | 'utf8';
timeout?: number;
headers?: { [index: string]: string };
filePath?: string;
name?: string;
responseType?: 'text' | 'arraybuffer' | 'blob';
}
): Promise<HTTPResponse> {
return;
}
}

View File

@@ -42,7 +42,7 @@ export enum OutputType {
* Cordova Plugin For Multiple Image Selection
*
* Requires Cordova plugin: `cordova-plugin-image-picker`.
* For more info, please see the https://github.com/wymsee/cordova-imagePicker
* For more info, please see the https://github.com/Telerik-Verified-Plugins/ImagePicker
*
* @usage
* ```typescript

View File

@@ -10,84 +10,124 @@ import { Observable, Observer } from 'rxjs';
declare const cordova: Cordova & { InAppBrowser: any };
export interface InAppBrowserOptions {
/** Set to yes or no to turn the InAppBrowser's location bar on or off. */
location?: 'yes' | 'no';
/* Set to yes to create the browser and load the page, but not show it. The loadstop event fires when loading is complete.
* Omit or set to no (default) to have the browser open and load normally. */
hidden?: 'yes' | 'no';
/**
* (iOS Only) Set to yes or no to allow in-line HTML5 media playback, displaying within the browser window rather than a device-specific playback interface.
* The HTML's video element must also include the webkit-playsinline attribute (defaults to no)
*/
allowInlineMediaPlayback?: 'yes' | 'no';
/**
* set to enable the beforeload event to modify which pages are actually loaded in the browser. Accepted values are get to
* intercept only GET requests, post to intercept on POST requests or yes to intercept both GET & POST requests.
* Note that POST requests are not currently supported and will be ignored (if you set beforeload=post it will raise an error).
*/
beforeload?: 'yes' | 'get' | 'post';
/** Set to yes to have the browser's cookie cache cleared before the new window is opened. */
clearcache?: 'yes';
/* Set to yes to have the session cookie cache cleared before the new window is opened. */
/** set to yes to have the browser's entire local storage cleared (cookies, HTML5 local storage, IndexedDB, etc.) before the new window is opened */
cleardata?: 'yes';
/**
* Set to yes to have the session cookie cache cleared before the new window is opened.
* For WKWebView, requires iOS 11+ on target device.
*/
clearsessioncache?: 'yes';
/* (Android) Set to a string to use as the close button's caption instead of a X. Note that you need to localize this value yourself.
* (iOS) Set to a string to use as the Done button's caption. Note that you need to localize this value yourself. */
/**
* (Android) Set to a string to use as the close button's caption instead of a X. Note that you need to localize this value yourself.
* (iOS) Set to a string to use as the Done button's caption. Note that you need to localize this value yourself.
*/
closebuttoncaption?: string;
/* (Android) Set to a valid hex color string, for example: #00ff00, and it will change the close button color from default, regardless of being a text or default X. Only has effect if user has location set to yes.
* (iOS) Set as a valid hex color string, for example: #00ff00, to change from the default Done button's color. Only applicable if toolbar is not disabled. */
/**
* (Android) Set to a valid hex color string, for example: #00ff00, and it will change the close button color from default, regardless of being a text or default X. Only has effect if user has location set to yes.
* (iOS) Set as a valid hex color string, for example: #00ff00, to change from the default Done button's color. Only applicable if toolbar is not disabled.
*/
closebuttoncolor?: string;
/** (Android Only) Set to yes to show Android browser's zoom controls, set to no to hide them. Default value is yes. */
zoom?: 'yes' | 'no';
/* (Android & Windows Phone Only) Set to yes to use the hardware back button to navigate backwards through the InAppBrowser's history.
* If there is no previous page, the InAppBrowser will close. The default value is yes, so you must set it to no if you want the back button to simply close the InAppBrowser. */
hardwareback?: 'yes' | 'no';
/*
* Set to yes to prevent HTML5 audio or video from autoplaying (defaults to no). */
mediaPlaybackRequiresUserAction?: 'yes' | 'no';
/* (Android) Set to yes to hide the navigation buttons on the location toolbar, only has effect if user has location set to yes. The default value is no.
* (iOS) Set to yes or no to turn the toolbar navigation buttons on or off (defaults to no). Only applicable if toolbar is not disabled.*/
hidenavigationbuttons?: 'yes' | 'no';
/* (Android) Set to yes to hide the url bar on the location toolbar, only has effect if user has location set to yes. The default value is no.*/
hideurlbar?: 'yes' | 'no';
/* (Android) Set to a valid hex color string, for example: #00ff00, and it will change the color of both navigation buttons from default. Only has effect if user has location set to yes and not hidenavigationbuttons set to yes.
* (iOS) Set as a valid hex color string, for example: #00ff00, to change from the default color. Only applicable if navigation buttons are visible. */
navigationbuttoncolor?: string;
/* (Android) Set to a valid hex color string, for example: #00ff00, and it will change the color the toolbar from default. Only has effect if user has location set to yes.
* (iOS) Set as a valid hex color string, for example: #00ff00, to change from the default color of the toolbar. Only applicable if toolbar is not disabled.*/
toolbarcolor?: string;
/** (Android Only) Set to yes to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues) */
shouldPauseOnSuspend?: 'yes' | 'no';
/** (iOS Only) Set to yes or no (default is no). Turns on/off the UIWebViewBounce property. */
disallowoverscroll?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to prevent viewport scaling through a meta tag (defaults to no). */
enableViewportScale?: 'yes' | 'no';
/** (Android Only) Set to yes to show a close button in the footer similar to the iOS Done button. The close button will appear the same as for the header hence use closebuttoncaption and closebuttoncolor to set its properties */
footer?: 'yes' | 'no';
/** (Android Only) Set to a valid hex color string, for example #00ff00 or #CC00ff00 (#aarrggbb), and it will change the footer color from default. Only has effect if user has footer set to yes */
footercolor?: string;
/** (iOS Only) Set to yes or no (default is no). Turns on/off the UIWebViewBounce property. */
disallowoverscroll?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to turn the toolbar on or off for the InAppBrowser (defaults to yes) */
toolbar?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to make the toolbar translucent(semi-transparent) (defaults to yes). Only applicable if toolbar is not disabled. */
toolbartranslucent?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to prevent viewport scaling through a meta tag (defaults to no). */
enableViewportScale?: 'yes' | 'no';
/* (iOS Only) Set to yes or no to allow in-line HTML5 media playback, displaying within the browser window rather than a device-specific playback interface.
* The HTML's video element must also include the webkit-playsinline attribute (defaults to no) */
allowInlineMediaPlayback?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to open the keyboard when form elements receive focus via JavaScript's focus() call (defaults to yes). */
keyboardDisplayRequiresUserAction?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to wait until all new view content is received before being rendered (defaults to no). */
suppressesIncrementalRendering?: 'yes' | 'no';
/** (iOS Only) Set to pagesheet, formsheet or fullscreen to set the presentation style (defaults to fullscreen). */
presentationstyle?: 'pagesheet' | 'formsheet' | 'fullscreen';
/** (iOS Only) Set to fliphorizontal, crossdissolve or coververtical to set the transition style (defaults to coververtical). */
transitionstyle?: 'fliphorizontal' | 'crossdissolve' | 'coververtical';
/** (iOS Only) Set to top or bottom (default is bottom). Causes the toolbar to be at the top or bottom of the window. */
toolbarposition?: 'top' | 'bottom';
/**
* (Windows only) Set to yes to create the browser control without a border around it.
* Please note that if location=no is also specified, there will be no control presented to user to close IAB window.
*/
fullscreen?: 'yes';
/**
* (Android & Windows Only) Set to yes to use the hardware back button to navigate backwards through the InAppBrowser's history.
* If there is no previous page, the InAppBrowser will close. The default value is yes, so you must set it to no if you want the back button to simply close the InAppBrowser.
*/
hardwareback?: 'yes' | 'no';
/**
* Set to yes to create the browser and load the page, but not show it. The loadstop event fires when loading is complete.
* Omit or set to no (default) to have the browser open and load normally.
*/
hidden?: 'yes' | 'no';
/**
* (Android) Set to yes to hide the navigation buttons on the location toolbar, only has effect if user has location set to yes. The default value is no.
* (iOS) Set to yes or no to turn the toolbar navigation buttons on or off (defaults to no). Only applicable if toolbar is not disabled.
*/
hidenavigationbuttons?: 'yes' | 'no';
/**
* (iOS Only) Set to yes or no to change the visibility of the loading indicator (defaults to no).
*/
hidespinner?: 'yes' | 'no';
/* (Windows only) Set to yes to create the browser control without a border around it.
* Please note that if location=no is also specified, there will be no control presented to user to close IAB window. */
fullscreen?: 'yes';
/** (Android) Set to yes to hide the url bar on the location toolbar, only has effect if user has location set to yes. The default value is no. */
hideurlbar?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to open the keyboard when form elements receive focus via JavaScript's focus() call (defaults to yes). */
keyboardDisplayRequiresUserAction?: 'yes' | 'no';
/**
* (Android) Set to yes to swap positions of the navigation buttons and the close button. Specifically, navigation buttons go to the left and close button to the right.
* (iOS) Set to yes to swap positions of the navigation buttons and the close button. Specifically, close button goes to the right and navigation buttons to the left.
*/
lefttoright?: 'yes' | 'no';
/** Set to yes or no to turn the InAppBrowser's location bar on or off. */
location?: 'yes' | 'no';
/**
* Set to yes to prevent HTML5 audio or video from autoplaying (defaults to no).
*/
mediaPlaybackRequiresUserAction?: 'yes' | 'no';
/**
* (Android) Set to a valid hex color string, for example: #00ff00, and it will change the color of both navigation buttons from default. Only has effect if user has location set to yes and not hidenavigationbuttons set to yes.
* (iOS) Set as a valid hex color string, for example: #00ff00, to change from the default color. Only applicable if navigation buttons are visible.
*/
navigationbuttoncolor?: string;
/** (iOS Only) Set to pagesheet, formsheet or fullscreen to set the presentation style (defaults to fullscreen). */
presentationstyle?: 'pagesheet' | 'formsheet' | 'fullscreen';
/** (Android Only) Set to yes to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues) */
shouldPauseOnSuspend?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to wait until all new view content is received before being rendered (defaults to no). */
suppressesIncrementalRendering?: 'yes' | 'no';
/** (iOS Only) Set to yes or no to turn the toolbar on or off for the InAppBrowser (defaults to yes) */
toolbar?: 'yes' | 'no';
/**
* (Android) Set to a valid hex color string, for example: #00ff00, and it will change the color the toolbar from default. Only has effect if user has location set to yes.
* (iOS) Set as a valid hex color string, for example: #00ff00, to change from the default color of the toolbar. Only applicable if toolbar is not disabled.
*/
toolbarcolor?: string;
/** (iOS Only) Set to top or bottom (default is bottom). Causes the toolbar to be at the top or bottom of the window. */
toolbarposition?: 'top' | 'bottom';
/** (iOS Only) Set to yes or no to make the toolbar translucent(semi-transparent) (defaults to yes). Only applicable if toolbar is not disabled. */
toolbartranslucent?: 'yes' | 'no';
/** (iOS Only) Set to fliphorizontal, crossdissolve or coververtical to set the transition style (defaults to coververtical). */
transitionstyle?: 'fliphorizontal' | 'crossdissolve' | 'coververtical';
/** (Android Only) Sets whether the WebView should enable support for the "viewport" HTML meta tag or should use a wide viewport. When the value of the setting is no, the layout width is always set to the width of the WebView control in device-independent (CSS) pixels. When the value is yes and the page contains the viewport meta tag, the value of the width specified in the tag is used. If the page does not contain the tag or does not provide a width, then a wide viewport will be used. (defaults to yes). */
useWideViewPort?: 'yes' | 'no';
/** (iOS Only) Set to yes to use WKWebView engine for the InappBrowser. Omit or set to no (default) to use UIWebView. */
usewkwebview?: 'yes' | 'no';
/** (Android Only) Set to yes to show Android browser's zoom controls, set to no to hide them. Default value is yes. */
zoom?: 'yes' | 'no';
/**
* @hidden
*/
[key: string]: any;
}
export type InAppBrowserEventType = 'loadstart' | 'loadstop' | 'loaderror' | 'exit' | 'beforeload' | 'message';
export interface InAppBrowserEvent extends Event {
/** the eventname, either loadstart, loadstop, loaderror, or exit. */
type: string;
/** the event name */
type: InAppBrowserEventType;
/** the URL that was loaded. */
url: string;
/** the error code, only in the case of loaderror. */
@@ -129,7 +169,9 @@ export class InAppBrowserObject {
this._objectInstance = cordova.InAppBrowser.open(url, target, options);
} catch (e) {
window.open(url, target);
if (typeof window !== 'undefined') {
window.open(url, target);
}
console.warn(
'Native: InAppBrowser is not installed or you are running on a browser. Falling back to window.open.'
);
@@ -178,11 +220,11 @@ export class InAppBrowserObject {
/**
* A method that allows you to listen to events happening in the browser.
* @param event {string} Name of the event
* @param event {InAppBrowserEventType} Name of the event
* @returns {Observable<InAppBrowserEvent>} Returns back an observable that will listen to the event on subscribe, and will stop listening to the event on unsubscribe.
*/
@InstanceCheck()
on(event: string): Observable<InAppBrowserEvent> {
on(event: InAppBrowserEventType): Observable<InAppBrowserEvent> {
return new Observable<InAppBrowserEvent>(
(observer: Observer<InAppBrowserEvent>) => {
this._objectInstance.addEventListener(

View File

@@ -1,79 +1,10 @@
import { Cordova, CordovaProperty, IonicNativePlugin, Plugin } from '@ionic-native/core';
import { Injectable } from '@angular/core';
/**
* @name In App Purchase 2
* @description
* In-App Purchase for Cordova on iOS, Android and Windows
*
* @usage
* ```typescript
* import { InAppPurchase2 } from '@ionic-native/in-app-purchase-2/ngx';
*
* constructor(private store: InAppPurchase2) { }
*
* ...
* ```
*
* * @advanced
*
* ```typescript
* // After Platform Ready
* this.store.verbosity = this.store.DEBUG;
* this.store.register({
* id: productId,
* alias: productId,
* type: this.store.NON_RENEWING_SUBSCRIPTION
* });
*
* // Register Event Handlers for the specific product
* this.store.when(productId).registered( (product: IAPProduct) => {
* console.log('Registered: ' + JSON.stringify(product));
* });
*
* // Updated
* this.store.when(productId).updated( (product: IAPProduct) => {
* console.log('Loaded' + JSON.stringify(product));
* });
*
* // Issue with buying
* this.store.when(productId).cancelled( (product) => {
* alert('Purchase was Cancelled');
* });
*
* // Track All Store Errors
* this.store.error( (err) => {
* alert('Store Error ' + JSON.stringify(err));
* });
*
* this.store.ready(() => {
* console.log(JSON.stringify(this.store.get(productId)));
* console.log('Store is Ready: ' + JSON.stringify(status));
* console.log('Products: ' + JSON.stringify(this.store.products));
* });
*
*
* // Errors
* this.store.when(productId).error( (error) => {
* this.loader.dismiss();
* alert('An Error Occured' + JSON.stringify(error));
* });
* // Refresh Starts Handlers
* console.log('Refresh Store');
* this.store.refresh();
*
* ...
*
* // To Purchase
* this.store.order(productId);
*
* ```
*
*/
export interface IAPProductOptions {
id: string;
alias: string;
alias?: string;
type: string;
}
@@ -98,7 +29,7 @@ export interface IAPProduct {
id: string;
alias: string;
alias?: string;
type: string;
@@ -122,16 +53,91 @@ export interface IAPProduct {
owned: boolean;
downloading: boolean;
downloading?: boolean;
downloaded: boolean;
downloaded?: boolean;
additionalData: any;
lastRenewalDate?: Date;
transaction: any;
expiryDate?: Date;
introPrice?: string;
introPriceMicros?: number;
introPriceNumberOfPeriods?: number;
introPriceSubscriptionPeriod?: string;
introPricePaymentMode?: string;
ineligibleForIntroPrice?: boolean;
billingPeriod?: number;
billingPeriodUnit?: string;
trialPeriod?: number;
trialPeriodUnit?: string;
additionalData?: any;
transaction?: any;
/**
* Call `product.finish()` to confirm to the store that an approved order has been delivered.
*
* This will change the product state from `APPROVED` to `FINISHED` (see product life-cycle).
*
* As long as you keep the product in state `APPROVED`:
*
* - the money may not be in your account (i.e. user isn't charged)
* - you will receive the `approved` event each time the application starts,
* where you should try again to finish the pending transaction.
*
* **example use**
*
* ```js
* store.when("product.id").approved(function(product){
* // synchronous
* app.unlockFeature();
* product.finish();
* });
* ```
*
* ```js
* store.when("product.id").approved(function(product){
* // asynchronous
* app.downloadFeature(function() {
* product.finish();
* });
* });
* ```
*/
finish(): void;
/**
* Initiate purchase validation as defined by the `store.validator` attribute.
*
* **return value**
*
* A Promise with the following methods:
*
* - `done(function(product){})`
* - called whether verification failed or succeeded.
* - `expired(function(product){})`
* - called if the purchase expired.
* - `success(function(product, purchaseData){})`
* - called if the purchase is valid and verified.
* - `purchaseData` is the device dependent transaction details
* returned by the validator, which you can most probably ignore.
* - `error(function(err){})`
* - validation failed, either because of expiry or communication
* failure.
* - `err` is a store.Error object, with a code expected to be
* `store.ERR_PAYMENT_EXPIRED` or `store.ERR_VERIFICATION_FAILED`.
*/
verify(): any;
set(key: string, value: any): void;
@@ -149,23 +155,41 @@ export interface IAPProduct {
}
export interface IAPProductEvents {
/** Called when product data is loaded from the store. */
loaded: (callback: IAPQueryCallback) => void;
/** Called when any change occured to a product. */
updated: (callback: IAPQueryCallback) => void;
/** Called when an order failed. The `err` parameter is an IAPError object. */
error: (callback: IAPQueryCallback) => void;
/** Called when a product order is approved. */
approved: (callback: IAPQueryCallback) => void;
/** Called when a non-consumable product or subscription is owned. */
owned: (callback: IAPQueryCallback) => void;
/** Called when a product order is cancelled by the user. */
cancelled: (callback: IAPQueryCallback) => void;
/** Called when an order is refunded by the user. */
refunded: (callback: IAPQueryCallback) => void;
/** Called when product has just been registered. */
registered: (callback: IAPQueryCallback) => void;
/** Called when the product details have been successfully loaded. */
valid: (callback: IAPQueryCallback) => void;
/** Called when the product cannot be loaded from the store. */
invalid: (callback: IAPQueryCallback) => void;
/** Called when an order has just been requested. */
requested: (callback: IAPQueryCallback) => void;
/** Called when the purchase process has been initiated. */
initiated: (callback: IAPQueryCallback) => void;
/** Called when the purchase process has completed. */
finished: (callback: IAPQueryCallback) => void;
/** Called when receipt validation successful. */
verified: (callback: IAPQueryCallback) => void;
/** Called when receipt verification failed. */
unverified: (callback: IAPQueryCallback) => void;
/** Called when validation find a subscription to be expired. */
expired: (callback: IAPQueryCallback) => void;
/** Called when content download is started. */
downloading: (product: IAPProduct, progress: any, time_remaining: any) => void;
/** Called when content download has successfully completed. */
downloaded: (callback: IAPQueryCallback) => void;
}
@@ -180,18 +204,343 @@ export class IAPError {
/**
* @name In App Purchase 2
* @description
* In-App Purchase on iOS, Android, Windows, macOS and XBox.
*
* ## Features
*
* | | ios | android | win-8 | win-10/uwp | mac |
* |--|--|--|--|--|--|
* | consumables | ✅ | ✅ | ✅ | ✅ | ✅ |
* | non consumables | ✅ | ✅ | ✅ | ✅ | ✅ |
* | subscriptions | ✅ | ✅ | ✅ | ✅ | ✅ |
* | restore purchases | ✅ | ✅ | ✅ | ✅ | ✅ |
* | receipt validations | ✅ | ✅ | | ✅ | ✅ |
* | downloadable content | ✅ | | | | ✅ |
* | introductory prices | ✅ | ✅ | | ✅ | ✅ |
*
* Supports:
*
* - **iOS** version 7.0 or higher.
* - **Android** version 2.2 (API level 8) or higher
* - with Google Play client version 3.9.16 or higher
* - **Windows** Store/Phone 8.1 or higher
* - **Windows 10 Mobile**
* - **macOS** version 10
* - **Xbox One**
* - (and any platform supporting Microsoft's UWP)
*
* @usage
* ```
* ```typescript
* import { InAppPurchase2 } from '@ionic-native/in-app-purchase-2/ngx';
*
*
* constructor(private inAppPurchase2: InAppPurchase2) { }
* constructor(public platform: Platform, private store: InAppPurchase2) {
* platform.ready().then(() => {
* this.store.register({
* id: "my_product_id",
* type: this.store.NON_RENEWING_SUBSCRIPTION,
* });
* this.store.when("my_product_id")
* .approved(p => p.verify())
* .verified(p => p.finish());
* this.store.refresh();
* });
* }
*
* ...
*
* this.store.order("my_product_id");
*
* ```
*
* ## Full example
*
* ```typescript
* // After platform ready
* this.store.verbosity = this.store.DEBUG;
* this.store.register({
* id: "my_product_id",
* type: this.store.PAID_SUBSCRIPTION,
* });
*
* // Register event handlers for the specific product
* this.store.when("my_product_id").registered( (product: IAPProduct) => {
* console.log('Registered: ' + JSON.stringify(product));
* });
*
* // Updated
* this.store.when("my_product_id").updated( (product: IAPProduct) => {
* console.log('Updated' + JSON.stringify(product));
* });
*
* // User closed the native purchase dialog
* this.store.when("my_product_id").cancelled( (product) => {
* console.error('Purchase was Cancelled');
* });
*
* // Track all store errors
* this.store.error( (err) => {
* console.error('Store Error ' + JSON.stringify(err));
* });
*
* // Run some code only when the store is ready to be used
* this.store.ready(() => {
* console.log('Store is ready');
* console.log('Products: ' + JSON.stringify(this.store.products));
* console.log(JSON.stringify(this.store.get("my_product_id")));
* });
*
* // Refresh the status of in-app products
* this.store.refresh();
*
* ...
*
* // To make a purchase
* this.store.order("my_product_id");
*
* ```
*
* ## Philosophy
*
* The API is mostly events based. As a user of this plugin,
* you will have to register listeners to changes happening to the products
* you register.
*
* The core of the listening mechanism is the `when()` method. It allows you to
* be notified of changes to one or a set of products using a query mechanism:
* ```typescript
* this.store.when("product").updated(refreshScreen); // match any product
* this.store.when("full_version").owned(unlockApp); // match a specific product
* this.store.when("subscription").approved(serverCheck); // match all subscriptions
* this.store.when("downloadable content").downloaded(showContent);
* ```
*
* The `updated` event is fired whenever one of the fields of a product is
* changed (its `owned` status for instance).
*
* This event provides a generic way to track the statuses of your purchases,
* to unlock features when needed and to refresh your views accordingly.
*
* ## Registering products
*
* The store needs to know the type and identifiers of your products before you
* can use them in your code.
*
* Use `store.register()` to define them before your first call to `store.refresh()`.
*
* Once registered, you can use `store.get()` to retrieve an `IAPProduct` object.
*
* ```typescript
* this.store.register({
* id: "my_consumable1",
* type: this.store.CONSUMABLE
* });
* ...
* const p = this.store.get("my_consumable1");
* ```
*
* The product `id` and `type` have to match products defined in your
* Apple, Google or Microsoft developer consoles.
*
* Learn more about it [from the wiki](https://github.com/j3k0/cordova-plugin-purchase/wiki).
*
* ## Displaying products
*
* Right after you registered your products, nothing much is known about them
* except their `id`, `type` and an optional `alias`.
*
* When you perform the initial call to `store.refresh()`, the platforms' server will
* be contacted to load informations about the registered products: human
* readable `title` and `description`, `price`, etc.
*
* This isn't an optional step, store owners require you
* to display information about a product exactly as retrieved from their server: no
* hard-coding of price and title allowed! This is also convenient for you
* as you can change the price of your items knowing that it'll be reflected instantly
* on your clients' devices.
*
* Note that the information may not be available when the first view that needs
* them appears on screen. For you, the best option is to have your view monitor
* changes made to the product.
*
* ## Purchasing
*
* #### initiate a purchase
*
* Purchases are initiated using the `store.order("some_product_id")` method.
*
* The store will manage the internal purchase flow. It'll end:
*
* - with an `approved` event. The product enters the `APPROVED` state.
* - with a `cancelled` event. The product gets back to the `VALID` state.
* - with an `error` event. The product gets back to the `VALID` state.
*
* See the product life-cycle section for details about product states.
*
* #### finish a purchase
*
* Once the transaction is approved, the product still isn't owned: the store needs
* confirmation that the purchase was delivered before closing the transaction.
*
* To confirm delivery, you'll use the `product.finish()` method.
*
* #### example usage
*
* During initialization:
* ```typescript
* this.store.when("extra_chapter").approved((product: IAPProduct) => {
* // download the feature
* app.downloadExtraChapter()
* .then(() => product.finish());
* });
* ```
*
* When the purchase button is clicked:
* ```typescript
* this.store.order("extra_chapter");
* ```
*
* #### un-finished purchases
*
* If your app wasn't able to deliver the content, `product.finish()` won't be called.
*
* Don't worry: the `approved` event will be re-triggered the next time you
* call `store.refresh()`, which can very well be the next time
* the application starts. Pending transactions are persistant.
*
* #### simple case
*
* In the most simple case, where:
*
* - delivery of purchases is only local ;
* - you don't want (or need) to implement receipt validation ;
*
* You may just want to finish all purchases automatically. You can do it this way:
* ```js
* this.store.when("product").approved((p: IAPProduct) => p.finish());
* ```
*
* NOTE: the "product" query will match any purchases (see "queries" to learn more details about queries).
*
* ## Receipt validation
*
* To get the most up-to-date information about purchases (in case a purchase have been canceled, or a subscription renewed),
* you should implement server side receipt validation.
*
* This also protects you against fake "purchases", made by some users using
* "free in-app purchase" apps on their devices.
*
* When a purchase has been approved by the store, it's enriched with
* transaction information (see `product.transaction` attribute).
*
* To verify a purchase you'll have to do three things:
*
* - configure the validator.
* - call `product.verify()` from the `approved` event, before finishing the transaction.
* - finish the transaction when transaction is `verified`.
*
* **Shameless Plug**: this is a feature many users struggle with, so as the author of this plugin, we can provide it to you as-a-service: https://billing.fovea.cc/
* (which is free until you start making serious money)
*
* #### example using a validation URL
*
* ```js
* this.store.validator = "https://billing.fovea.cc/";
*
* this.store.when("my stuff")
* .approved((p: IAPProduct) => p.verify())
* .verified((p: IAPProduct) => p.finish());
* ```
*
* ## Subscriptions
*
* For subscription, you MUST implement remote receipt validation.
*
* When the receipt validator returns a `store.PURCHASE_EXPIRED` error code, the subscription will
* automatically loose its `owned` status.
*
* Typically, you'll enable and disable access to your content this way.
* ```typescript
* this.store.when("my_subcription").updated((product: IAPProduct) => {
* if (product.owned)
* app.subscriberMode();
* else
* app.guestMode();
* });
* ```
*
* ## Product life-cycle
*
* A product will change state during the application execution.
*
* Find below a diagram of the different states a product can pass by.
*
* ```
* REGISTERED +--> INVALID
* |
* +--> VALID +--> REQUESTED +--> INITIATED +-+
* |
* ^ +------------------------------+
* | |
* | | +--> DOWNLOADING +--> DOWNLOADED +
* | | | |
* | +--> APPROVED +--------------------------------+--> FINISHED +--> OWNED
* | |
* +-------------------------------------------------------------+
*
* #### Notes
*
* - When finished, a consumable product will get back to the `VALID` state, while other will enter the `OWNED` state.
* - Any error in the purchase process will bring a product back to the `VALID` state.
* - During application startup, products may go instantly from `REGISTERED` to `APPROVED` or `OWNED`, for example if they are purchased non-consumables or non-expired subscriptions.
* - Non-Renewing Subscriptions are iOS products only. Please see the [iOS Non Renewing Subscriptions documentation](https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/ios.md#non-renewing) for a detailed explanation.
*
* ## events
*
* - `loaded(IAPProduct)`
* - Called when product data is loaded from the store.
* - `updated(IAPProduct)`
* - Called when any change occured to a product.
* - `error(err)`
* - Called when an order failed.
* - The `err` parameter is an error object
* - `approved(IAPProduct)`
* - Called when a product order is approved.
* - `owned(IAPProduct)`
* - Called when a non-consumable product or subscription is owned.
* - `cancelled(IAPProduct)`
* - Called when a product order is cancelled by the user.
* - `refunded(IAPProduct)`
* - Called when an order is refunded by the user.
* - Actually, all other product states have their promise
* - `registered`, `valid`, `invalid`, `requested`,
* `initiated` and `finished`
* - `verified(IAPProduct)`
* - Called when receipt validation successful
* - `unverified(IAPProduct)`
* - Called when receipt verification failed
* - `expired(IAPProduct)`
* - Called when validation find a subscription to be expired
* - `downloading(IAPProduct, progress, time_remaining)`
* - Called when content download is started
* - `downloaded(IAPProduct)`
* - Called when content download has successfully completed
*
* ## Learn More
*
* - [GitHub](https://github.com/j3k0/cordova-plugin-purchase)
* - [GitBook](https://purchase.cordova.fovea.cc/)
* - [Wiki](https://github.com/j3k0/cordova-plugin-purchase/wiki)
* - [API reference](https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/api.md)
*
* ## Technical Support or Questions
*
* If you have questions or need help integrating In-App Purchase, [Open an Issue on GitHub](https://github.com/j3k0/cordova-plugin-purchase/issues) or email us at _support@fovea.cc_.
*
* @interfaces
* IAPProduct
* IAPProductOptions
* IAPProductEvents
* ```
*/
@Plugin({
pluginName: 'InAppPurchase2',
@@ -225,12 +574,26 @@ export class InAppPurchase2 extends IonicNativePlugin {
@CordovaProperty()
verbosity: number;
/**
* Set to true to clear the transaction queue. Not recommended for production.
* https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/api.md#random-tips
*/
@CordovaProperty()
autoFinishTransactions: boolean;
/**
* Set to true to invoke the platform purchase sandbox. (Windows only)
*/
@CordovaProperty()
sandbox: boolean;
/**
* Set to true to disable downloading of hosted content. (Apple only).
* Useful in development or when migrating your app away from Apple Hosted Content.
*/
@CordovaProperty()
disableHostedContent: boolean;
@CordovaProperty()
FREE_SUBSCRIPTION: string;
@@ -342,6 +705,8 @@ export class InAppPurchase2 extends IonicNativePlugin {
DOWNLOADED: string;
/* validation error codes */
@CordovaProperty()
INVALID_PAYLOAD: number;
@@ -351,11 +716,20 @@ export class InAppPurchase2 extends IonicNativePlugin {
@CordovaProperty()
PURCHASE_EXPIRED: number;
@CordovaProperty()
PURCHASE_CONSUMED: number;
@CordovaProperty()
INTERNAL_ERROR: number;
@CordovaProperty()
NEED_MORE_DATA: number;
@CordovaProperty()
products: IAPProducts;
@CordovaProperty()
validator: string | ((product: string | IAPProduct, callback: Function) => void);
validator: string | ((url: string | IAPProduct, callback: Function) => void);
@CordovaProperty()
log: {
@@ -387,7 +761,7 @@ export class InAppPurchase2 extends IonicNativePlugin {
* @param product {IAPProductOptions}
*/
@Cordova({ sync: true })
register(product: IAPProductOptions): void {}
register(product: IAPProductOptions | IAPProductOptions[]): void {}
/**
*
@@ -421,6 +795,29 @@ export class InAppPurchase2 extends IonicNativePlugin {
off(callback: Function): void {
}
/**
* Initiate the purchase of a product.
*
* The `product` argument can be either:
*
* - the `IAPProduct` object
* - the product `id`
* - the product `alias`
*
* The `additionalData` argument is an optional object with attributes:
* - `oldPurchasedSkus`: a string array with the old subscription to upgrade/downgrade on Android. See: [android developer](https://developer.android.com/google/play/billing/billing_reference.html#upgrade-getBuyIntentToReplaceSkus) for more info
* - `developerPayload`: string representing the developer payload as described in [billing best practices](https://developer.android.com/google/play/billing/billing_best_practices.html)
* - `applicationUsername`: the identifier of the user in your application.
*
* See the "Purchasing section" to learn more about the purchase process.
*
* **return value**
*
* `store.order()` returns a Promise with the following methods:
*
* - `then` - called when the order was successfully initiated.
* - `error` - called if the order couldn't be initiated.
*/
@Cordova({ sync: true })
order(product: string | IAPProduct, additionalData?: any): { then: Function; error: Function; } {
return;
@@ -428,9 +825,50 @@ export class InAppPurchase2 extends IonicNativePlugin {
@Cordova()
ready(callback: Function): void { return; }
/**
* After you're done registering your store's product and events handlers,
* time to call `store.refresh()`.
*
* This will initiate all the complex behind-the-scene work, to load product
* data from the servers and restore whatever already have been
* purchased by the user.
*
* Note that you can call this method again later during the application
* execution to re-trigger all that hard-work. It's kind of expensive in term of
* processing, so you'd better consider it twice.
*
* One good way of doing it is to add a "Refresh Purchases" button in your
* applications settings. This way, if delivery of a purchase failed or
* if a user wants to restore purchases he made from another device, he'll
* have a way to do just that.
*
* **example usage**
*
* ```typescript
* // ...
* // register products and events handlers here
* // ...
* //
* // then and only then, call refresh.
* this.store.refresh();
* ```
*
* **restore purchases**
*
* Add a "Refresh Purchases" button to call the `store.refresh()` method, like:
*
* `<button onclick="<pseudo_code>this.store.refresh()</pseudo_code>">Restore Purchases</button>`
*
* To make the restore purchases work as expected, please make sure that
* the "approved" event listener had be registered properly,
* and in the callback `product.finish()` should be called.
*/
@Cordova({ sync: true })
refresh(): void {
}
/** Opens the Manage Subscription page (AppStore, Play, Microsoft, ...). */
@Cordova({ sync: true })
manageSubscriptions(): void {}
}

View File

@@ -61,6 +61,15 @@ export class Intercom extends IonicNativePlugin {
return;
}
/**
*
* @return {Promise<any>} Returns a promise
*/
@Cordova()
logout(): Promise<any> {
return;
}
/**
*
* @param secureHash {string}
@@ -141,6 +150,15 @@ export class Intercom extends IonicNativePlugin {
return;
}
/**
*
* @return {Promise<any>} Returns a promise
*/
@Cordova()
displayHelpCenter(): Promise<any> {
return;
}
/**
*
* @return {Promise<any>} Returns a promise
@@ -188,4 +206,15 @@ export class Intercom extends IonicNativePlugin {
return;
}
/**
*
* @param token {string}
* @return {Promise<any>} Returns a promise
*/
@Cordova()
sendPushTokenToIntercom(token: string): Promise<any> {
return;
}
}

View File

@@ -18,7 +18,7 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
* ...
*
* this.launchReview.launch()
* .then(() => console.log('Successfully launched store app');
* .then(() => console.log('Successfully launched store app'));
*
* if(this.launchReview.isRatingSupported()){
* this.launchReview.rating()

View File

@@ -23,6 +23,11 @@ export interface LineLoginProfile {
* Line Profile Name
*/
displayName: string;
/**
* Email
*/
email?: string;
}
export interface LineLoginAccessToken {

View File

@@ -1,130 +0,0 @@
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
import { Injectable } from '@angular/core';
export type LinkedInLoginScopes = 'r_basicprofile' | 'r_emailaddress' | 'rw_company_admin' | 'w_share';
/**
* @name LinkedIn
* @description
* A Cordova plugin that lets you use LinkedIn Native SDKs for Android and iOS.
*
* Please see the [plugin's repo](https://github.com/zyramedia/cordova-plugin-linkedin#installation) for detailed installation steps.
*
* @usage
* ```typescript
* import { LinkedIn } from '@ionic-native/linkedin/ngx';
*
* constructor(private linkedin: LinkedIn) { }
*
* ...
*
* // check if there is an active session
* this.linkedin.hasActiveSession().then((active) => console.log('has active session?', active));
*
* // login
* const scopes = ['r_basicprofile', 'r_emailaddress', 'rw_company_admin', 'w_share'];
* this.linkedin.login(scopes, true)
* .then(() => console.log('Logged in!'))
* .catch(e => console.log('Error logging in', e));
*
*
* // get connections
* this.linkedin.getRequest('people/~')
* .then(res => console.log(res))
* .catch(e => console.log(e));
*
* // share something on profile
* const body = {
* comment: 'Hello world!',
* visibility: {
* code: 'anyone'
* }
* }
*
* this.linkedin.postRequest('~/shares', body)
* .then(res => console.log(res))
* .catch(e => console.log(e));
*
*
* ```
*/
@Plugin({
pluginName: 'LinkedIn',
plugin: 'cordova-plugin-linkedin',
pluginRef: 'cordova.plugins.LinkedIn',
repo: 'https://github.com/zyra/cordova-plugin-linkedin',
install: 'ionic cordova plugin add cordova-plugin-linkedin --variable APP_ID=YOUR_APP_ID',
installVariables: ['APP_ID'],
platforms: ['Android', 'iOS']
})
@Injectable()
export class LinkedIn extends IonicNativePlugin {
/**
* Login with the LinkedIn App
* @param scopes {string[]} Scopes to authorize
* @param promptToInstall {boolean} set to true to prompt the user to download the LinkedIn app if it's not installed
* @return {Promise<any>}
*/
@Cordova()
login(scopes: LinkedInLoginScopes[], promptToInstall: boolean): Promise<any> {
return;
}
/**
* Clears the current session
*/
@Cordova({ sync: true })
logout(): void {
}
/**
* Make a get request
* @param path {string} request path
* @return {Promise<any>}
*/
@Cordova()
getRequest(path: string): Promise<any> {
return;
}
/**
* Make a post request
* @param path {string} request path
* @param body {Object} request body
* @return {Promise<any>}
*/
@Cordova()
postRequest(path: string, body: any): Promise<any> {
return;
}
/**
* Opens a member's profile
* @param memberId {string} Member id
* @return {Promise<any>}
*/
@Cordova()
openProfile(memberId: string): Promise<any> {
return;
}
/**
* Checks if there is already an existing active session. This should be used to avoid unnecessary login.
* @return {Promise<boolean>} returns a promise that resolves with a boolean that indicates whether there is an active session
*/
@Cordova()
hasActiveSession(): Promise<boolean> {
return;
}
/**
* Checks if there is an active session and returns the access token if it exists.
* @return {Promise<any>} returns a promise that resolves with an object that contains an access token if there is an active session
*/
@Cordova()
getActiveSession(): Promise<any> {
return;
}
}

View File

@@ -0,0 +1,140 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
export interface LuxandConfig {
/** The licence key got from Luxand */
licence: string;
/** The internal database name the tracker should use */
dbname: string;
/** the number of retry when registering of identifying a face */
loginTryCount: number;
}
export interface OMLFacialData {
/** The status message */
status: string;
/** The message returned by the plugin */
message: string;
/** The unique name generated and associated to a face when registering */
name: string;
/** The unique id Luxand Face SDK tracker associate to a face in it's internal database */
id: number;
/** Extra information about the face including age, expressions */
extra: {
AGE?: any;
GENDER?: any;
EYESOPENED?: any;
SMILE: any;
};
}
/**
* @name Luxand
* @description
* This plugin let you integrat Luxand Face SDK into your ionic projects, so you can implements face authentication easily in your applications.
*
* @usage
* ```typescript
* import { Luxand } from '@ionic-native/luxand';
*
*
* constructor(private luxand: Luxand) { }
*
* ...
*
* //init Luxand Face SDK
*
* this.luxand.init({
* licence: "",
* dbname: "data.dat",
* loginTryCount: 3
* })
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
* // register a face
* this.luxand.register({
* timeout: 20000//20 seconds
* })
* .then(r=>{
* console.log("Your FACE ID:", r.id);
* console.log("Your AGE:", r.extra.AGE);
* console.log("Your GENDER:", r.extra.GENDER);
* console.log("SIMILING:", r.extra.SMILE>35? "YES": "NO");
* console.log("EYE OPENED:", r.extra.EYESOPENED>45? "YES": "NO");
* })
* .catch(err=>{
* if(err.messgae === "Already registered") {
* //extra data available
* console.log("Your AGE:", r.extra.AGE);
* console.log("Your GENDER:", r.extra.GENDER);
* console.log("SIMILING:", r.extra.SMILE>35? "YES": "NO");
* console.log("EYE OPENED:", r.extra.EYESOPENED>45? "YES": "NO");
* }
* })
* //to login using a face
* this.luxand.login({
* timeout: 20000
* }).then(r=>console.log(r))
* .catch(err=>console.log(err));
*
* ```
* @interfaces
* OMLFacialData
* LuxandConfig
*/
@Plugin({
pluginName: 'Luxand',
plugin: 'codova-plugin-luxand',
pluginRef: 'window.Luxand',
repo: 'https://github.com/molobala/cordova-plugin-luxand',
platforms: ['Android', 'iOS']
})
@Injectable()
export class Luxand extends IonicNativePlugin {
/**
* Initialize Luxand SDK
* @param config {LuxandConfig} LuxandConfig configuration object to use to init the SDK
* @return {Promise<any>} // Returns a promise that resolves if Luxand FaceSDK is initialized succesffully
*/
@Cordova()
init(config: LuxandConfig): Promise<any> {
return;
}
/**
* Identify methode, try to register a face in internal data base
* @param params {any} Allow to specify the timeout value
* @return {Promise<OMLFacialData>} // Returns a promise that resolve if a face has been detected and saved by the tracker in the internal database
*/
@Cordova()
register(params: {timeout: number}): Promise<OMLFacialData> {
return;
}
/**
* Login method, try to authenticated a face
* @param params {any} Allow to specify the timeout value
* @return {Promise<OMLFacialData>}
*/
@Cordova()
login(params: {timeout: number}): Promise<OMLFacialData> {
return; // Returns a promise that resolve if a face is recognize successfully
}
/**
* clear method, try to remove a face from internal database
* @param id {number}
* @return {Promise<any>}
*/
@Cordova()
clear(id: number): Promise<any> {
return;
}
/**
* clearMemory method, try to clear internal database
* @return {Promise<any>}
*/
@Cordova()
clearMemory(): Promise<any> {
return;
}
}

View File

@@ -0,0 +1,96 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
import { Observable } from 'rxjs';
export interface MagnetometerReading {
/**
* X reading of magnetometer. (Number)
*/
x: number;
/**
* Y reading of magnetometer. (Number)
*/
y: number;
/**
* Z reading of magnetometer. (Number)
*/
z: number;
/**
* Calculated total - always positive of magnetometer. (Number)
*/
magnitude: number;
}
/**
* @name Device eMagnetometer
* @description
* Requires Cordova plugin: `cordova-plugin-magnetometer`. For more info, please see the [Device Orientation docs](https://github.com/sdesalas/cordova-plugin-magnetometer).
*
* @usage
* ```typescript
* // DeviceOrientationCompassHeading is an interface for compass
* import { Magnetometer, MagnetometerReading } from '@ionic-native/device-orientation/ngx';
*
* constructor(private magnetometer: Magnetometer) { }
*
* ...
*
* // Get the device current compass heading
* this.deviceOrientation.getReading().then(
* (data: MagnetometerReading) => console.log(data),
* (error: any) => console.log(error)
* );
*
* // Watch the device compass heading change
* var subscription = this.deviceOrientation.watchReadings().subscribe(
* (data: MagnetometerReading) => console.log(data)
* );
*
* // Stop watching heading change
* subscription.unsubscribe();
* ```
* @interfaces
* MagnetometerReading
*/
@Plugin({
pluginName: 'Magnetometer',
plugin: 'cordova-plugin-magnetometer',
pluginRef: 'cordova.plugins.magnetometer',
repo: 'https://github.com/sdesalas/cordova-plugin-magnetometer',
platforms: [
'Android',
'iOS',
]
})
@Injectable()
export class Magnetometer extends IonicNativePlugin {
/**
* Get the current compass reading.
* @returns {Promise<MagnetometerReading>}
*/
@Cordova()
getReading(): Promise<MagnetometerReading> {
return;
}
/**
* Get the device current heading at a regular interval
*
* Stop the watch by unsubscribing from the observable
* @param {DeviceOrientationCompassOptions} [options] Options for compass. Frequency and Filter. Optional
* @returns {Observable<DeviceOrientationCompassHeading>} Returns an observable that contains the compass heading
*/
@Cordova({
callbackOrder: 'reverse',
observable: true,
clearFunction: 'stop'
})
watchReadings(
): Observable<MagnetometerReading> {
return;
}
}

View File

@@ -3,7 +3,7 @@ import { CordovaInstance, InstanceProperty, IonicNativePlugin, Plugin, checkAvai
export interface AuthenticationResult {
accessToken: string;
accesSTokenType: string;
accessTokenType: string;
expiresOn: Date;
idToken: string;
isMultipleResourceRefreshToken: boolean;

View File

@@ -134,6 +134,7 @@ export interface MusicControlsOptions {
* break;
* }
* }
* });
*
* this.musicControls.listen(); // activates the observable above
*
@@ -203,7 +204,7 @@ export class MusicControls extends IonicNativePlugin {
@Cordova({
platforms: ['iOS']
})
updateElapsed(args: { elapsed: string; isPlaying: boolean }): void {}
updateElapsed(args: { elapsed: number; isPlaying: boolean }): void {}
/**
* Toggle dismissable:

View File

@@ -8,7 +8,7 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
*
* @usage
* ```typescript
* import { NativeGeocoder, NativeGeocoderReverseResult, NativeGeocoderForwardResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder/ngx';
* import { NativeGeocoder, NativeGeocoderResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder/ngx';
*
* constructor(private nativeGeocoder: NativeGeocoder) { }
*
@@ -20,16 +20,15 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
* };
*
* this.nativeGeocoder.reverseGeocode(52.5072095, 13.1452818, options)
* .then((result: NativeGeocoderReverseResult[]) => console.log(JSON.stringify(result[0])))
* .then((result: NativeGeocoderResult[]) => console.log(JSON.stringify(result[0])))
* .catch((error: any) => console.log(error));
*
* this.nativeGeocoder.forwardGeocode('Berlin', options)
* .then((coordinates: NativeGeocoderForwardResult[]) => console.log('The coordinates are latitude=' + coordinates[0].latitude + ' and longitude=' + coordinates[0].longitude))
* .then((result: NativeGeocoderResult[]) => console.log('The coordinates are latitude=' + result[0].latitude + ' and longitude=' + result[0].longitude))
* .catch((error: any) => console.log(error));
* ```
* @interfaces
* NativeGeocoderReverseResult
* NativeGeocoderForwardResult
* NativeGeocoderResult
* NativeGeocoderOptions
*/
@Plugin({
@@ -47,32 +46,40 @@ export class NativeGeocoder extends IonicNativePlugin {
* @param latitude {number} The latitude
* @param longitude {number} The longitude
* @param options {NativeGeocoderOptions} The options
* @return {Promise<NativeGeocoderReverseResult[]>}
* @return {Promise<NativeGeocoderResult[]>}
*/
@Cordova({
callbackOrder: 'reverse'
})
reverseGeocode(latitude: number, longitude: number, options?: NativeGeocoderOptions): Promise<NativeGeocoderReverseResult[]> { return; }
reverseGeocode(latitude: number, longitude: number, options?: NativeGeocoderOptions): Promise<NativeGeocoderResult[]> { return; }
/**
* Forward geocode a given address to find coordinates
* @param addressString {string} The address to be geocoded
* @param options {NativeGeocoderOptions} The options
* @return {Promise<NativeGeocoderForwardResult[]>}
* @return {Promise<NativeGeocoderResult[]>}
*/
@Cordova({
callbackOrder: 'reverse'
})
forwardGeocode(addressString: string, options?: NativeGeocoderOptions): Promise<NativeGeocoderForwardResult[]> { return; }
forwardGeocode(addressString: string, options?: NativeGeocoderOptions): Promise<NativeGeocoderResult[]> { return; }
}
/**
* Encapsulates format information about a reverse geocoding result.
* Encapsulates format information about a geocoding result.
* more Info:
* - https://developer.apple.com/documentation/corelocation/clplacemark
* - https://developer.android.com/reference/android/location/Address.html
*/
export interface NativeGeocoderReverseResult {
export interface NativeGeocoderResult {
/**
* The latitude.
*/
latitude: string;
/**
* The longitude.
*/
longitude: string;
/**
* The country code.
*/
@@ -109,20 +116,10 @@ export interface NativeGeocoderReverseResult {
* The subThoroughfare.
*/
subThoroughfare: string;
}
/**
* Encapsulates format information about a forward geocoding result.
*/
export interface NativeGeocoderForwardResult {
/**
* The latitude.
* The areasOfInterest
*/
latitude: string;
/**
* The longitude.
*/
longitude: string;
areasOfInterest: string[];
}
/**

View File

@@ -104,7 +104,7 @@ export class Network extends IonicNativePlugin {
* @return {Observable<any>}
*/
@CordovaCheck()
onchange(): Observable<any> {
onChange(): Observable<any> {
return merge(this.onConnect(), this.onDisconnect());
}

View File

@@ -196,7 +196,7 @@ export class NFC extends IonicNativePlugin {
* @returns {Promise<any>}
*/
@Cordova()
makeReadyOnly(): Promise<any> {
makeReadOnly(): Promise<any> {
return;
}

View File

@@ -0,0 +1,167 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
export enum OCRSourceType {
/**
* Normal processing from a file URL. This is the overall recommended choice
* for most applications. The distinction between file and native URLs is
* only relevant on iOS; under Android `NORMFILEURL` and `NORMNATIVEURL`
* are interchangeable.
*/
NORMFILEURL = 0,
/**
* Normal processing from a native URL. Since this source type uses deprecated
* OS APIs to interact with the camera plugin, it is best avoided, especially
* if ongoing forward compatibility is a concern. For further information, see
* https://github.com/NeutrinosPlatform/cordova-plugin-mobile-ocr#plugin-usage
* Under Android, this is equivalent to `NORMFILEURL`.
*/
NORMNATIVEURL = 1,
/**
* Fast processing from a file URL. As the compression done internally causes
* a significant loss in extraction quality, it should only be preferred when
* dealing with large images containing significant amounts of text, where
* the execution time required to perform normal processing is prohibitive.
* The distinction between file and native URLs is only relevant on iOS;
* under Android `FASTFILEURL` and `FASTNATIVEURL` are interchangeable.
*/
FASTFILEURL = 2,
/**
* Fast processing from a native URL. See comments above for `FASTFILEURL`
* concerning quality loss.
*
* The distinction between file and native URLs is only relevant on iOS;
* under Android `FASTFILEURL` and `FASTNATIVEURL` are interchangeable.
*/
FASTNATIVEURL = 3,
/**
* Normal processing from a base64-encoded string. Quality is equivalent
* to `NORMFILEURL`, but due to significantly higher memory requirements,
* is only appropriate for use with very small images.
*/
BASE64 = 4,
}
/**
* Four points (ordered in clockwise direction) that enclose a text
* component. May not be axis-aligned due to perspective skew.
*/
export interface OCRCorners {
x1: number;
y1: number;
x2: number;
y2: number;
x3: number;
y3: number;
x4: number;
y4: number;
}
/**
* An axis-aligned bounding rectangle. `x` and `y` represent the top left.
*/
export interface OCRRect {
x: number;
y: number;
height: number;
width: number;
}
/**
* This is the return value from the `recText` method.
*/
export interface OCRResult {
/**
* Was any text extracted? If `foundText` is false, no other fields are
* returned. If foundText is true, all other fields are reliable.
*/
foundText: boolean;
/**
* A block is the largest unit of text, which can be thought of as a paragraph.
* This field consists of several parallel arrays, so the text in `blocktext[0]`
* is bounded by `blockpoints[0]` and `blockframe[0]`.
*/
blocks: {
blocktext: string[];
blockpoints: OCRCorners[];
blockframe: OCRRect[];
};
/**
* A line is the central unit of text, containing several elements. A block
* can contain N lines. This field consists of several parallel arrays, so the
* text in `linetext[0]` is bounded by `linepoints[0]` and `lineframe[0]`.
*/
lines: {
linetext: string[];
linepoints: OCRCorners[];
lineframe: OCRRect[];
};
/**
* A word (or element) is the smallest unit of text. This field consists of
* several parallel arrays, so the text in `wordtext[0]` is bounded by
* `wordpoints[0]` and `wordframe[0]`.
*/
words: {
wordtext: string[];
wordpoints: OCRCorners[];
wordframe: OCRRect[];
};
}
/**
* @name MobileOCR
* @description
* This plugin attempts to identify and extract text from an image.
*
* @usage
* ```typescript
* import { MobileOCR, OCRSourceType } from '@ionic-native/ocr/ngx';
*
*
* constructor(private ocr: MobileOCR) { }
*
* ...
*
* this.ocr.recText(OCRSourceType.NORMFILEURL, "file://path/to/image.png")
* .then((res: OCRResult) => console.log(JSON.stringify(res)))
* .catch((error: any) => console.error(error));
*
* ```
*
* @interfaces
* OCRCorners
* OCRRect
* OCRResult
*
* @enums
* OCRSourceType
*/
@Plugin({
pluginName: 'OCR',
plugin: 'cordova-plugin-mobile-ocr',
pluginRef: 'textocr',
repo: 'https://github.com/NeutrinosPlatform/cordova-plugin-mobile-ocr',
platforms: ['Android', 'iOS']
})
@Injectable()
export class OCR extends IonicNativePlugin {
/**
* Extract text from image
* @param sourceType {OCRSourceType} type of image source
* @param source {string} image source (either file URL or base64 string)
* @return {Promise<OCRResult>} extracted text and geometry
*/
@Cordova()
recText(sourceType: OCRSourceType, source: string): Promise<OCRResult> {
return;
}
}

View File

@@ -770,4 +770,19 @@ export class OneSignal extends IonicNativePlugin {
*/
@Cordova()
userProvidedPrivacyConsent(callback: Function): void {}
/**
* Allows you to use your own system's user ID's to send push notifications to your users.
* To tie a user to a given user ID, you can use this method.
* @param {string} externalId
*/
@Cordova()
setExternalUserId(externalId: string): void {}
/**
* Removes whatever was set as the current user's external user ID.
*/
@Cordova()
removeExternalUserId(): void {}
}

View File

@@ -6,6 +6,27 @@ export interface PhotoViewerOptions {
* Set to false to disable the share button (Android only). Default: true
*/
share?: boolean;
/**
* Add HTTP headers to the request. Useful for authenticated pages.
* The value is a string in a JSON format. Default: ''
*/
headers?: string;
/**
* Option for close button visibility when share false [ONLY FOR iOS]
*/
closeButton?: boolean;
/**
* If you need to copy image to reference before show then set it true [ONLY FOR iOS]
*/
copyToReference?: boolean;
/**
* Enable or Disable Picasso Options ( Only Android ): fit, centerInside, centerCrop.
*/
piccasoOptions?: {
fit?: boolean;
centerInside?: boolean;
centerCrop?: boolean;
};
}
/**
@@ -22,6 +43,8 @@ export interface PhotoViewerOptions {
* this.photoViewer.show('https://mysite.com/path/to/image.jpg');
*
* this.photoViewer.show('https://mysite.com/path/to/image.jpg', 'My image title', {share: false});
*
* this.photoViewer.show('https://mysecuresite.com/path/to/image.jpg', 'My image title', {share: false, headers: '{username:foo,password:bar}'});
* ```
*/
@Plugin({

View File

@@ -0,0 +1,418 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
import { Observable } from 'rxjs';
/**
* @name Purchases
* @description
* Purchases is a cross platform solution for managing in-app subscriptions. A backend is also provided via [RevenueCat](https://www.revenuecat.com)
*
* ## Features
* | | RevenueCat |
* | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
* | ✅ | Server-side receipt validation |
* | ➡️ | [Webhooks](https://docs.revenuecat.com/docs/webhooks) - enhanced server-to-server communication with events for purchases, renewals, cancellations, and more |
* | 🎯 | Subscription status tracking - know whether a user is subscribed whether they're on iOS, Android or web |
* | 📊 | Analytics - automatic calculation of metrics like conversion, mrr, and churn |
* | 📝 | [Online documentation](https://docs.revenuecat.com/docs) up to date |
* | 🔀 | [Integrations](https://www.revenuecat.com/integrations) - over a dozen integrations to easily send purchase data where you need it |
* | 💯 | Well maintained - [frequent releases](https://github.com/RevenueCat/purchases-ios/releases) |
* | 📮 | Great support - [Help Center](https://docs.revenuecat.com/discuss) |
* | 🤩 | Awesome [new features](https://trello.com/b/RZRnWRbI/revenuecat-product-roadmap) |
*
* ## Getting Started
*
* For more detailed information, you can view our complete documentation at [docs.revenuecat.com](https://docs.revenuecat.com/docs).
*
* @usage
* #### 1. Get a RevenueCat API key
*
* Log in to the [RevenueCat dashboard](https://app.revenuecat.com) and obtain a free API key for your application.
*
* #### 2. Initialize the SDK
*
* You should only configure _Purchases_ once (usually on app launch) as soon as your app has a unique user id for your user. This can be when a user logs in if you have accounts or on launch if you can generate a random user identifier.
*
* ```typescript
* import { Platform } from "@ionic/angular";
* import { Purchases } from "@ionic-native/purchases/ngx";
*
* constructor(public platform: Platform, private purchases: Purchases) {
* platform.ready().then(() => {
* this.purchases.setDebugLogsEnabled(true); // Enable to get debug logs
* this.purchases.setup("my_api_key", "my_app_user_id");
* }
* }
* ```
* #### 3. Displaying Available Products
*
* _Purchases_ will automatically fetch the latest _active_ entitlements and get the product information from Apple or Google. This means when users launch your purchase screen, products will already be loaded.
*
* Below is an example of fetching entitlements and launching an upsell screen.
*
* ```typescript
* this.purchases.getEntitlements()
* .subscribe(entitlements => ,
* error => );
* ```
*
* #### 4. Make a purchase
*
* When it comes time to make a purchase, _Purchases_ has a simple method, `makePurchase`. The code sample below shows the process of purchasing a product and confirming it unlocks the "my_entitlement_identifier" content.
*
* ```typescript
* this.purchases.makePurchase("product_id")
* .subscribe(response => {
* if (response.purchaserInfo.activeEntitlements.includes("my_entitlement_identifier")) {
* // Unlock content
* }
* },
* ({ error, userCancelled }) => // Error making purchase. You can check error.userCancelled to check if user cancelled the purchase
* );
*
* ```
*
* `makePurchase` handles the underlying framework interaction and automatically validates purchases with Apple and Google through our secure servers. This helps reduce in-app purchase fraud and decreases the complexity of your app. Receipt tokens are stored remotely and always kept up-to-date.
*
* #### 5. Get Subscription Status
*
* _Purchases_ makes it easy to check what active subscriptions the current user has. This can
* be done two ways within the `.purchaserInfo` method:
*
* 1. Checking active Entitlements - this lets you see what entitlements ([from RevenueCat dashboard](https://app.revenuecat.com))
* are active for the user.
* 2. Checking the active subscriptions - this lets you see what product ids (from iTunes Connect or Play Store) are active for the user.
*
* ```typescript
* this.purchases.getPurchaserInfo()
* .subscribe(info => {
* // Option 1: Check if user has access to entitlement (from RevenueCat dashboard)
* const isPro =
* info.activeEntitlements !== "undefined" &&
* info.activeEntitlements.includes("pro");
* // Option 2: Check if user has active subscription (from App Store Connect or Play Store)
* const isPro =
* info.activeSubscriptions !== "undefined" &&
* info.activeSubscriptions.includes("my_product_identifier");
* },
* error => );
* ```
*
* > Since the SDK updates and caches the latest PurchaserInfo when the app becomes active, the completion block in `.purchaserInfo` won't need to make a network request in most cases.
*
* ### Restoring Purchases
*
* Restoring purchases is a mechanism by which your user can restore their in-app purchases, reactivating any content that had previously been purchased from the same store account (Apple or Google).
*
* If two different App User IDs try to restore transactions from the same underlying store account (Apple or Google) RevenueCat will create an alias between the two App User IDs and count them as the same user going forward.
*
* This is a common if your app does not have accounts and is relying on RevenueCat's random App User IDs.
*
* ```typescript
* this.purchases.restore()
* .subscribe(info => {
* //... check purchaserInfo to see if entitlement is now active
* },
* error => );
* ```
* > If you've provided your own App User ID, calling restoreTransactions could alias the logged in user to another generated App User ID that has made a purchase on the same device.
*
* > By default, RevenueCat will not let you reuse an App or Play Store account that already has an active subscription. If you set allowSharingAppStoreAccount = True the SDK will be permissive in accepting shared accounts, creating aliases as needed.
*
* > By default allowSharingAppStoreAccount is True for RevenueCat random App User IDs but must be enabled manually if you want to allow permissive sharing for your own App User IDs.
*
* ## Debugging
*
* You can enabled detailed debug logs by setting `debugLogsEnabled = true`. You can set this **before** you configure Purchases.
*
* ```typescript
* this.purchases.setDebugLogsEnabled(true);
* this.purchases.setup("my_api_key", "my_app_user_id");
* ```
*
* **OS_ACTIVITY_MODE**
* > On iOS, disabling `OS_ACTIVITY_MODE` in your XCode scheme will block debug logs from printing in the console. If you have debug logs enabled, but don't see any output, go to `Product -> Scheme -> Edit Scheme...` in Xcode and uncheck the `OS_ACTIVITY_MODE` environment variable.
*
* Example output:
* ```
* [Purchases] - DEBUG: Debug logging enabled.
* [Purchases] - DEBUG: SDK Version - 2.0.0
* [Purchases] - DEBUG: Initial App User ID - (null)
* [Purchases] - DEBUG: GET /v1/subscribers/<APP_USER_ID>
* [Purchases] - DEBUG: GET /v1/subscribers/<APP_USER_ID>/products
* [Purchases] - DEBUG: No cached entitlements, fetching
* [Purchases] - DEBUG: Vending purchaserInfo from cache
* [Purchases] - DEBUG: applicationDidBecomeActive
* [Purchases] - DEBUG: GET /v1/subscribers/<APP_USER_ID>/products 200
* ```
* ## Entitlements
*
* An entitlement represents features or content that a user is "entitled" to. With Entitlements, you can set up your available in-app products remotely and control their availability without the need to update your app. For more information on configuring entitlements, look at our [entitlements documetation](https://docs.revenuecat.com/docs/entitlements).
*
* ## Sample App
*
* We've added an [example](https://github.com/RevenueCat/purchases-ionic-example) showing a simple example using _Purchases_ with the RevenueCat backend. Note that the pre-registered in app purchases in the demo apps are for illustration purposes only and may not be valid in App Store Connect. [Set up your own purchases](https://docs.revenuecat.com/docs/entitlements) with RevenueCat when running the example.
*
* #### Additional iOS Setup
*
* ##### Add Strip Frameworks Phase
* The App Store, in it's infinite wisdom, still rejects fat frameworks, so we need to strip our framework before it is deployed. To do this, add the following script phase to your build.
* 1. In Xcode, in project manager, select your app target.
* 2. Open the `Build Phases` tab
* 3. Add a new `Run Script`, name it `Strip Frameworks`
* 4. Add the following command `"${PROJECT_DIR}/../../node_modules/cordova-plugin-purchases/src/ios/strip-frameworks.sh"` (quotes included)
*
* ![](https://media.giphy.com/media/39zTmnsW1CIrJNk5AM/giphy.gif)
*
* ## Next Steps
* - Head over to our **[online documentation](https://docs.revenuecat.com/docs)** for complete setup guides
* - If you haven't already, make sure your products are configured correctly in the RevenueCat dashboard by checking out our [guide on entitlements](https://docs.revenuecat.com/docs/entitlements)
* - If you want to use your own user identifiers, read about [setting app user ids](https://docs.revenuecat.com/docs/user-ids)
* - If you're moving to RevenueCat from another system, see our guide on [migrating your existing subscriptions](https://docs.revenuecat.com/docs/migrating-existing-subscriptions)
* - Once you're ready to test your integration, you can follow our guides on [testing purchases](https://docs.revenuecat.com/docs/testing-purchases)
*
* ## Reporting Issues
*
* You can use Github Issues to report any bugs and issues with _Purchases_. Here is some advice for users that want to report an issue:
*
* 1. Make sure that you are using the latest version of _Purchases_. The issue that you are about to report may be already fixed in the latest master branch version: https://github.com/revenuecat/cordova-plugin-purchases/tree/master.
* 2. Providing reproducible steps for the issue will shorten the time it takes for it to be fixed - a Gist is always welcomed!
* 3. Since some issues are Sandbox specific, specifying what environment you encountered the issue might help.
*
* ## Technical Support or Questions
*
* If you have questions or need help integrating _Purchases_ please [contact us](https://www.revenuecat.com/contact) or email _support@revenuecat.com_ instead of opening an issue.
*
* ## Feature Requests
*
* If there is something you'd like to see included or feel anything is missing you can add a feature to our [public roadmap](https://trello.com/b/RZRnWRbI/revenuecat-product-roadmap). If the feature already exists, or you see something else you'd like, upvote it.
*
* ## Pricing
*
* _Purchases_ SDK is free to use but some features require a paid plan. You can find more about that on our website on the [pricing plan page](https://www.revenuecat.com/pricing).
*
* @interfaces
* RCPurchaserInfo
* RCProduct
* RCMakePurchaseResponse
* RCError
*/
@Plugin({
pluginName: 'Purchases',
plugin: 'cordova-plugin-purchases',
pluginRef: 'Purchases', // the variable reference to call the plugin, example: navigator.geolocation
repo: 'https://github.com/RevenueCat/cordova-plugin-purchases', // the github repository URL for the plugin
platforms: ['Android', 'iOS'] // Array of platforms supported, example: ['Android', 'iOS']
})
@Injectable({
providedIn: 'root'
})
export class Purchases extends IonicNativePlugin {
/**
* Sets up Purchases with your API key and an app user id.
* @param apiKey {string} RevenueCat API Key. Needs to be a String
* @param appUserID {string?} A unique id for identifying the user
*/
@Cordova({ sync: true })
setup(apiKey: string, appUserID: string): void {}
/**
* Set this to true if you are passing in an appUserID but it is anonymous, this is true by default if you didn't pass an appUserID
* If a user tries to purchase a product that is active on the current app store account, we will treat it as a restore and alias
* the new ID with the previous id.
* @param allowSharing {boolean} true if enabled, false to diabled
*/
@Cordova({ sync: true })
setAllowSharingStoreAccount(allowSharing: boolean): void {}
/**
* Add a dict of attribution information
* @param data { Object.<string, any> } Attribution data from any of the attribution networks in ATTRIBUTION_NETWORKS
* @param network {ATTRIBUTION_NETWORKS} Which network, see ATTRIBUTION_NETWORKS
*/
@Cordova({ sync: true })
addAttributionData(
data: { [key: string]: any },
network: ATTRIBUTION_NETWORKS
): void {}
/**
* Gets the map of entitlements -> offerings -> products
*
* @return {Observable<Map<String, Map<String, Product>>>} Errors are of type [RCError]
*/
@Cordova({ observable: true })
getEntitlements(): Observable<Map<String, Map<String, RCProduct>>> {
return;
}
/**
* Fetch the product info
* @param productIdentifiers {string[]} Array of product identifiers
* @param type {ProductType} Optional type of products to fetch, can be inapp or subs. Subs by default
*
* @return {Observable<Array>} Will return an [RCError] if the products are not properly configured in RevenueCat or if there is another error retrieving them.
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
observable: true
})
getProducts(
productIdentifiers: string[],
type: ProductType = ProductType.SUBS
): Observable<[RCProduct]> {
return;
}
/**
* Make a purchase
* @param productIdentifier {string} The product identifier of the product you want to purchase.
* @param oldSkus {string[]} Optional array of skus you wish to upgrade from.
* @param type {String} Optional type of product, can be inapp or subs. Subs by default
*
* @return {Observable<MakePurchaseResponse>} An [RCError] is thrown when user cancels. On error `usercancelled` will be true if user cancelled
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
observable: true
})
makePurchase(
productIdentifier: string,
oldSkus: string[] = [],
type: ProductType = ProductType.SUBS
): Observable<RCMakePurchaseResponse> {
return;
}
/**
* Restores a user's previous purchases and links their appUserIDs to any user's also using those purchases.
*
* @return {Observable<PurchaserInfo>} Errors are of type [RCError]
*/
@Cordova({ observable: true })
restoreTransactions(): Observable<RCPurchaserInfo> {
return;
}
/**
* Get the appUserID that is currently in placed in the SDK
*
* @return {Promise<string>}
*/
@Cordova()
getAppUserID(): Promise<string> {
return;
}
/**
* This function will alias two appUserIDs together.
* @param newAppUserID {String} The new appUserID that should be linked to the currently identified appUserID. Needs to be a string.
*
* @return {Observable<PurchaserInfo>} Errors are of type [RCError]
*/
@Cordova({ observable: true })
createAlias(newAppUserID: string): Observable<RCPurchaserInfo> {
return;
}
/**
* This function will identify the current user with an appUserID. Typically this would be used after a logout to identify a new user without calling configure
* @param newAppUserID {String} The new appUserID that should be linked to the currently identified appUserID. Needs to be a string.
*
* @return {Observable<PurchaserInfo>} Errors are of type [RCError]
*/
@Cordova({ observable: true })
identify(newAppUserID: string): Observable<RCPurchaserInfo> {
return;
}
/**
* Resets the Purchases client clearing the saved appUserID. This will generate a random user id and save it in the cache.
*
* @return {Observable<PurchaserInfo>} Errors are of type [RCError]
*/
@Cordova({ observable: true })
reset(): Observable<RCPurchaserInfo> {
return;
}
/**
* Gets the current purchaser info. This call will return the cached purchaser info unless the cache is stale, in which case,
* it will make a network call to retrieve it from the servers.
*
* @return {Observable<PurchaserInfo>} Errors are of type [RCError]
*/
@Cordova({ observable: true })
getPurchaserInfo(): Observable<RCPurchaserInfo> {
return;
}
/**
* Returns an observable that can be used to receive updates on the purchaser info
*
* @return {Observable<PurchaserInfo>}
*/
@Cordova({
eventObservable: true,
event: 'onPurchaserInfoUpdated',
element: 'window'
})
onPurchaserInfoUpdated(): Observable<RCPurchaserInfo> {
return;
}
/**
* Enables/Disables debugs logs
* @param enabled {boolean} true to enable debug logs, false to disable
*/
@Cordova({ sync: true })
setDebugLogsEnabled(enabled: boolean): void {}
}
export enum ProductType {
SUBS = 'subs',
INAPP = 'inapp'
}
export enum ATTRIBUTION_NETWORKS {
APPLE_SEARCH_ADS = 0,
ADJUST = 1,
APPSFLYER = 2,
BRANCH = 3,
TENJIN = 4
}
export interface RCProduct {
identifier: string;
description: string;
title: string;
price: number;
price_string: string;
intro_price?: string;
intro_price_string?: string;
intro_price_period?: string;
intro_price_cycles?: number;
currency_code: string;
}
export interface RCPurchaserInfo {
activeEntitlements: string[];
activeSubscriptions: string[];
allPurchasedProductIdentifiers: string[];
latestExpirationDate?: string;
allExpirationDates: { [key: string]: string | null };
expirationsForActiveEntitlements: { [key: string]: string | null };
}
export interface RCMakePurchaseResponse {
productIdentifier: string;
purchaserInfo: RCPurchaserInfo;
}
export interface RCError {
code: number;
message: string;
underlyingErrorMessage?: string;
}

View File

@@ -389,7 +389,9 @@ export class PushObject {
if (
checkAvailability('PushNotification', 'init', 'PushNotification') === true
) {
this._objectInstance = window.PushNotification.init(options);
if (typeof window !== 'undefined') {
this._objectInstance = window.PushNotification.init(options);
}
}
}

View File

@@ -0,0 +1,21 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name QuikklyPlugin
* @description ionic wrapper for cordova-plugin-quikkly
* Use the quikkly scanner in your ionic app
*/
@Plugin({
pluginName: 'QuikklyPlugin',
plugin: 'cordova-plugin-quikkly',
pluginRef: 'cordova.plugins.quikkly',
repo: 'https://github.com/quikkly/cordova-plugin-quikkly.git',
platforms: ['Android', 'iOS']
})
@Injectable()
export class QuikklyPlugin extends IonicNativePlugin {
@Cordova()
openScanner(): Promise<string[]> { return ; }
}

View File

@@ -5,7 +5,7 @@ import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
* @beta
* @name Rollbar
* @description
* This plugin adds Rollbar App monitoring to your application
* This plugin adds [Rollbar](https://rollbar.com/) App monitoring to your application
*
* @usage
* ```typescript

View File

@@ -0,0 +1,249 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
export class SmartlookSetupConfig {
private smartlookAPIKey: string;
private fps: number;
constructor(smartlookAPIKey: string, fps?: number) {
this.smartlookAPIKey = smartlookAPIKey;
this.fps = fps;
}
}
export class SmartlookUserIdentifier {
private identifier: string;
private sessionProperties: {};
constructor(identifier: string, sessionProperties?: {}) {
this.identifier = identifier;
this.sessionProperties = sessionProperties;
}
}
export class SmartlookCustomEvent {
private name: string;
private eventProperties: {};
constructor(name: string, eventProperties?: {}) {
this.name = name;
this.eventProperties = eventProperties;
}
}
export class SmartlookGlobalEventProperties {
private globalEventProperties: {};
private immutable: boolean;
constructor(globalEventProperties: {}, immutable: boolean) {
this.globalEventProperties = globalEventProperties;
this.immutable = immutable;
}
}
export class SmartlookGlobalEventProperty {
private key: string;
private value: string;
private immutable: boolean;
constructor(key: string, value: string, immutable: boolean) {
this.key = key;
this.value = value;
this.immutable = immutable;
}
}
export class SmartlookGlobalEventPropertyKey {
private key: string;
constructor(key: string) {
this.key = key;
}
}
/**
* @name Smartlook
* @description
* Official Smartlook SDK plugin. For more information visit (www.smartlook.com).
*
* @usage
* ```typescript
* import { Smartlook } from '@ionic-native/smartlook/ngx';
*
*
* constructor(private smartlook: Smartlook) { }
*
* ...
*
*
* this.smartlook.setupAndStartRecording(new SmartlookSetupConfig("key"));
*
* ```
* @classes
* SmartlookSetupConfig
* SmartlookUserIdentifier
* SmartlookCustomEvent
* SmartlookGlobalEventProperties
* SmartlookGlobalEventProperty
* SmartlookGlobalEventPropertyKey
*/
@Plugin({
pluginName: 'Smartlook',
plugin: 'https://github.com/smartlook/cordova-smartlook.git',
pluginRef: 'cordova.plugins.SmartlookPlugin',
repo: 'https://github.com/smartlook/cordova-smartlook.git',
platforms: ['Android']
})
@Injectable()
export class Smartlook extends IonicNativePlugin {
/**
* Setup and start Smartlook SDK recording.
* @param config SmartlookSetupConfig object.
* @param config.smartlookAPIKey (required) Smartlook API key (you can obtain it in your dashboard).
* @param config.fps (optional) recorded video framerate (allowed values 2-10 fps).
*/
@Cordova({ sync: true })
setupAndStartRecording(config: SmartlookSetupConfig): void {
return;
}
/**
* Setup/initialize Smartlook SDK. This method DOESN'T start the recording (@see start())
* @param config SmartlookSetupConfig object.
* @param config.smartlookAPIKey (required) Smartlook API key (you can obtain it in your dashboard).
* @param config.fps (optional) recorded video framerate (allowed values 2-10 fps).
*/
@Cordova({ sync: true })
setup(config: SmartlookSetupConfig): void {
return;
}
/**
* Start SDK recording.
*/
@Cordova({ sync: true })
startRecording(): void {
return;
}
/**
* Stop SDK recording. Recording will start again when you call start().
*/
@Cordova({ sync: true })
stopRecording(): void {
return;
}
/**
* Check if SDK is currently recording.
* @return {Promise<boolean>} Returns a promise with isRecording boolean.
*/
@Cordova()
isRecording(): Promise<boolean> {
return;
}
/**
* When you start sensitive mode SDK records blank videos (single color) but SDK still sends analytic events.
*/
@Cordova({ sync: true })
startFullscreenSensitiveMode(): void {
return;
}
/**
* Stop sensitive mode -> SDK records video.
*/
@Cordova({ sync: true })
stopFullscreenSensitiveMode(): void {
return;
}
/**
* Check if fullscreen sensitive mode is active.
* @return {Promise<boolean>} Returns a promise with isFullscreenSensitiveModeActive boolean.
*/
@Cordova()
isFullscreenSensitiveModeActive(): Promise<boolean> {
return;
}
/**
* Identify user.
* @param identifier SmartlookUserIdentifier object.
* @param identifier.idenfier (required) id that can be used to identify user and his records.
* You will see this Id in Smartlook dashboard so you can pair records with concrete user.
* @param identifier.sessionProperties (optional) custom session properties object.
*/
@Cordova({ sync: true })
setUserIdentifier(identifier: SmartlookUserIdentifier): void {
return;
}
/**
* Track custom event.
* @param event SmartlookCustomEvent object.
* @param event.name (required) string used to identify event.
* @param event.eventProperties (optional) event properties object.
*/
@Cordova({ sync: true })
trackCustomEvent(event: SmartlookCustomEvent): void {
return;
}
/**
* Track custom event.
* @param timedEvent SmartlookCustomEvent object.
* @param timedEvent.name (required) string used to identify timed event.
* @param timedEvent.eventProperties (optional) timed event properties object. These properties will
* be merged with properties of tracked event (with lower priority).
*/
@Cordova({ sync: true })
startTimedCustomEvent(timedEvent: SmartlookCustomEvent): void {
return;
}
/**
* Set global event properties that will be added to every tracked event.
* @param properties SmartlookGlobalEventProperties object.
* @param properties.globalEventProperties (required) global event properties object.
* @param properties.immutable (required) If set to TRUE these properties have higher priority
* than mutable ones and also they cannot be changed (only removed).
*/
@Cordova({ sync: true })
setGlobalEventProperties(properties: SmartlookGlobalEventProperties): void {
return;
}
/**
* Check if SDK is currently recording.
* @param property SmartlookGlobalEventProperty object.
* @param property.key global property key.
* @param property.value global property value.
* @param property.immutable (required) If set to TRUE these properties have higher priority
* than mutable ones and also they cannot be changed (only removed).
*/
@Cordova({ sync: true })
setGlobalEventProperty(property: SmartlookGlobalEventProperty): void {
return;
}
/**
* Remove property from global event properties.
* @param property SmartlookGlobalEventPropertyKey object.
* @param property.key global property key.
*/
@Cordova({ sync: true })
removeGlobalEventProperty(property: SmartlookGlobalEventPropertyKey): void {
return;
}
/**
* Remove all properties from global event properties.
*/
@Cordova({ sync: true })
removeAllGlobalEventProperties(): void {
return;
}
}

View File

@@ -0,0 +1,56 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name Sms Retriever
* @description
* This plugin retrives the SMS which arrive without requiring READ permissions.
*
* @usage
* ```typescript
* import { SmsRetriever } from '@ionic-native/sms-retriever';
*
*
* constructor(private smsRetriever: SmsRetriever) { }
*
* ...
*
*
* this.smsRetriever.getAppHash()
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
* this.smsRetriever.startWatching()
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'SmsRetriever',
plugin: 'cordova-plugin-sms-retriever-manager',
pluginRef: 'cordova.plugins.smsRetriever',
repo: 'https://github.com/hanatharesh2712/ionic-native-sms-retriever-plugin-master',
install: 'ionic cordova plugin add cordova-plugin-sms-retriever-manager --variable PLAY_SERVICES_VERSION="15.0.1"',
installVariables: ['PLAY_SERVICES_VERSION'],
platforms: ['Android']
})
@Injectable()
export class SmsRetriever extends IonicNativePlugin {
/**
* This function start wathching message arrive event and retrive message text.
* @return {Promise<string>} Returns a promise that resolves when retrives SMS text or TIMEOUT after 5 min.
*/
@Cordova()
startWatching(): Promise<string> {
return;
}
/**
* This function is to get hash string of APP.
* @return {Promise<string>} Returns a promise that resolves when successfully generate hash of APP.
*/
@Cordova()
getAppHash(): Promise<string> {
return;
}
}

View File

@@ -0,0 +1,139 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
/**
* OAuth configuration data.
*/
export interface Config {
/** The client ID as per the Spotify dev console. */
clientId: string;
/** The redirect URI as entered in the Spotify dev console. */
redirectUrl: string;
/**
* Safety margin time (in milliseconds) for the token refresh.
*
* The plugin applies a safety margin to the token lifetime in order
* to give the token user enough time to perform all operations needed.
*
* Otherwise the plugin might hand out a token that is already expired
* before it could ever be used.
*
* The safety margin defaults to 30s.
*/
refreshSafetyMargin?: number;
/** Requested OAuth scopes. */
scopes: string[];
/** The token exchange URL. */
tokenExchangeUrl: string;
/** The token refresh URL. */
tokenRefreshUrl: string;
}
/**
* The authorization data.
*/
export interface AuthorizationData {
/** A valid access token. */
accessToken: string;
/** The encrypted refresh token. */
encryptedRefreshToken: string;
/** The date (from UTC, in milliseconds) when the given access token expires. */
expiresAt: number;
}
/**
* @name Spotify Auth
* @description
* Cordova plugin for authenticating with Spotify
* > https://github.com/Festify/cordova-spotify-oauth
*
* @usage
* ```typescript
* import { SpotifyAuth } from '@ionic-native/spotify-auth';
*
* // [...]
*
* constructor(private spotifyAuth: SpotifyAuth) { }
*
* // [...]
*
* const config = {
* clientId: "<SPOTIFY CLIENT ID>",
* redirectUrl: "<REDIRECT URL, MUST MATCH WITH AUTH ENDPOINT AND SPOTIFY DEV CONSOLE>",
* scopes: ["streaming"], // see Spotify Dev console for all scopes
* tokenExchangeUrl: "<URL OF TOKEN EXCHANGE HTTP ENDPOINT>",
* tokenRefreshUrl: "<URL OF TOKEN REFRESH HTTP ENDPOINT>",
* };
*
* ...
*
* this.spotifyAuth.authorize(config)
* .then(({ accessToken, expiresAt }) => {
* console.log(`Got an access token, its ${accessToken}!`);
* console.log(`Its going to expire in ${expiresAt - Date.now()}ms.`);
* });
*
* // [...]
*
* this.spotifyAuth.forget().then(() => console.log("We're logged out!"));
*
* // [...]
* ```
*/
@Plugin({
pluginName: 'SpotifyAuth',
plugin: 'cordova-spotify-oauth',
pluginRef: 'cordova.plugins.spotifyAuth',
repo: 'https://github.com/Festify/cordova-spotify-oauth',
install: 'ionic cordova plugin add cordova-spotify-oauth --variable LOCAL_STORAGE_KEY="SpotifyOAuthData"',
installVariables: ['LOCAL_STORAGE_KEY'],
platforms: ['Android', 'iOS']
})
@Injectable()
export class SpotifyAuth extends IonicNativePlugin {
/**
* Obtains valid authorization data.
*
* This method performs the necessary steps in order to obtain a valid
* access token. It performs the OAuth dance prompting the user to log in,
* exchanges the obtained authorization code for an access and a refresh
* token, caches those, and returns both to the developer.
*
* When it is invoked again, it will first check whether the cached access
* token is still valid (including a configurable safety margin) and the
* scopes equal, and return the token directly if that is the case. Otherwise,
* the method will transparently refresh the token (or obtain a new one if
* the scopes changed) and return that.
*
* Bottom line - always call this if you need a valid access token in your code.
*
* @param cfg {Config} configuration
* @return {Promise<AuthorizationData>}
*/
@Cordova({
sync: false
})
authorize(cfg: Config): Promise<AuthorizationData> {
return;
}
/**
* Removes all cached data so that `authorize` performs the full
* oauth dance again.
*
* This is akin to a "logout".
*
* @return {void}
*/
@Cordova({
sync: true
})
forget(): void { }
}

View File

@@ -0,0 +1,192 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
export interface SumUpResponse {
// Code to identify the message
code: number;
// Message for readable usage
message: string;
}
export interface SumUpLoginStatus {
// Code, to check if an error occured
code: number;
// Booleand value whether the user is logged in or not
isLoggedIn: boolean;
}
export interface SumUpPayment {
// Unique transaction code
transaction_code: string;
// Card type -> like MAESTRO
card_type: string;
// Merchant code for identification
merchant_code: string;
// Amount of the payment
amount: number;
// Tip amount -> default 0
tip_amount: number;
// Vat amount -> default 0
vat_amount: number;
// Currency code -> like EUR
currency: string;
// Payment status -> successful or error
status: string;
// Type -> Card or nfc
payment_type: string;
// Entry mode -> Like chip or contactless
entry_mode: string;
// Number of installments -> default 1
installments: number;
}
/**
* @name SumUp
* @description
* Plugin to communicate with a SumUp payment terminal
*
* @usage
* ```typescript
* import { SumUp } from '@ionic-native/sum-up';
*
*
* constructor(private sumUp: SumUp) { }
*
* this.sumUp.login("ACCESS_TOKEN")
* .then((res: SumUpResponse) => console.log(res))
* .catch((error: SumUpResponse) => console.error(error));
*
* this.sumUp.auth("ACCESS_TOKEN")
* .then((res: SumUpResponse) => console.log(res))
* .catch((error: SumUpResponse) => console.error(error));
*
* this.sumUp.getSettings()
* .then((res: SumUpResponse) => console.log(res))
* .catch((error: SumUpResponse) => console.error(error));
*
* this.sumUp.logout()
* .then((res: SumUpResponse) => console.log(res))
* .catch((error: SumUpResponse) => console.error(error));
*
* this.sumUp.isLoggedIn()
* .then((res: SumUpLoginStatus) => console.log(res))
* .catch((error: SumUpLoginStatus) => console.error(error));
*
* this.sumUp.prepare()
* .then((res: SumUpResponse) => console.log(res))
* .catch((error: SumUpResponse) => console.error(error));
*
* this.sumUp.closeConnection()
* .then((res: SumUpResponse) => console.log(res))
* .catch((error: SumUpResponse) => console.error(error));
*
* this.sumUp.pay(10.0, "EUR")
* .then((res: SumUpPayment) => console.log(res))
* .catch((error: SumUpPayment) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'SumUp',
plugin: 'cordova-sumup-plugin',
pluginRef: 'window.SumUp',
repo: 'https://github.com/mariusbackes/cordova-plugin-sumup',
install:
'cordova plugin add cordova-sumup-plugin --variable SUMUP_API_KEY=INSERT_YOUR_KEY',
installVariables: ['SUMUP_API_KEY'],
platforms: ['Android', 'iOS']
})
@Injectable()
export class SumUp extends IonicNativePlugin {
/**
* Login a user with an optional access token.
* If the access token is provided and valid, the user is logged in autmatically.
* Otherwise the user has to type in the credentials
* @param accessToken {string}
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
login(accessToken?: string): Promise<SumUpResponse> {
return;
}
/**
* Authenticates the account with the given access token. Parameter accessToken is required.
* @param accessToken {string}
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
auth(accessToken: string): Promise<SumUpResponse> {
return;
}
/**
* Opens a new window with the all account settings of an logged in user.
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
getSettings(): Promise<SumUpResponse> {
return;
}
/**
* Logout a user from the account.
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
logout(): Promise<SumUpResponse> {
return;
}
/**
* Checks whether the user is logged in or not and returns an object with the field isLoggedIn which is a boolean value.
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
isLoggedIn(): Promise<SumUpLoginStatus> {
return;
}
/**
* Prepares the terminal for a payment. Checks whether the CardReader is ready to transmit and
* if an instance of the CardReaderManager is available.
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
prepare(): Promise<SumUpResponse> {
return;
}
/**
* Tries to close the connection to the card terminal.
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
closeConnection(): Promise<SumUpResponse> {
return;
}
/**
* Opens a native SumUp window to proceed a payment. Parameter amount and currencycode are required.
* If the Payment was successful it returns an SumUpPayment object with information about the payment.
* @param amount {number}
* @param currencycode {string}
* @return {Promise<SumUpResponse>} Return a SumUpResponse object
*/
@Cordova()
pay(amount: number, currencycode: string): Promise<SumUpPayment> {
return;
}
}

View File

@@ -0,0 +1,72 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
export interface ThemeDetectionResponse {
// Boolean value about the status of the request
value: boolean;
// Message for readable usage
message: string;
}
/**
* @beta
* @name Theme Detection
* @description
* Cordova plugin to detect whether dark mode is enabled or not
*
* @usage
* ```typescript
* import { ThemeDetection } from '@ionic-native/theme-detection';
*
*
* constructor(private themeDetection: ThemeDetection) { }
*
* ...
*
* this.themeDetection.isAvailable()
* .then((res: ThemeDetectionResponse) => {
* if(res.value) {
* this.themeDetection.isDarkModeEnabled().then((res: ThemeDetectionResponse) => {
* console.log(res);
* })
* .catch((error: any) => console.error(error));
* }
* })
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'ThemeDetection',
plugin: 'cordova-plugin-theme-detection',
pluginRef: 'cordova.plugins.ThemeDetection',
repo: 'https://github.com/mariusbackes/cordova-plugin-theme-detection',
install: 'cordova plugin add cordova-plugin-theme-detection',
installVariables: [],
platforms: ['iOS', 'Android']
})
@Injectable()
export class ThemeDetection extends IonicNativePlugin {
/**
*
* @return {Promise<ThemeDetectionResponse>}
* Returns a promise with an object that has a boolean property which gives information if the detection is available or not
*/
@Cordova()
isAvailable(): Promise<ThemeDetectionResponse> {
return;
}
/**
*
* @return {Promise<ThemeDetectionResponse>}
* Returns a promise with an object that has a boolean property which gives information if dark mode is enabled or not
*/
@Cordova()
isDarkModeEnabled(): Promise<ThemeDetectionResponse> {
return;
}
}

View File

@@ -85,7 +85,9 @@ export class ThemeableBrowserObject {
styleOptions
);
} catch (e) {
window.open(url);
if (typeof window !== 'undefined') {
window.open(url);
}
console.warn(
'Native: ThemeableBrowser is not installed or you are running on a browser. Falling back to window.open.'
);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,819 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin } from '@ionic-native/core';
export interface TagGroupEditor {
addTags(): void;
removeTags(): void;
apply(): void;
}
/**
* Enum for notification types.
* @readonly
* @enum {number}
*/
export enum NotificationType {
none = 0,
badge = 1,
sound = 2,
alert = 4
}
/**
* Enum for presentation options.
* @readonly
* @enum {number}
*/
export enum PresentationOptions {
none = 0,
badge = 1,
sound = 2,
alert = 4
}
/**
* @name UrbanAirShip
* @description
* This plugin does something
*
* @usage
* ```typescript
* import { UrbanAirShip } from '@ionic-native/urbanairship/ngx';
*
*
* constructor(private urbanAirShip: UrbanAirShip) { }
*
* ...
*
*
* this.urbanAirShip.takeOff(config)
* .then((res: any) => console.log(res))
* .catch((error: any) => console.error(error));
*
* ```
*/
@Plugin({
pluginName: 'UrbanAirShip',
plugin: 'urbanairship-cordova',
pluginRef: 'window.UAirship',
repo: 'https://www.npmjs.com/package/urbanairship-cordova',
install: 'ionic cordova plugin add urbanairship-cordova',
platforms: ['Android', 'iOS']
})
@Injectable()
export class UrbanAirShip extends IonicNativePlugin {
/**
* Re-attaches document event listeners in this webview
*/
@Cordova()
reattach(): Promise<any> {
return;
}
/**
* Initailizes Urban Airship.
*
* The plugin will automatically call takeOff during the next app init in
* order to properly handle incoming push. If takeOff is called multiple times
* in a session, or if the config is different than the previous sesssion, the
* new config will not be used until the next app start.
*
* @param {object} config The Urban Airship config.
* @param {object} config.development The Urban Airship development config.
* @param {string} config.development.appKey The development appKey.
* @param {string} config.development.appSecret The development appSecret.
* @param {object} config.production The Urban Airship production config.
* @param {string} config.production.appKey The production appKey.
* @param {string} config.production.appSecret The production appSecret.
*/
@Cordova()
takeOff(config: any): Promise<any> {
return;
}
/**
* Sets the Android notification config. Values not set will fallback to any values set in the config.xml.
*
* @param {object} config The notification config.
* @param {string} [config.icon] The name of the drawable resource to use as the notification icon.
* @param {string} [config.largeIcon] The name of the drawable resource to use as the notification large icon.
* @param {string} [config.accentColor] The notification accent color. Format is #AARRGGBB.
*/
@Cordova()
setAndroidNotificationConfig(config: any): Promise<any> {
return;
}
/**
* Sets the default behavior when the message center is launched from a push
* notification. If set to false the message center must be manually launched.
*
* @param {boolean} enabled true to automatically launch the default message center, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setAutoLaunchDefaultMessageCenter(enabled: boolean): Promise<any> {
return;
}
/**
* Enables or disables user notifications.
*
* @param {boolean} enabled true to enable notifications, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setUserNotificationsEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Checks if user notifications are enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if user notifications is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isUserNotificationsEnabled(): Promise<any> {
return;
}
/**
* Checks if app notifications are enabled or not. Its possible to have `userNotificationsEnabled`
* but app notifications being disabled if the user opted out of notifications.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if app notifications is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isAppNotificationsEnabled(): Promise<any> {
return;
}
/**
* Returns the channel ID.
*
* @param {function(ID)} success The function to call on success.
* @param {string} success.ID The channel ID string
* @param {failureCallback} [failure] The function to call on failure.
* @param {string} failure.message The error message.
*/
@Cordova()
getChannelID(): Promise<any> {
return;
}
/**
* Returns the last notification that launched the application.
*
* @param {Boolean} clear true to clear the notification.
* @param {function(push)} success The function to call on success.
* @param {object} success.push The push message object containing data associated with a push notification.
* @param {string} success.push.message The push alert message.
* @param {object} success.push.extras Any push extras.
* @param {number} [success.push.notification_id] The Android notification ID.
* @param {failureCallback} [failure] The function to call on failure.
* @param {string} failure.message The error message.
*/
@Cordova()
getLaunchNotification(clear: boolean): Promise<any> {
return;
}
/**
* Returns the last received deep link.
*
* @param {Boolean} clear true to clear the deep link.
* @param {function(push)} success The function to call on success.
* @param {string} success.deepLink The deep link.
* @param {failureCallback} [failure] The function to call on failure.
* @param {string} failure.message The error message.
*/
@Cordova()
getDeepLink(clear: boolean): Promise<any> {
return;
}
/**
* Returns the tags as an array.
*
* @param {function(tags)} success The function to call on success.
* @param {array} success.tags The tags as an array.
* @param {failureCallback} [failure] The function to call on failure.
* @param {string} failure.message The error message.
*/
@Cordova()
getTags(): Promise<any> {
return;
}
/**
* Sets the tags.
*
* @param {Array} tags an array of strings.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setTags(tags: string[]): Promise<any> {
return;
}
/**
* Returns the alias.
*
* @deprecated Deprecated since 6.7.0 - to be removed in a future version of the plugin - please use getNamedUser
*
* @param {function(currentAlias)} success The function to call on success.
* @param {string} success.currentAlias The alias as a string.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
getAlias(): Promise<any> {
return;
}
/**
* Sets the alias.
*
* @deprecated Deprecated since 6.7.0 - to be removed in a future version of the plugin - please use setNamedUser
*
* @param {String} alias string
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setAlias(alias: string): Promise<any> {
return;
}
/**
* Checks if quiet time is enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if quiet time is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isQuietTimeEnabled(): Promise<any> {
return;
}
/**
* Enables or disables quiet time.
*
* @param {Boolean} enabled true to enable quiet time, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setQuietTimeEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Checks if the device is currently in quiet time.
*
* @param {function(inQuietTime)} success Success callback.
* @param {boolean} success.inQuietTime Flag indicating if quiet time is currently in effect.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isInQuietTime(): Promise<any> {
return;
}
/**
* Returns the quiet time as an object with the following:
* "startHour": Number,
* "startMinute": Number,
* "endHour": Number,
* "endMinute": Number
*
* @param {function(quietTime)} success The function to call on success.
* @param {object} success.quietTime The quietTime object represents a timespan during
* which notifications should be silenced.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
getQuietTime(): Promise<any> {
return;
}
/**
* Sets the quiet time.
*
* @param {Number} startHour for quiet time.
* @param {Number} startMinute for quiet time.
* @param {Number} endHour for quiet time.
* @param {Number} endMinute for quiet time.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setQuietTime(startHour: number, startMinute: number, endHour: number, endMinute: number): Promise<any> {
return;
}
/**
* Enables or disables analytics.
*
* Disabling analytics will delete any locally stored events
* and prevent any events from uploading. Features that depend on analytics being
* enabled may not work properly if it's disabled (reports, region triggers,
* location segmentation, push to local time).
*
* @param {Boolean} enabled true to enable analytics, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setAnalyticsEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Checks if analytics is enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if analytics is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isAnalyticsEnabled(): Promise<any> {
return;
}
/**
* Returns the named user ID.
*
* @param {function(namedUser)} success The function to call on success.
* @param {string} success.namedUser The named user ID as a string.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
getNamedUser(): Promise<any> {
return;
}
/**
* Sets the named user ID.
*
* @param {String} namedUser identifier string.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setNamedUser(namedUser: string): Promise<any> {
return;
}
/**
* Runs an Urban Airship action.
*
* @param {String} actionName action as a string.
* @param {*} actionValue
* @param {function(result)} [success] The function to call on success.
* @param {object} success.result The result's value.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
runAction(actionName: string, actionValue: any): Promise<any> {
return;
}
/**
* Creates an editor to modify the named user tag groups.
*
* @return {TagGroupEditor} A tag group editor instance.
*/
@Cordova()
editNamedUserTagGroups(): TagGroupEditor {
return;
}
/**
* Creates an editor to modify the channel tag groups.
*
* @return {TagGroupEditor} A tag group editor instance.
*/
@Cordova()
editChannelTagGroups(): TagGroupEditor {
return;
}
/**
* Sets an associated identifier for the Connect data stream.
*
* @param key Custom key for identifier.
* @param identifier The identifier value.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setAssociatedIdentifier(key: string, identifier: string): Promise<any> {
return;
}
// Location
/**
* Enables or disables Urban Airship location services.
*
* @param {Boolean} enabled true to enable location, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setLocationEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Checks if location is enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if location is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isLocationEnabled(): Promise<any> {
return;
}
/**
* Enables or disables background location.
*
* @param {Boolean} enabled true to enable background location, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setBackgroundLocationEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Checks if background location is enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if background location updates are enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isBackgroundLocationEnabled(): Promise<any> {
return;
}
/**
* Displays the message center.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
displayMessageCenter(): Promise<any> {
return;
}
/**
* Dismiss the message center.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
dismissMessageCenter(): Promise<any> {
return;
}
/**
* Dismiss the inbox message.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
dismissInboxMessage(): Promise<any> {
return;
}
/**
* Dismiss the inbox message in the overlay.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
dismissOverlayInboxMessage(): Promise<any> {
return;
}
/**
* Gets the array of inbox messages. Each message will have the following properties:
* "id": string - The messages ID. Needed to display, mark as read, or delete the message.
* "title": string - The message title.
* "sentDate": number - The message sent date in milliseconds.
* "listIconUrl": string, optional - The icon url for the message.
* "isRead": boolean - The unread/read status of the message.
* "extras": object - String to String map of any message extras.
*
* @param {function(messages)} success The function to call on success.
* @param {array} success.messages The array of inbox messages.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
getInboxMessages(): Promise<any> {
return;
}
/**
* Marks an inbox message read.
*
* @param {String} messageId The ID of the message to mark as read.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
markInboxMessageRead(messageId: string): Promise<any> {
return;
}
/**
* Deletes an inbox message.
*
* @param {String} messageId The ID of the message to delete.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
deleteInboxMessage(messageId: string): Promise<any> {
return;
}
/**
* Displays the inbox message using a full screen view.
*
* @param {String} messageId The ID of the message to display.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
displayInboxMessage(messageId: string): Promise<any> {
return;
}
/**
* Forces the inbox to refresh. This is normally not needed as the inbox
* will automatically refresh on foreground or when a push arrives thats
* associated with a message, but it can be useful when providing a refresh
* button for the message listing.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
refreshInbox(): Promise<any> {
return;
}
/**
* Displays the inbox message using an overlay display.
*
* @param {String} messageId The ID of the message to display.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
overlayInboxMessage(messageId: string): Promise<any> {
return;
}
/**
* Clears a notification by identifier.
*
* @param {string} identifier The notification identifier.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
*/
@Cordova()
clearNotification(identifier: string): Promise<any> {
return;
}
/**
* Clears all notifications posted by the application.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
clearNotifications(): Promise<any> {
return;
}
/**
* Gets currently active notifications.
*
* Note: On Android this functionality is only supported on Android M or higher.
*
* @param {function(messages)} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
*/
@Cordova()
getActiveNotifications(): Promise<any> {
return;
}
// iOS only
/**
* Enables or disables auto badge. Defaults to `NO`.
*
* @param {Boolean} enabled true to enable auto badge, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setAutobadgeEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Sets the badge number.
*
* @param count number specified badge to set.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setBadgeNumber(count: number): Promise<any> {
return;
}
/**
* Returns the current badge number.
*
* @param {function(badgeNumber)} success The function to call on success.
* @param {int} success.badgeNumber The current application badge number.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
getBadgeNumber(): Promise<any> {
return;
}
/**
* Clears the badge.
*
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
resetBadge(): Promise<any> {
return;
}
/**
* Sets the iOS notification types. Specify the combination of
* badges, sound and alerts that are desired.
*
* @param types specified notification types.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setNotificationTypes(types: NotificationType): Promise<any> {
return;
}
/**
* Sets the iOS presentation options. Specify the combination of
* badges, sound and alerts that are desired.
*
* @param options types specified presentation options.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setPresentationOptions(options: PresentationOptions): Promise<any> {
return;
}
// Android only
/**
* Checks if notification sound is enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if sound is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isSoundEnabled(): Promise<any> {
return;
}
/**
* Enables or disables notification sound.
*
* @param {Boolean} enabled true to enable sound, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setSoundEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Checks if notification vibration is enabled or not.
*
* @param {function(enabled)} success Success callback.
* @param {boolean} success.enabled Flag indicating if vibration is enabled or not.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
isVibrateEnabled(): Promise<any> {
return;
}
/**
* Enables or disables notification vibration.
*
* @param {Boolean} enabled true to enable vibration, false to disable.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
setVibrateEnabled(enabled: boolean): Promise<any> {
return;
}
/**
* Adds a custom event.
*
* @param {object} event The custom event object.
* @param {string} event.name The event's name.
* @param {number} [event.value] The event's value.
* @param {string} [event.transactionId] The event's transaction ID.
* @param {object} [event.properties] The event's properties. Only numbers, booleans, strings, and array of strings are supported.
* @param {function} [success] Success callback.
* @param {function(message)} [failure] Failure callback.
* @param {string} failure.message The error message.
*/
@Cordova()
addCustomEvent(event: object): Promise<any> {
return;
}
}

View File

@@ -0,0 +1,605 @@
import { Injectable } from '@angular/core';
import { Plugin, Cordova, IonicNativePlugin, getPromise } from '@ionic-native/core';
export interface WonderPushDelegate {
urlForDeepLink(url: string, callback: (url?: string) => void): void;
}
export interface WonderPushChannel {
id: string;
groupId?: string;
name?: string;
description?: string;
bypassDnd?: boolean;
showBadge?: boolean;
importance?: number;
lights?: boolean;
lightColor?: number;
vibrate?: boolean;
sound?: boolean;
soundUri?: string;
lockscreenVisibility?: number;
vibrateInSilentMode?: boolean;
color?: number;
localOnly?: boolean;
}
export interface WonderPushChannelGroup {
id: string;
name?: string;
}
class NestedObject {
pluginObj: any;
constructor(pluginObj: any) {
this.pluginObj = pluginObj;
}
wrap<T>(functionName: string, args: any[]): Promise<T> {
const plugin = WonderPush.getPlugin();
const userPreferences = plugin ? plugin.UserPreferences : null;
if (!plugin || !userPreferences || !userPreferences[functionName]) {
return getPromise<T>((res, rej) => {
rej(new Error('Could not find plugin'));
});
}
return getPromise<T>((res, rej) => {
userPreferences[functionName].apply(userPreferences, [ ...args, res]);
});
}
}
export class UserPreferencesMethods extends NestedObject {
/**
* Get the default channel id
* @returns {Promise<string>}
*/
getDefaultChannelId(): Promise<string> {
return this.wrap<string | null>('getDefaultChannelId', []);
}
/**
* Set the default channel id
* @param {string} id
* @returns {Promise<any>}
*/
setDefaultChannelId(id: string): Promise<any> {
return this.wrap('setDefaultChannelId', [id]);
}
/**
* Get a channel group
* @param {string} groupId
* @returns {Promise<WonderPushChannelGroup | null>}
*/
getChannelGroup(groupId: string): Promise<WonderPushChannelGroup | null> {
return this.wrap<WonderPushChannelGroup | null>('getChannelGroup', [groupId]);
}
/**
* Get a channel
* @param {string} channelId
* @returns {Promise<WonderPushChannel | null>}
*/
getChannel(channelId: string): Promise<WonderPushChannel | null> {
return this.wrap<WonderPushChannel | null>('getChannel', [channelId]);
}
/**
* Create, update and remove channel existing groups to match the given channel groups
* @param {WonderPushChannelGroup[]} channelGroups
* @returns {Promise<any>}
*/
setChannelGroups(channelGroups: WonderPushChannelGroup[]): Promise<any> {
return this.wrap('setChannelGroups', [channelGroups]);
}
/**
* Create, update and remove channels to match the given channels
* @param {WonderPushChannel[]} channels
* @returns {Promise<any>}
*/
setChannels(channels: WonderPushChannel[]): Promise<any> {
return this.wrap('setChannels', [channels]);
}
/**
* Create or update a channel group
* @param {WonderPushChannelGroup} channelGroup
* @returns {Promise<any>}
*/
putChannelGroup(channelGroup: WonderPushChannelGroup): Promise<any> {
return this.wrap('putChannelGroup', [channelGroup]);
}
/**
* Create or update a channel
* @param {WonderPushChannel} channel
* @returns {Promise<any>}
*/
putChannel(channel: WonderPushChannel): Promise<any> {
return this.wrap('putChannel', [channel]);
}
/**
* Remove a channel group
* @param {string} groupId
* @returns {Promise<any>}
*/
removeChannelGroup(groupId: string): Promise<any> {
return this.wrap('removeChannelGroup', [groupId]);
}
/**
* Remove a channel
* @param {string} channelId
* @returns {Promise<any>}
*/
removeChannel(channelId: string): Promise<any> {
return this.wrap('removeChannel', [channelId]);
}
}
/**
* @name WonderPush
* @description
*
* Push notification delivery with the WonderPush service.
*
* Get started in minutes: [Ionic Quickstart Guide](https://docs.wonderpush.com/docs/ionic-quickstart).
*
* Requires the Cordova plugin `wonderpush-cordova-sdk`.
*
* [WonderPush](https://www.wonderpush.com) is the most effective way
* to retain your users and grow your audience while remaining fully GDPR compliant.
*
* @usage
* ```typescript
* import { WonderPush } from '@ionic-native/wonderpush';
*
*
* constructor(private wonderPush: WonderPush) { }
*
* ...
*
* // Subscribe user
* this.wonderPush.subscribeToNotifications()
* .then(() => console.log("User subscribed to notifications"))
* .catch((error: any) => console.error(error));
*
*
* // Send an event (a purchase in this example)
* this.wonderPush.sendEvent('purchase', {
* float_price: 12.99,
* string_sku: "X123456"
* });
*
* // Tag users (as customers)
* this.wonderPush.addTag('customer');
*
* // Personalize
* 1. Store user details.
* 2. Use those details to create segments.
* 3. Include those details in your notifications.
* this.wonderPush.putProperties({
* string_name: 'John D.',
* int_age: 24
* });
*
* // GDPR
* 1. set REQUIRES_USER_CONSENT=true to enable GDPR compliance.
* 2. WonderPush doesn't start until setUserConsent(true) is called.
* const onClick = (userConsent: boolean) => this.wonderPush.setUserConsent(userConsent);
*
* // Listen to notification clicks
* document.addEventListener('wonderpush.notificationOpen', function(event) {
* console.log('Notification opened', event.notification);
* if (event.notificationType === 'data') {
* console.log('Silent notification', event.notification);
* }
* });
* ```
*
* @interfaces
* WonderPushChannel
* WonderPushChannelGroup
*/
@Plugin({
pluginName: 'WonderPush',
plugin: 'wonderpush-cordova-sdk',
pluginRef: 'WonderPush',
repo: 'https://github.com/wonderpush/wonderpush-cordova-sdk',
install: 'ionic cordova plugin add wonderpush-cordova-sdk --variable CLIENT_ID=YOUR_CLIENT_ID --variable CLIENT_SECRET=YOUR_CLIENT_SECRET ',
installVariables: ['CLIENT_ID', 'CLIENT_SECRET'],
platforms: ['Android', 'iOS'],
})
@Injectable()
export class WonderPush extends IonicNativePlugin {
/**
* Sets the user id, used to identify a single identity across multiple devices,
* and to correctly identify multiple users on a single device.
*
* If not called, the last used user id it assumed. Defaulting to `null` if none is known.
*
* Upon changing userId, the access token is wiped, so avoid unnecessary calls, like calling with `null`
* just before calling with a user id.
*
* @param {?string} userId - The user id, unique to your application.
* Use `null` for anonymous users.
*
* You are strongly encouraged to use your own unique internal identifier.
* @returns {Promise<any>}
*/
@Cordova()
setUserId(userId: string | null): Promise<any> {
return;
}
/**
* Whether the SDK is ready to operate.
*
* The SDK is ready when it is initialized and has fetched an access token.
* @returns {Promise<any>}
*/
@Cordova()
isReady(): Promise<boolean> {
return;
}
/**
* Controls native SDK logging.
* @param {boolean} enabled - Whether to enable logs.
* @returns {Promise<any>}
*/
@Cordova()
setLogging(enabled: boolean): Promise<any> {
return;
}
/**
* Sets up a delegate for tighter integration, or removes it.
* @param {?WonderPushDelegate} delegate - The delegate to set, or `null` to remove it.
* @returns {Promise<any>}
*/
@Cordova()
setDelegate(delegate: WonderPushDelegate | null): Promise<any> {
return;
}
/**
* Gets the current delegate.
* @returns {Promise<WonderPushDelegate | null>} A promise with the delegate of null
*/
@Cordova()
getDelegate(): Promise<WonderPushDelegate | null> {
return;
}
/**
* Returns the userId currently in use, `null` by default.
* @returns {Promise<string | null>} A promise with the user ID or null
*/
@Cordova()
getUserId(): Promise<string | null > {
return;
}
/**
* Returns the installationId identifying your application on a device, bond to a specific userId.
* If you want to store this information on your servers, keep the corresponding userId with it.
* Will return `null` until the SDK is properly initialized.
* @returns {Promise<string | null>} A promise with the installation ID or null
*/
@Cordova()
getInstallationId(): Promise<string | null> {
return;
}
/**
* Returns the unique device identifier
* @returns {Promise<string | null>} A promise with the device ID or null
*/
@Cordova()
getDeviceId(): Promise<string | null> {
return;
}
/**
* Returns the push token.
* @returns {Promise<string | null>} A promise with the push token or `null`
*/
@Cordova()
getPushToken(): Promise<string | null> {
return;
}
/**
* Returns the currently used access token.
* Returns `null` until the SDK is properly initialized.
* This together with your client secret gives entire control to the current installation and associated user, you should not disclose it unnecessarily.
* @returns {Promise<string | null>}
*/
@Cordova()
getAccessToken(): Promise<string | null> {
return;
}
/**
* Send an event to be tracked to WonderPush.
*
* @param {string} type - The event type, or name. Event types starting with an `@` character are reserved.
* @param {?object} [attributes] - An object containing custom properties to be attached to the event.
* The keys should be prefixed according to the type of their values.
* You can find the details in the [Concepts > Custom fields](https://www.wonderpush.com/docs/guide/custom-fields) section of the documentation.
* @returns {Promise<any>}
*/
@Cordova()
trackEvent(type: string, attributes: { [key: string]: any }): Promise<any> {
return;
}
/**
* Adds one or more tags to the installation.
* @param {string|string[]} tag - The tags to add to the installation. You can use either a single string argument or an array of strings.
* @returns {Promise<any>}
*/
@Cordova()
addTag(tag: string | string[]): Promise<any> {
return;
}
/**
* Removes one or more tags from the installation.
* @param {string|string[]} tag - The tags to remove from the installation. You can use either a single string argument or an array of strings.
* @returns {Promise<any>}
*/
@Cordova()
removeTag(tag: string | string[]): Promise<any> {
return;
}
/**
* Removes all tags from the installation.
* @returns {Promise<any>}
*/
@Cordova()
removeAllTags(): Promise<any> {
return;
}
/**
* Returns all the tags of the installation.
* @returns {Promise<string[]>}
*/
@Cordova()
getTags(): Promise<string[]> {
return;
}
/**
* Tests whether the installation has the given tag attached to it.
* @param {string} tag - The tag to test.
* @returns {Promise<boolean>}
*/
@Cordova()
hasTag(tag: string): Promise<boolean> {
return;
}
/**
* Sets the value to a given installation property.
*
* The previous value is replaced entirely.
* Setting `undefined` or `null` has the same effect as {@link cordova.plugins.WonderPush#unsetProperty}.
*
* @param {string} field - The name of the property to set
* @param value
* @returns {Promise<any>}
*/
@Cordova()
setProperty(field: string, value: any): Promise<any> {
return;
}
/**
* Removes the value of a given installation property.
*
* The previous value is replaced with `null`.
*
* @param {string} field - The name of the property
* @returns {Promise<any>}
*/
@Cordova()
unsetProperty(field: string): Promise<any> {
return;
}
/**
* Adds the value to a given installation property.
*
* The stored value is made an array if not already one.
* If the given value is an array, all its values are added.
* If a value is already present in the stored value, it won't be added.
*
* @param {string} field - The name of the property
* @param value
* @returns {Promise<void>}
*/
@Cordova()
addProperty(field: string, value: any): Promise<void> {
return;
}
/**
* Removes the value from a given installation property.
*
* The stored value is made an array if not already one.
* If the given value is an array, all its values are removed.
* If a value is present multiple times in the stored value, they will all be removed.
*
* @param {string} field - The name of the property
* @param value
* @returns {Promise<any>}
*/
@Cordova()
removeProperty(field: string, value: any): Promise<any> {
return;
}
/**
* Returns the value of a given installation property.
*
* If the property stores an array, only the first value is returned.
* This way you don't have to deal with potential arrays if that property is not supposed to hold one.
* Returns `null` if the property is absent or has an empty array value.
*
* @param {string} field - The name of the property to read values from
* @returns {Promise<any>}
*/
@Cordova()
getPropertyValue(field: string): Promise<any> {
return;
}
/**
* Returns an array of the values of a given installation property.
*
* If the property does not store an array, an array is returned nevertheless.
* This way you don't have to deal with potential scalar values if that property is supposed to hold an array.
* Returns an empty array instead of `null` if the property is absent.
* Returns an array wrapping any scalar value held by the property.
*
* @param {string} field - The name of the property to read values from
* @returns {Promise<any[]>}
*/
@Cordova()
getPropertyValues(field: string): Promise<any[]> {
return;
}
/**
* Returns the latest known custom properties attached to the current installation object stored by WonderPush.
* @returns {Promise<{[p: string]: any}>}
*/
@Cordova()
getProperties(): Promise<{[key: string]: any}> {
return;
}
/**
* Updates the properties attached to the current installation object stored by WonderPush.
*
* In order to remove a value, use `null`.
*
* @param {{[p: string]: any}} properties. The keys should be prefixed according to the type of their values. You can find the details in the [Segmentation > Properties](https://docs.wonderpush.com/docs/properties#section-custom-properties) section of the documentation.
* @returns {Promise<any>}
*/
@Cordova()
putProperties(properties: {[key: string]: any}): Promise<any> {
return;
}
/**
* Subscribes to push notification and registers the device token with WondePush.
*
* On iOS, you **must** call the following method at least once to make the notification visible to the user.
*
* - You can call this method multiple times. The user is only prompted for permission by iOS once.
* - There is no need to call this method if the permission has already been granted, but it does not harm either.
* - If the permission has been denied in the OS, the user will stay soft opt-out.
*
* Because in iOS you only have *one* chance for prompting the user, you should find a good timing for that.
* For a start, you can systematically call it when the application starts, so that the user will be prompted directly at the first launch.
*
* @return {Promise<any>} Returns a promise that resolves upon successful subscription
*/
@Cordova()
subscribeToNotifications(): Promise<any> {
return;
}
/**
* Returns whether the notifications are enabled.
* @returns {Promise<boolean>}
*/
@Cordova()
isSubscribedToNotifications(): Promise<boolean> {
return;
}
/**
* Unsubscribes from push notification.
* This method marks the user as soft opt-out.
*
* @returns {Promise<any>}
*/
@Cordova()
unsubscribeFromNotifications(): Promise<any> {
return;
}
/**
* Reads user consent state.
* Returns undefined if no explicit consent was set.
* @returns {Promise<boolean>}
*/
@Cordova()
getUserConsent(): Promise<boolean> {
return;
}
/**
* Provides or withdraws user consent.
* If the `requiresUserConsent` initialization option is true,
* the whole SDK is paused and no data is sent to WonderPush, until consent is provided.
* @param {boolean} consent -
* @returns {Promise<any>}
*/
@Cordova()
setUserConsent(consent: boolean): Promise<any> {
return;
}
/**
* Remove any local storage and ask the WonderPush servers to delete any data associated with the all local installations and related users.
* @returns {Promise<any>}
*/
@Cordova()
clearAllData(): Promise<any> {
return;
}
/**
* Ask the WonderPush servers to delete any event associated with the all local installations.
* @returns {Promise<any>}
*/
@Cordova()
clearEventsHistory(): Promise<any> {
return;
}
/**
* Ask the WonderPush servers to delete any custom data associated with the all local installations and related users.
*
* @returns {Promise<any>}
*/
@Cordova()
clearPreferences(): Promise<any> {
return;
}
/**
* Initiates the download of all user remote and local data.
*
* @returns {Promise<any>}
*/
@Cordova()
downloadAllData(): Promise<any> {
return;
}
UserPreferences = new UserPreferencesMethods(this);
}

View File

@@ -0,0 +1,170 @@
import { Injectable } from '@angular/core';
import { Cordova, IonicNativePlugin, Plugin } from '@ionic-native/core';
/**
* @name Zoom
* @description
* A Cordova plugin to use Zoom Video Conferencing services on Cordova applications.
*
* @usage
* ```typescript
* import { Zoom } from '@ionic-native/zoom';
*
*
* constructor(private zoomService: Zoom) { }
*
* ...
*
* // Initialize Zoom SDK, need to be called when app fired up.
* this.zoomService.initialize(API_KEY, API_SECRET)
* .then((success: any) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Log user in with Zoom username and password.
* this.zoomService.login(userName, password)
* .then((success: any) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Log user out.
* this.zoomService.logout()
* .then((success: boolean) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Check whether user is logged in.
* this.zoomService.isLoggedIn()
* .then((success: boolean) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // meeting options (Only available for Android)
* let options = {
* "no_driving_mode":true,
* "no_invite":true,
* "no_meeting_end_message":true,
* "no_titlebar":false,
* "no_bottom_toolbar":false,
* "no_dial_in_via_phone":true,
* "no_dial_out_to_phone":true,
* "no_disconnect_audio":true,
* "no_share":true,
* "no_audio":true,
* "no_video":true,
* "no_meeting_error_message":true
* };
*
* // Join meeting.
* this.zoomService.joinMeeting(meetingNumber, meetingPassword, displayName, options)
* .then((success: any) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Start an existing meeting for non-login user.
* this.zoomService.startMeetingWithZAK(meetingNumber, displayName, zoomToken, zoomAccessToken, userId, options)
* .then((success: any) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Start an existing meeting for logged in user.
* this.zoomService.startMeeting(meetingNumber, vanityId, options)
* .then((success: any) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Start an instant meeting for logged in user.
* this.zoomService.startInstantMeeting()
* .then((success: anu) => console.log(success))
* .catch((error: any) => console.log(error));
*
* // Set language.
* this.zoomService.setLanguage("en-US")
* .then((success: any) => console.log(success))
* .catch((error: any) => console.log(error));
* ```
*/
@Plugin({
pluginName: 'Zoom',
plugin: 'cordova.plugin.zoom', // npm package name, example: cordova-plugin-camera
pluginRef: 'cordova.plugins.Zoom', // the variable reference to call the plugin, example: navigator.geolocation
repo: 'https://github.com/zoom/zoom-sdk-ionic', // the github repository URL for the plugin
platforms: ['Android', 'iOS'] // Array of platforms supported, example: ['Android', 'iOS']
})
@Injectable()
export class Zoom extends IonicNativePlugin {
/**
* Initialize Zoom SDK.
* @param appKey Zoom SDK app key.
* @param appSecret Zoom SDK app secret.
* @return {Promise<any>}
*/
@Cordova()
initialize(appKey: string, appSecret: string): Promise<any> { return; }
/**
* Log user in with Zoom username and password.
* @param username user's Zoom username.
* @param password user's Zoom password.
* @return {Promise<any>}
*/
@Cordova()
login(username: string, password: string): Promise<any> { return; }
/**
* Log user out.
* @return {Promise<any>} true if logout success / false if failed.
*/
@Cordova()
logout(): Promise<any> { return; }
/**
* Check whether the user is logged in.
* @return {Promise<boolean>} true if is logged in / false if not.
*/
@Cordova()
isLoggedIn(): Promise<boolean> { return; }
/**
* Join a meeting for logged in user.
* @param meetingNo meeting number.
* @param meetingPassword meeting password.
* @param options meeting options.
* @return {Promise<any>}
*/
@Cordova()
joinMeeting(meetingNo: string, meetingPassword: string, displayName: string, options: any): Promise<any> { return; }
/**
* Start a meeting for non-login user.
* @param meetingNo meeting number.
* @param displayName display name shown in meeting.
* @param zoomToken zoom token retrieved from Zoom Rest API.
* @param zoomAccessToken zoom access token retrieved from Zoom Rest API.
* @param userId user ID retrieved from Zoom Rest API.
* @param options meeting options.
* @return {Promise<any>}
*/
@Cordova()
startMeetingWithZAK(meetingNo: string, displayName: string, zoomToken: string, zoomAccessToken: string, userId: string, options: any): Promise<any> { return; }
/**
* Start a meeting for logged in user.
* @param meetingNo meeting number.
* @param options meeting option.
* @return {Promise<any>}
*/
@Cordova()
startMeeting(meetingNo: string, options: any): Promise<any> { return; }
/**
* Start an instant meeting for logged in user.
* @param options meeting option.
* @return {Promise<any>}
*/
@Cordova()
startInstantMeeting(options: any): Promise<any> { return; }
/**
* Set language.
* @param languageTag language name.
* @return {Promise<any>}
*/
@Cordova()
setLocale(languageTag: string): Promise<any> { return; }
}

View File

@@ -10,6 +10,8 @@
"no-extra-boolean-cast": false,
"adjacent-overload-signatures": false,
"ter-no-proto": false,
"callable-types": false
"callable-types": false,
"ordered-imports": false,
"prefer-conditional-expression": false
}
}