jiuyiUniapp/jiuyi/node_modules/@tencentcloud/react-native-push/index.ts

103 lines
3.8 KiB
TypeScript

import { NativeModules, NativeEventEmitter, EmitterSubscription } from 'react-native';
const TencentCloudPush = NativeModules.TencentCloudPush ? NativeModules.TencentCloudPush : {};
interface ListenerConfig {
nativeListener: EmitterSubscription | undefined;
listeners: Array<(data: any) => void>;
}
const LOG_PREFIX = 'Push js |';
export default class Push {
static EVENT = {
MESSAGE_RECEIVED: 'message_received',
MESSAGE_REVOKED: 'message_revoked',
};
static EventEmitter: NativeEventEmitter = new NativeEventEmitter(NativeModules.TencentCloudPush);
static ListenerMap: Map<String, ListenerConfig> = new Map();
private constructor() {}
static registerPush(SDKApppID: number, appKey: string, onSuccess: (data: string) => void, onError?: (errCode: number, errMsg: string) => void): void {
console.log(LOG_PREFIX, 'registerPush', SDKApppID, appKey);
if (typeof onError === 'function') {
TencentCloudPush.registerPushWithOnError(SDKApppID, appKey, onSuccess, onError);
} else {
TencentCloudPush.registerPush(SDKApppID, appKey, onSuccess);
}
}
static unRegisterPush(onSuccess: () => void, onError?: (errCode: number, errMsg: string) => void) {
console.log(LOG_PREFIX, 'unRegisterPush');
if (typeof onError === 'function') {
TencentCloudPush.unRegisterPushWithOnError(onSuccess, onError);
} else {
TencentCloudPush.unRegisterPush(onSuccess);
}
}
static getRegistrationID(onSuccess: (registrationID: string) => void): void {
console.log(LOG_PREFIX, 'getRegistrationID');
TencentCloudPush.getRegistrationID(onSuccess);
}
static setRegistrationID(registrationID: string, onSuccess: () => void): void {
console.log(LOG_PREFIX, 'setRegistrationID', registrationID);
TencentCloudPush.setRegistrationID(registrationID, onSuccess);
}
static getNotificationExtInfo(onSuccess: (extInfo: string) => void): void {
console.log(LOG_PREFIX, 'getNotificationExtInfo');
TencentCloudPush.getNotificationExtInfo(onSuccess);
}
static addPushListener(eventName: string, listener: (data: any) => void): void {
console.log(LOG_PREFIX, 'addPushListener ', eventName);
const listenerConfig: ListenerConfig = Push.ListenerMap.get(eventName) || {
listeners: [],
nativeListener: undefined,
};
const oldListeners: Array<(data: any) => void> = listenerConfig.listeners;
const newListeners: Array<(data: any) => void> = [listener];
listenerConfig.listeners = [...oldListeners, ...newListeners];
if (!listenerConfig.nativeListener) {
listenerConfig.nativeListener = Push.EventEmitter.addListener(eventName, event => {
let { data } = event;
if(eventName === Push.EVENT.MESSAGE_RECEIVED) {
try {
data = JSON.parse(data);
} catch (error) {
console.log(LOG_PREFIX, `${eventName} JSON.parse error `, error);
}
}
Push.ListenerMap.get(eventName)?.listeners.forEach(item => {
if (typeof item === 'function') {
item(data);
}
});
});
}
Push.ListenerMap.set(eventName, listenerConfig);
}
static removePushListener(eventName: string, listener?: (data: any) => void): void {
console.log(LOG_PREFIX, 'removePushListener ', eventName);
const listenerConfig: ListenerConfig = Push.ListenerMap.get(eventName) || {
listeners: [],
nativeListener: undefined,
};
if (listener) {
listenerConfig.listeners = listenerConfig.listeners.filter((item) => {
return item !== listener;
});
Push.ListenerMap.set(eventName, listenerConfig);
} else {
listenerConfig.listeners = [];
}
if (listenerConfig.listeners.length === 0) {
listenerConfig.nativeListener?.remove();
Push.ListenerMap.delete(eventName);
}
}
}