mirror of
https://github.com/danielsogl/awesome-cordova-plugins.git
synced 2025-02-21 00:23:00 +08:00
feat(cordova-plugin-firebasex): Add plugin (#3106)
This commit is contained in:
parent
a2f5acb48c
commit
de83edb99b
527
src/@ionic-native/plugins/firebase-x/index.ts
Normal file
527
src/@ionic-native/plugins/firebase-x/index.ts
Normal 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, it’s 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user